From 319c9aeed8d9d1b225eb3234b439f899d0054ec4 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Mon, 25 Jun 2018 09:39:39 +0200 Subject: Fix stackoverflow on rebuilding method names --- src/main/java/cuchaz/enigma/analysis/JarIndex.java | 30 ++++++++++------------ 1 file changed, 13 insertions(+), 17 deletions(-) (limited to 'src/main/java/cuchaz') diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index 27a8e07b..5917a32f 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java @@ -35,7 +35,6 @@ public class JarIndex { private Multimap innerClassesByOuter; private Map outerClassesByInner; private Map bridgedMethods; - private Map accessMethods; private Set syntheticMethods; public JarIndex(ReferencedEntryPool entryPool) { @@ -52,7 +51,6 @@ public class JarIndex { this.innerClassesByOuter = HashMultimap.create(); this.outerClassesByInner = Maps.newHashMap(); this.bridgedMethods = Maps.newHashMap(); - this.accessMethods = Maps.newHashMap(); this.syntheticMethods = Sets.newHashSet(); } @@ -72,7 +70,6 @@ public class JarIndex { // look for access and bridged methods MethodEntry accessedMethod = findAccessMethod(methodEntry); if (accessedMethod != null) { - this.accessMethods.put(methodEntry, accessedMethod); if (isBridgedMethod(accessedMethod, methodEntry)) { this.bridgedMethods.put(methodEntry, accessedMethod); } @@ -333,17 +330,20 @@ public class JarIndex { private void getRelatedMethodImplementations(Set methodEntries, MethodInheritanceTreeNode node) { MethodEntry methodEntry = node.getMethodEntry(); + if (methodEntries.contains(methodEntry)) { + return; + } if (containsObfMethod(methodEntry)) { // collect the entry methodEntries.add(methodEntry); } - // look at access methods! - MethodEntry accessMethod = getAccessMethod(methodEntry); - while (accessMethod != null) { - methodEntries.addAll(getRelatedMethodImplementations(accessMethod)); - accessMethod = getAccessMethod(accessMethod); + // look at bridge methods! + MethodEntry bridgedMethod = getBridgedMethod(methodEntry); + while (bridgedMethod != null) { + methodEntries.addAll(getRelatedMethodImplementations(bridgedMethod)); + bridgedMethod = getBridgedMethod(bridgedMethod); } // look at interface methods too @@ -364,11 +364,11 @@ public class JarIndex { methodEntries.add(methodEntry); } - // look at access methods! - MethodEntry accessMethod = getAccessMethod(methodEntry); - while (accessMethod != null) { - methodEntries.addAll(getRelatedMethodImplementations(accessMethod)); - accessMethod = getAccessMethod(accessMethod); + // look at bridge methods! + MethodEntry bridgedMethod = getBridgedMethod(methodEntry); + while (bridgedMethod != null) { + methodEntries.addAll(getRelatedMethodImplementations(bridgedMethod)); + bridgedMethod = getBridgedMethod(bridgedMethod); } // recurse @@ -491,10 +491,6 @@ public class JarIndex { return this.bridgedMethods.get(bridgeMethodEntry); } - public MethodEntry getAccessMethod(MethodEntry bridgeMethodEntry) { - return this.accessMethods.get(bridgeMethodEntry); - } - public List getObfClassChain(ClassEntry obfClassEntry) { // build class chain in inner-to-outer order -- cgit v1.2.3