public List<AsmMethod> getCallsToMethod() { List<AsmMethod> callsToMethod = new ArrayList<AsmMethod>(); for (AsmEdge usage : getOutgoingEdges()) { if (usage.getUsage() == SourceCodeEdgeUsage.CALLS_METHOD) { callsToMethod.add((AsmMethod) usage.getTo()); } } return callsToMethod; }
public List<AsmField> getCallsToField() { List<AsmField> callsToField = new ArrayList<AsmField>(); for (AsmEdge usage : getOutgoingEdges()) { if (usage.getUsage() == SourceCodeEdgeUsage.CALLS_FIELD) { callsToField.add((AsmField) usage.getTo()); } } return callsToField; }
private void computeAccessedField() { if (!isConstructor()) { for (AsmEdge edge : getOutgoingEdges()) { if (isCallToNonStaticInternalField(edge)) { if (isFieldAccesingDifferentField((AsmField) edge.getTo())) { accessedField = null; break; } accessedField = (AsmField) edge.getTo(); } else if (isCallToNonStaticInternalMethod(edge)) { AsmMethod method = (AsmMethod) edge.getTo(); if (isMethodNotAccessorOrAccessingDifferentField(method)) { accessedField = null; break; } accessedField = method.getAccessedField(); } } } }
@Test public void testVisitObjectField() { AsmClass asmClass = asmClassProvider.getClass("tags/SourceFile"); AsmEdge pathAsmEdge = asmClass.getField("path").getOutgoingEdges().iterator().next(); assertThat(pathAsmEdge.getTargetAsmClass().getInternalName()).isEqualTo("java/lang/String"); }
private boolean isCallToNonStaticInternalMethod(AsmEdge edge) { return edge.getTargetAsmClass() == (AsmClass) getParent() && edge.getUsage() == SourceCodeEdgeUsage.CALLS_METHOD && !((AsmMethod) edge.getTo()).isStatic(); }