From cfbb0efbff7c0fb2128fea25c2e15f4f911077c1 Mon Sep 17 00:00:00 2001 From: asiekierka Date: Mon, 12 Sep 2016 15:17:04 +0200 Subject: fix method/argument renaming edge cases, add method/argument name rebuilder, add Package to Access enum --- src/main/java/cuchaz/enigma/analysis/Access.java | 13 ++++++++++--- src/main/java/cuchaz/enigma/analysis/JarIndex.java | 11 +++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'src/main/java/cuchaz/enigma/analysis') diff --git a/src/main/java/cuchaz/enigma/analysis/Access.java b/src/main/java/cuchaz/enigma/analysis/Access.java index 877327f..b8aafaa 100644 --- a/src/main/java/cuchaz/enigma/analysis/Access.java +++ b/src/main/java/cuchaz/enigma/analysis/Access.java @@ -19,6 +19,7 @@ public enum Access { Public, Protected, + Package, Private; public static Access get(CtBehavior behavior) { @@ -30,12 +31,18 @@ public enum Access { } public static Access get(int modifiers) { - if (Modifier.isPublic(modifiers)) { + boolean isPublic = Modifier.isPublic(modifiers); + boolean isProtected = Modifier.isProtected(modifiers); + boolean isPrivate = Modifier.isPrivate(modifiers); + + if (isPublic && !isProtected && !isPrivate) { return Public; - } else if (Modifier.isProtected(modifiers)) { + } else if (!isPublic && isProtected && !isPrivate) { return Protected; - } else if (Modifier.isPrivate(modifiers)) { + } else if (!isPublic && !isProtected && isPrivate) { return Private; + } else if (!isPublic && !isProtected && !isPrivate) { + return Package; } // assume public by default return Public; diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index 851f3fa..e501540 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java @@ -38,6 +38,7 @@ public class JarIndex { private Map outerClassesByInner; private Map anonymousClasses; private Map bridgedMethods; + private Set syntheticMethods; public JarIndex() { this.obfClassEntries = Sets.newHashSet(); @@ -52,6 +53,7 @@ public class JarIndex { this.outerClassesByInner = Maps.newHashMap(); this.anonymousClasses = Maps.newHashMap(); this.bridgedMethods = Maps.newHashMap(); + this.syntheticMethods = Sets.newHashSet(); } public void indexJar(JarFile jar, boolean buildInnerClasses) { @@ -155,6 +157,11 @@ public class JarIndex { if (behaviorEntry instanceof MethodEntry) { MethodEntry methodEntry = (MethodEntry) behaviorEntry; + // is synthetic + if ((behavior.getModifiers() & AccessFlag.SYNTHETIC) != 0) { + syntheticMethods.add(methodEntry); + } + // index implementation this.methodImplementations.put(behaviorEntry.getClassName(), methodEntry); @@ -720,6 +727,10 @@ public class JarIndex { return this.anonymousClasses.containsKey(obfInnerClassEntry); } + public boolean isSyntheticMethod(MethodEntry methodEntry) { + return this.syntheticMethods.contains(methodEntry); + } + public BehaviorEntry getAnonymousClassCaller(ClassEntry obfInnerClassName) { return this.anonymousClasses.get(obfInnerClassName); } -- cgit v1.2.3