diff --git a/org.mapleir.app-services/src/main/java/org/mapleir/app/service/ClassTree.java b/org.mapleir.app-services/src/main/java/org/mapleir/app/service/ClassTree.java index 583bce25..8fe1ea1f 100644 --- a/org.mapleir.app-services/src/main/java/org/mapleir/app/service/ClassTree.java +++ b/org.mapleir.app-services/src/main/java/org/mapleir/app/service/ClassTree.java @@ -28,10 +28,7 @@ public class ClassTree extends FastDirectedGraph { private final ApplicationClassSource source; private final ClassNode rootNode; private final boolean allowPhantomClasses; - - private final Map> parentCache = new HashMap<>(); - private final Map> childCache = new HashMap<>(); - + public ClassTree(ApplicationClassSource source) { this(source, ALLOW_PHANTOM_CLASSES); } @@ -104,15 +101,7 @@ public List getAllParents(ClassNode cn) { if(!containsVertex(cn)) { return new ArrayList<>(); } - - List classNodes = parentCache.get(cn); - - if (classNodes == null) { - classNodes = SimpleDfs.topoorder(this, cn, false); - parentCache.put(cn, classNodes); - } - - return classNodes; + return SimpleDfs.topoorder(this, cn, false); } // returns a postorder traversal of the graph starting from cn following edges in opposite direction. @@ -120,15 +109,7 @@ public List getAllChildren(ClassNode cn) { if(!containsVertex(cn)) { return new ArrayList<>(); } - - List classNodes = childCache.get(cn); - - if (classNodes == null) { - classNodes = SimpleDfs.postorder(this, cn, true); - childCache.put(cn, classNodes); - } - - return classNodes; + return SimpleDfs.postorder(this, cn, true); } /** @@ -142,10 +123,16 @@ public Collection getAllBranches(ClassNode cn) { while (!queue.isEmpty()) { ClassNode next = queue.remove(); if (results.add(next) && next != rootNode) { - queue.addAll(getAllParents(next)); queue.addAll(getAllChildren(next)); } } + queue.add(cn); + while (!queue.isEmpty()) { + ClassNode next = queue.remove(); + if (results.add(next) && next != rootNode) { + queue.addAll(getAllParents(next)); + } + } return results; }