summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz
diff options
context:
space:
mode:
authorGravatar gegy10002018-06-21 18:43:42 +0200
committerGravatar gegy10002018-06-21 18:43:42 +0200
commitdbd881184fb4955b3ecd027b35b57258fd9f3480 (patch)
tree1a99671e8d23e063a5d90cb9ba8f1d3c91cf0f3c /src/main/java/cuchaz
parentFix anonymous class generation (diff)
downloadenigma-dbd881184fb4955b3ecd027b35b57258fd9f3480.tar.gz
enigma-dbd881184fb4955b3ecd027b35b57258fd9f3480.tar.xz
enigma-dbd881184fb4955b3ecd027b35b57258fd9f3480.zip
Fix issues with inner class signature transformation
Diffstat (limited to 'src/main/java/cuchaz')
-rw-r--r--src/main/java/cuchaz/enigma/Deobfuscator.java7
-rw-r--r--src/main/java/cuchaz/enigma/analysis/JarIndex.java2
-rw-r--r--src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java11
-rw-r--r--src/main/java/cuchaz/enigma/mapping/ClassMapping.java4
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;
3import org.objectweb.asm.Opcodes; 3import org.objectweb.asm.Opcodes;
4import org.objectweb.asm.signature.SignatureVisitor; 4import org.objectweb.asm.signature.SignatureVisitor;
5 5
6import java.util.Stack;
7import java.util.function.Function; 6import java.util.function.Function;
8 7
9public class TranslationSignatureVisitor extends SignatureVisitor { 8public 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 }