diff options
| author | 2018-06-23 19:15:20 +0200 | |
|---|---|---|
| committer | 2018-06-23 19:15:20 +0200 | |
| commit | cbda8056ceaa1eb7b5bbbe43d030be950156d97b (patch) | |
| tree | 39872b0339db1d8fc469d750d5f3c47d70bdc114 /src/main | |
| parent | Fix frame array type translation (diff) | |
| download | enigma-cbda8056ceaa1eb7b5bbbe43d030be950156d97b.tar.gz enigma-cbda8056ceaa1eb7b5bbbe43d030be950156d97b.tar.xz enigma-cbda8056ceaa1eb7b5bbbe43d030be950156d97b.zip | |
Fix array translation in method calls
Diffstat (limited to 'src/main')
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 { | |||
| 48 | Object object = array[i]; | 48 | Object object = array[i]; |
| 49 | if (object instanceof String) { | 49 | if (object instanceof String) { |
| 50 | String type = (String) object; | 50 | String type = (String) object; |
| 51 | if (type.startsWith("[") || type.endsWith(";")) { | 51 | array[i] = translator.getTranslatedClass(new ClassEntry(type)).getName(); |
| 52 | array[i] = translator.getTranslatedType(Type.getType(type)).getDescriptor(); | ||
| 53 | } else { | ||
| 54 | array[i] = translator.getTranslatedClass(new ClassEntry(type)).getName(); | ||
| 55 | } | ||
| 56 | } | 52 | } |
| 57 | } | 53 | } |
| 58 | return array; | 54 | 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 { | |||
| 48 | 48 | ||
| 49 | @Override | 49 | @Override |
| 50 | public ClassEntry getTranslatedClass(ClassEntry entry) { | 50 | public ClassEntry getTranslatedClass(ClassEntry entry) { |
| 51 | String className = entry.isInnerClass() ? translateInnerClassName(entry) : translateClassName(entry); | 51 | String className; |
| 52 | if (entry.isArray()) { | ||
| 53 | className = this.getTranslatedTypeDesc(new TypeDescriptor(entry.getName())).toString(); | ||
| 54 | } else { | ||
| 55 | className = entry.isInnerClass() ? translateInnerClassName(entry) : translateClassName(entry); | ||
| 56 | } | ||
| 52 | return new ClassEntry(className); | 57 | return new ClassEntry(className); |
| 53 | } | 58 | } |
| 54 | 59 | ||
| 55 | @Override | 60 | @Override |
| 56 | public ClassDefEntry getTranslatedClassDef(ClassDefEntry entry) { | 61 | public ClassDefEntry getTranslatedClassDef(ClassDefEntry entry) { |
| 57 | String className = entry.isInnerClass() ? translateInnerClassName(entry) : translateClassName(entry); | 62 | String className; |
| 63 | if (entry.isArray()) { | ||
| 64 | className = this.getTranslatedTypeDesc(new TypeDescriptor(entry.getName())).toString(); | ||
| 65 | } else { | ||
| 66 | className = entry.isInnerClass() ? translateInnerClassName(entry) : translateClassName(entry); | ||
| 67 | } | ||
| 58 | Signature translatedSignature = this.getTranslatedSignature(entry.getSignature()); | 68 | Signature translatedSignature = this.getTranslatedSignature(entry.getSignature()); |
| 59 | return new ClassDefEntry(className, translatedSignature, getClassModifier(entry).transform(entry.getAccess())); | 69 | return new ClassDefEntry(className, translatedSignature, getClassModifier(entry).transform(entry.getAccess())); |
| 60 | } | 70 | } |
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 { | |||
| 77 | return this.name; | 77 | return this.name; |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | public boolean isArray() { | ||
| 81 | return this.name.lastIndexOf('[') >= 0; | ||
| 82 | } | ||
| 83 | |||
| 80 | public boolean isInnerClass() { | 84 | public boolean isInnerClass() { |
| 81 | return this.name.lastIndexOf('$') >= 0; | 85 | return this.name.lastIndexOf('$') >= 0; |
| 82 | } | 86 | } |