Example #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;
 }
 public static ArgPositionType getArgPositionType(DependencyTree tree, int aIdx) {
   Bunsetsu aBun = tree.getBunsetsuFromNodeId(aIdx);
   DependencyNode aBunHeadNode = aBun.getHeadNode();
   if (aIdx == aBunHeadNode.getId()) {
     return ArgPositionType.HEAD;
   } else if (aIdx == aBunHeadNode.getId() - 1) {
     return ArgPositionType.HEAD_LEFT;
   } else if (aIdx == aBunHeadNode.getId() + 1) {
     return ArgPositionType.HEAD_RIGHT;
   } else {
     return ArgPositionType.OTHER;
   }
 }
Example #3
0
 public String formatIds(List<DependencyNode> list) {
   StringBuilder sb = new StringBuilder(" ");
   int remaining = maxDependencies;
   for (DependencyNode n : list) {
     remaining--;
     sb.append("(").append(n.getId()).append(") ");
     if (remaining == 0) {
       sb.append("...");
       break;
     }
   }
   return sb.toString();
 }
Example #4
0
 private void lock(MethodDependency dep, boolean lock) {
   for (DependencyNode node : dep.variableNodes) {
     if (node != null) {
       node.locked = lock;
     }
   }
   if (dep.resultNode != null) {
     dep.resultNode.locked = lock;
   }
   if (dep.thrown != null) {
     dep.thrown.locked = lock;
   }
 }
 @Override
 public void consume(DependencyType type) {
   if (filter != null && !filter.match(type)) {
     return;
   }
   if (type.getName().startsWith("[")) {
     source.getArrayItem().connect(destination.getArrayItem());
     destination.getArrayItem().connect(source.getArrayItem());
   }
   if (type.getName().equals("java.lang.Class")) {
     source.getClassValueNode().connect(destination.getClassValueNode());
   }
   if (!destination.hasType(type)) {
     destination.propagate(type);
   }
 }
Example #6
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;
 }