diff options
| author | 2018-07-06 23:00:01 +0800 | |
|---|---|---|
| committer | 2018-07-06 23:00:01 +0800 | |
| commit | ef9e687b476c553c6ca95c8121489f402ebaf2ae (patch) | |
| tree | 9229fc21ccc2db227faf4111241c1bd994a0479c /src | |
| parent | move SynchronizedTypeLoader to a non-inner (diff) | |
| download | enigma-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.java | 15 |
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; | |||
| 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; | ||
| 6 | import java.util.function.Function; | 7 | import java.util.function.Function; |
| 7 | 8 | ||
| 8 | public class TranslationSignatureVisitor extends SignatureVisitor { | 9 | public 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 |