From dbd881184fb4955b3ecd027b35b57258fd9f3480 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Thu, 21 Jun 2018 18:43:42 +0200 Subject: Fix issues with inner class signature transformation --- src/main/java/cuchaz/enigma/Deobfuscator.java | 7 ++++--- src/main/java/cuchaz/enigma/analysis/JarIndex.java | 2 +- .../bytecode/translators/TranslationSignatureVisitor.java | 11 ++--------- src/main/java/cuchaz/enigma/mapping/ClassMapping.java | 4 ++++ 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java index cf5d0617..6bbfd072 100644 --- a/src/main/java/cuchaz/enigma/Deobfuscator.java +++ b/src/main/java/cuchaz/enigma/Deobfuscator.java @@ -335,9 +335,6 @@ public class Deobfuscator { for (ClassMapping classMapping : Lists.newArrayList(getMappings().classes())) { progress.onProgress(i++, classMapping.getDeobfName()); rebuildMethodNames(classMapping, renameClassMap); - for (ClassMapping innerClass : classMapping.innerClasses()) { - rebuildMethodNames(innerClass, renameClassMap); - } } for (Map.Entry> renameClassMapEntry : renameClassMap.entrySet()) { @@ -389,7 +386,11 @@ public class Deobfuscator { } } + classMapping.markDirty(); renameClassMap.put(classMapping, renameEntries); + for(ClassMapping innerClass : classMapping.innerClasses()){ + rebuildMethodNames(innerClass, renameClassMap); + } } diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index 3479c5d5..9cecd761 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java @@ -171,7 +171,7 @@ public class JarIndex { } // we have a bridge method! - return referencedMethods.stream().findFirst().get().entry; + return referencedMethods.stream().filter(ref -> ref.entry != method).findFirst().map(ref -> ref.entry).orElse(null); } public Set getObfClassEntries() { diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java index 2bb80a83..928c6d19 100644 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java +++ b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java @@ -3,14 +3,12 @@ package cuchaz.enigma.bytecode.translators; import org.objectweb.asm.Opcodes; import org.objectweb.asm.signature.SignatureVisitor; -import java.util.Stack; import java.util.function.Function; public class TranslationSignatureVisitor extends SignatureVisitor { private final Function remapper; private final SignatureVisitor sv; - private final Stack classes = new Stack<>(); public TranslationSignatureVisitor(Function remapper, SignatureVisitor sv) { super(Opcodes.ASM5); @@ -21,17 +19,13 @@ public class TranslationSignatureVisitor extends SignatureVisitor { @Override public void visitClassType(String name) { String translatedEntry = this.remapper.apply(name); - this.classes.push(name); this.sv.visitClassType(translatedEntry); } @Override public void visitInnerClassType(String name) { - String outerName = this.classes.pop(); - String className = outerName + "$" + name; - this.classes.push(className); - String translatedEntry = this.remapper.apply(className); - this.sv.visitInnerClassType(translatedEntry.substring(translatedEntry.lastIndexOf('$') + 1)); + String translatedEntry = this.remapper.apply(name); + this.sv.visitInnerClassType(translatedEntry); } @Override @@ -111,7 +105,6 @@ public class TranslationSignatureVisitor extends SignatureVisitor { @Override public void visitEnd() { this.sv.visitEnd(); - this.classes.pop(); } @Override diff --git a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java index d9de5678..e5133937 100644 --- a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java +++ b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java @@ -525,6 +525,10 @@ public class ClassMapping implements Comparable { this.isDirty = false; } + public void markDirty() { + this.isDirty = true; + } + public Mappings.EntryModifier getModifier() { return modifier; } -- cgit v1.2.3