private static void processClassRec( ClassNode node, final HashMap<ClassWrapper, MethodWrapper> mapClassMeths, final HashSet<ClassWrapper> setFound) { final ClassWrapper wrapper = node.wrapper; // search code for (MethodWrapper meth : wrapper.getMethods()) { RootStatement root = meth.root; if (root != null) { DirectGraph graph = meth.getOrBuildGraph(); graph.iterateExprents( new DirectGraph.ExprentIterator() { public int processExprent(Exprent exprent) { for (Entry<ClassWrapper, MethodWrapper> ent : mapClassMeths.entrySet()) { if (replaceInvocations(exprent, ent.getKey(), ent.getValue())) { setFound.add(ent.getKey()); } } return 0; } }); } } // search initializers for (int j = 0; j < 2; j++) { VBStyleCollection<Exprent, String> initializers = j == 0 ? wrapper.getStaticFieldInitializers() : wrapper.getDynamicFieldInitializers(); for (int i = 0; i < initializers.size(); i++) { for (Entry<ClassWrapper, MethodWrapper> ent : mapClassMeths.entrySet()) { Exprent exprent = initializers.get(i); if (replaceInvocations(exprent, ent.getKey(), ent.getValue())) { setFound.add(ent.getKey()); } String cl = isClass14Invocation(exprent, ent.getKey(), ent.getValue()); if (cl != null) { initializers.set( i, new ConstExprent(VarType.VARTYPE_CLASS, cl.replace('.', '/'), exprent.bytecode)); setFound.add(ent.getKey()); } } } } // iterate nested classes for (ClassNode nd : node.nested) { processClassRec(nd, mapClassMeths, setFound); } }
public boolean containsStatementStrict(Statement stat) { if (stats.contains(stat)) { return true; } for (int i = 0; i < stats.size(); i++) { if (stats.get(i).containsStatementStrict(stat)) { return true; } } return false; }
public List<Statement> getPostReversePostOrderList(List<Statement> lstexits) { List<Statement> res = new ArrayList<Statement>(); if (lstexits == null) { StrongConnectivityHelper schelper = new StrongConnectivityHelper(this); lstexits = StrongConnectivityHelper.getExitReps(schelper.getComponents()); } HashSet<Statement> setVisited = new HashSet<Statement>(); for (Statement exit : lstexits) { addToPostReversePostOrderList(exit, res, setVisited); } if (res.size() != stats.size()) { throw new RuntimeException("computing post reverse post order failed!"); } return res; }