From cbda8056ceaa1eb7b5bbbe43d030be950156d97b Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 23 Jun 2018 19:15:20 +0200 Subject: Fix array translation in method calls --- .../bytecode/translators/TranslationMethodVisitor.java | 6 +----- .../java/cuchaz/enigma/mapping/DirectionalTranslator.java | 14 ++++++++++++-- src/main/java/cuchaz/enigma/mapping/entry/ClassEntry.java | 4 ++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java index 21231463..4f4a31e3 100644 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java +++ b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java @@ -48,11 +48,7 @@ public class TranslationMethodVisitor extends MethodVisitor { Object object = array[i]; if (object instanceof String) { String type = (String) object; - if (type.startsWith("[") || type.endsWith(";")) { - array[i] = translator.getTranslatedType(Type.getType(type)).getDescriptor(); - } else { - array[i] = translator.getTranslatedClass(new ClassEntry(type)).getName(); - } + array[i] = translator.getTranslatedClass(new ClassEntry(type)).getName(); } } return array; diff --git a/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java b/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java index ac179992..b0bb129d 100644 --- a/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java +++ b/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java @@ -48,13 +48,23 @@ public class DirectionalTranslator implements Translator { @Override public ClassEntry getTranslatedClass(ClassEntry entry) { - String className = entry.isInnerClass() ? translateInnerClassName(entry) : translateClassName(entry); + String className; + if (entry.isArray()) { + className = this.getTranslatedTypeDesc(new TypeDescriptor(entry.getName())).toString(); + } else { + className = entry.isInnerClass() ? translateInnerClassName(entry) : translateClassName(entry); + } return new ClassEntry(className); } @Override public ClassDefEntry getTranslatedClassDef(ClassDefEntry entry) { - String className = entry.isInnerClass() ? translateInnerClassName(entry) : translateClassName(entry); + String className; + if (entry.isArray()) { + className = this.getTranslatedTypeDesc(new TypeDescriptor(entry.getName())).toString(); + } else { + className = entry.isInnerClass() ? translateInnerClassName(entry) : translateClassName(entry); + } Signature translatedSignature = this.getTranslatedSignature(entry.getSignature()); return new ClassDefEntry(className, translatedSignature, getClassModifier(entry).transform(entry.getAccess())); } diff --git a/src/main/java/cuchaz/enigma/mapping/entry/ClassEntry.java b/src/main/java/cuchaz/enigma/mapping/entry/ClassEntry.java index fc604d82..c7958256 100644 --- a/src/main/java/cuchaz/enigma/mapping/entry/ClassEntry.java +++ b/src/main/java/cuchaz/enigma/mapping/entry/ClassEntry.java @@ -77,6 +77,10 @@ public class ClassEntry implements Entry { return this.name; } + public boolean isArray() { + return this.name.lastIndexOf('[') >= 0; + } + public boolean isInnerClass() { return this.name.lastIndexOf('$') >= 0; } -- cgit v1.2.3