Exemplo n.º 1
0
 private FieldDependency createFieldNode(FieldReference fieldRef, FieldReader field) {
   DependencyNode node = createNode();
   if (shouldLog) {
     node.setTag(fieldRef.getClassName() + "#" + fieldRef.getFieldName());
   }
   FieldDependency dep = new FieldDependency(node, field, fieldRef);
   if (!dep.isMissing()) {
     tasks.add(() -> linkClass(fieldRef.getClassName(), null).initClass(null));
   }
   return dep;
 }
Exemplo n.º 2
0
 private MethodDependency createMethodDep(MethodReference methodRef, MethodHolder method) {
   ValueType[] arguments = methodRef.getParameterTypes();
   int paramCount = arguments.length + 1;
   DependencyNode[] parameterNodes = new DependencyNode[arguments.length + 1];
   for (int i = 0; i < parameterNodes.length; ++i) {
     parameterNodes[i] = createNode();
     parameterNodes[i].method = methodRef;
     if (shouldLog) {
       parameterNodes[i].setTag(methodRef + ":" + i);
     }
   }
   DependencyNode resultNode;
   if (methodRef.getDescriptor().getResultType() == ValueType.VOID) {
     resultNode = null;
   } else {
     resultNode = createNode();
     resultNode.method = methodRef;
     if (shouldLog) {
       resultNode.setTag(methodRef + ":RESULT");
     }
   }
   DependencyNode thrown = createNode();
   thrown.method = methodRef;
   if (shouldLog) {
     thrown.setTag(methodRef + ":THROWN");
   }
   MethodDependency dep =
       new MethodDependency(
           this, parameterNodes, paramCount, resultNode, thrown, method, methodRef);
   if (method != null) {
     tasks.add(
         () -> {
           CallLocation caller = new CallLocation(dep.getMethod().getReference());
           linkClass(dep.getMethod().getOwnerName(), caller).initClass(caller);
         });
   }
   return dep;
 }