diff options
| author | 2018-06-21 18:43:42 +0200 | |
|---|---|---|
| committer | 2018-06-21 18:43:42 +0200 | |
| commit | dbd881184fb4955b3ecd027b35b57258fd9f3480 (patch) | |
| tree | 1a99671e8d23e063a5d90cb9ba8f1d3c91cf0f3c | |
| parent | Fix anonymous class generation (diff) | |
| download | enigma-dbd881184fb4955b3ecd027b35b57258fd9f3480.tar.gz enigma-dbd881184fb4955b3ecd027b35b57258fd9f3480.tar.xz enigma-dbd881184fb4955b3ecd027b35b57258fd9f3480.zip | |
Fix issues with inner class signature transformation
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 { | |||
| 335 | for (ClassMapping classMapping : Lists.newArrayList(getMappings().classes())) { | 335 | for (ClassMapping classMapping : Lists.newArrayList(getMappings().classes())) { |
| 336 | progress.onProgress(i++, classMapping.getDeobfName()); | 336 | progress.onProgress(i++, classMapping.getDeobfName()); |
| 337 | rebuildMethodNames(classMapping, renameClassMap); | 337 | rebuildMethodNames(classMapping, renameClassMap); |
| 338 | for (ClassMapping innerClass : classMapping.innerClasses()) { | ||
| 339 | rebuildMethodNames(innerClass, renameClassMap); | ||
| 340 | } | ||
| 341 | } | 338 | } |
| 342 | 339 | ||
| 343 | for (Map.Entry<ClassMapping, Map<Entry, String>> renameClassMapEntry : renameClassMap.entrySet()) { | 340 | for (Map.Entry<ClassMapping, Map<Entry, String>> renameClassMapEntry : renameClassMap.entrySet()) { |
| @@ -389,7 +386,11 @@ public class Deobfuscator { | |||
| 389 | } | 386 | } |
| 390 | } | 387 | } |
| 391 | 388 | ||
| 389 | classMapping.markDirty(); | ||
| 392 | renameClassMap.put(classMapping, renameEntries); | 390 | renameClassMap.put(classMapping, renameEntries); |
| 391 | for(ClassMapping innerClass : classMapping.innerClasses()){ | ||
| 392 | rebuildMethodNames(innerClass, renameClassMap); | ||
| 393 | } | ||
| 393 | } | 394 | } |
| 394 | 395 | ||
| 395 | 396 | ||
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 { | |||
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | // we have a bridge method! | 173 | // we have a bridge method! |
| 174 | return referencedMethods.stream().findFirst().get().entry; | 174 | return referencedMethods.stream().filter(ref -> ref.entry != method).findFirst().map(ref -> ref.entry).orElse(null); |
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | public Set<ClassEntry> getObfClassEntries() { | 177 | public Set<ClassEntry> 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; | |||
| 3 | import org.objectweb.asm.Opcodes; | 3 | import org.objectweb.asm.Opcodes; |
| 4 | import org.objectweb.asm.signature.SignatureVisitor; | 4 | import org.objectweb.asm.signature.SignatureVisitor; |
| 5 | 5 | ||
| 6 | import java.util.Stack; | ||
| 7 | import java.util.function.Function; | 6 | import java.util.function.Function; |
| 8 | 7 | ||
| 9 | public class TranslationSignatureVisitor extends SignatureVisitor { | 8 | public class TranslationSignatureVisitor extends SignatureVisitor { |
| 10 | private final Function<String, String> remapper; | 9 | private final Function<String, String> remapper; |
| 11 | 10 | ||
| 12 | private final SignatureVisitor sv; | 11 | private final SignatureVisitor sv; |
| 13 | private final Stack<String> classes = new Stack<>(); | ||
| 14 | 12 | ||
| 15 | public TranslationSignatureVisitor(Function<String, String> remapper, SignatureVisitor sv) { | 13 | public TranslationSignatureVisitor(Function<String, String> remapper, SignatureVisitor sv) { |
| 16 | super(Opcodes.ASM5); | 14 | super(Opcodes.ASM5); |
| @@ -21,17 +19,13 @@ public class TranslationSignatureVisitor extends SignatureVisitor { | |||
| 21 | @Override | 19 | @Override |
| 22 | public void visitClassType(String name) { | 20 | public void visitClassType(String name) { |
| 23 | String translatedEntry = this.remapper.apply(name); | 21 | String translatedEntry = this.remapper.apply(name); |
| 24 | this.classes.push(name); | ||
| 25 | this.sv.visitClassType(translatedEntry); | 22 | this.sv.visitClassType(translatedEntry); |
| 26 | } | 23 | } |
| 27 | 24 | ||
| 28 | @Override | 25 | @Override |
| 29 | public void visitInnerClassType(String name) { | 26 | public void visitInnerClassType(String name) { |
| 30 | String outerName = this.classes.pop(); | 27 | String translatedEntry = this.remapper.apply(name); |
| 31 | String className = outerName + "$" + name; | 28 | this.sv.visitInnerClassType(translatedEntry); |
| 32 | this.classes.push(className); | ||
| 33 | String translatedEntry = this.remapper.apply(className); | ||
| 34 | this.sv.visitInnerClassType(translatedEntry.substring(translatedEntry.lastIndexOf('$') + 1)); | ||
| 35 | } | 29 | } |
| 36 | 30 | ||
| 37 | @Override | 31 | @Override |
| @@ -111,7 +105,6 @@ public class TranslationSignatureVisitor extends SignatureVisitor { | |||
| 111 | @Override | 105 | @Override |
| 112 | public void visitEnd() { | 106 | public void visitEnd() { |
| 113 | this.sv.visitEnd(); | 107 | this.sv.visitEnd(); |
| 114 | this.classes.pop(); | ||
| 115 | } | 108 | } |
| 116 | 109 | ||
| 117 | @Override | 110 | @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<ClassMapping> { | |||
| 525 | this.isDirty = false; | 525 | this.isDirty = false; |
| 526 | } | 526 | } |
| 527 | 527 | ||
| 528 | public void markDirty() { | ||
| 529 | this.isDirty = true; | ||
| 530 | } | ||
| 531 | |||
| 528 | public Mappings.EntryModifier getModifier() { | 532 | public Mappings.EntryModifier getModifier() { |
| 529 | return modifier; | 533 | return modifier; |
| 530 | } | 534 | } |