From ef9e687b476c553c6ca95c8121489f402ebaf2ae Mon Sep 17 00:00:00 2001 From: Thiakil Date: Fri, 6 Jul 2018 23:00:01 +0800 Subject: fix signature remap of inners for now --- .../bytecode/translators/TranslationSignatureVisitor.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/main/java/cuchaz/enigma') diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java index 928c6d1..e66b085 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; 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 classStack = new Stack<>(); public TranslationSignatureVisitor(Function remapper, SignatureVisitor sv) { super(Opcodes.ASM5); @@ -18,13 +20,24 @@ public class TranslationSignatureVisitor extends SignatureVisitor { @Override public void visitClassType(String name) { + classStack.push(name); String translatedEntry = this.remapper.apply(name); this.sv.visitClassType(translatedEntry); } @Override public void visitInnerClassType(String name) { + String lastClass = classStack.pop(); + if (!name.startsWith(lastClass+"$")){//todo see if there's a way to base this on whether there were type params or not + name = lastClass+"$"+name; + } String translatedEntry = this.remapper.apply(name); + if (translatedEntry.contains("/")){ + translatedEntry = translatedEntry.substring(translatedEntry.lastIndexOf("/")+1); + } + if (translatedEntry.contains("$")){ + translatedEntry = translatedEntry.substring(translatedEntry.lastIndexOf("$")+1); + } this.sv.visitInnerClassType(translatedEntry); } @@ -105,6 +118,8 @@ public class TranslationSignatureVisitor extends SignatureVisitor { @Override public void visitEnd() { this.sv.visitEnd(); + if (!classStack.empty()) + classStack.pop(); } @Override -- cgit v1.2.3