예제 #1
0
 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;
 }
예제 #2
0
 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;
 }
예제 #3
0
 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");
 }
예제 #5
0
 private boolean isCallToNonStaticInternalMethod(AsmEdge edge) {
   return edge.getTargetAsmClass() == (AsmClass) getParent()
       && edge.getUsage() == SourceCodeEdgeUsage.CALLS_METHOD
       && !((AsmMethod) edge.getTo()).isStatic();
 }