summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Thiakil2018-07-06 23:00:01 +0800
committerGravatar Thiakil2018-07-06 23:00:01 +0800
commitef9e687b476c553c6ca95c8121489f402ebaf2ae (patch)
tree9229fc21ccc2db227faf4111241c1bd994a0479c /src
parentmove SynchronizedTypeLoader to a non-inner (diff)
downloadenigma-ef9e687b476c553c6ca95c8121489f402ebaf2ae.tar.gz
enigma-ef9e687b476c553c6ca95c8121489f402ebaf2ae.tar.xz
enigma-ef9e687b476c553c6ca95c8121489f402ebaf2ae.zip
fix signature remap of inners for now
Diffstat (limited to 'src')
-rw-r--r--src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java
index 928c6d19..e66b085f 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java
+++ b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java
@@ -3,12 +3,14 @@ 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;
6import java.util.function.Function; 7import java.util.function.Function;
7 8
8public class TranslationSignatureVisitor extends SignatureVisitor { 9public class TranslationSignatureVisitor extends SignatureVisitor {
9 private final Function<String, String> remapper; 10 private final Function<String, String> remapper;
10 11
11 private final SignatureVisitor sv; 12 private final SignatureVisitor sv;
13 private final Stack<String> classStack = new Stack<>();
12 14
13 public TranslationSignatureVisitor(Function<String, String> remapper, SignatureVisitor sv) { 15 public TranslationSignatureVisitor(Function<String, String> remapper, SignatureVisitor sv) {
14 super(Opcodes.ASM5); 16 super(Opcodes.ASM5);
@@ -18,13 +20,24 @@ public class TranslationSignatureVisitor extends SignatureVisitor {
18 20
19 @Override 21 @Override
20 public void visitClassType(String name) { 22 public void visitClassType(String name) {
23 classStack.push(name);
21 String translatedEntry = this.remapper.apply(name); 24 String translatedEntry = this.remapper.apply(name);
22 this.sv.visitClassType(translatedEntry); 25 this.sv.visitClassType(translatedEntry);
23 } 26 }
24 27
25 @Override 28 @Override
26 public void visitInnerClassType(String name) { 29 public void visitInnerClassType(String name) {
30 String lastClass = classStack.pop();
31 if (!name.startsWith(lastClass+"$")){//todo see if there's a way to base this on whether there were type params or not
32 name = lastClass+"$"+name;
33 }
27 String translatedEntry = this.remapper.apply(name); 34 String translatedEntry = this.remapper.apply(name);
35 if (translatedEntry.contains("/")){
36 translatedEntry = translatedEntry.substring(translatedEntry.lastIndexOf("/")+1);
37 }
38 if (translatedEntry.contains("$")){
39 translatedEntry = translatedEntry.substring(translatedEntry.lastIndexOf("$")+1);
40 }
28 this.sv.visitInnerClassType(translatedEntry); 41 this.sv.visitInnerClassType(translatedEntry);
29 } 42 }
30 43
@@ -105,6 +118,8 @@ public class TranslationSignatureVisitor extends SignatureVisitor {
105 @Override 118 @Override
106 public void visitEnd() { 119 public void visitEnd() {
107 this.sv.visitEnd(); 120 this.sv.visitEnd();
121 if (!classStack.empty())
122 classStack.pop();
108 } 123 }
109 124
110 @Override 125 @Override