From 93c771a890f0f73b8caebafa4667e0535703cfa2 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 19 May 2018 19:00:56 +0200 Subject: Fix inner class mapping --- .../translators/TranslationClassVisitor.java | 25 ++++++++++------------ .../enigma/mapping/DirectionalTranslator.java | 5 +---- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java index 5fdfaf11..dcc221e3 100644 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java +++ b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java @@ -13,7 +13,9 @@ package cuchaz.enigma.bytecode.translators; import cuchaz.enigma.analysis.JarIndex; import cuchaz.enigma.bytecode.AccessFlags; -import cuchaz.enigma.mapping.*; +import cuchaz.enigma.mapping.MethodDescriptor; +import cuchaz.enigma.mapping.Translator; +import cuchaz.enigma.mapping.TypeDescriptor; import cuchaz.enigma.mapping.entry.*; import org.objectweb.asm.*; @@ -101,18 +103,13 @@ public class TranslationClassVisitor extends ClassVisitor { @Override public void visitInnerClass(String name, String outerName, String innerName, int access) { - // If this is not an anonymous class - if (innerName != null && outerName != null) { - ClassDefEntry translatedEntry = translator.getTranslatedClassDef(new ClassDefEntry(innerName, new AccessFlags(access))); - ClassEntry outerEntry = translator.getTranslatedClass(entryPool.getClass(outerName)); - ClassEntry innerEntry = translator.getTranslatedClass(entryPool.getClass(innerName)); - super.visitInnerClass(translatedEntry.getName(), outerEntry.getName(), innerEntry.getName(), translatedEntry.getAccess().getFlags()); - } else { - int separatorIndex = name.lastIndexOf("$"); - String parentName = name.substring(0, separatorIndex); - String childName = name.substring(separatorIndex + 1); - ClassEntry outerEntry = translator.getTranslatedClass(entryPool.getClass(parentName)); - super.visitInnerClass(outerEntry.getName() + "$" + childName, outerName, innerName, access); - } + ClassDefEntry translatedEntry = translator.getTranslatedClassDef(new ClassDefEntry(name, new AccessFlags(access))); + String translatedName = translatedEntry.getName(); + int separatorIndex = translatedName.lastIndexOf("$"); + String parentName = translatedName.substring(0, separatorIndex); + String childName = translatedName.substring(separatorIndex + 1); + + ClassEntry outerEntry = translator.getTranslatedClass(entryPool.getClass(parentName)); + super.visitInnerClass(translatedName, outerEntry.getName(), childName, translatedEntry.getAccess().getFlags()); } } diff --git a/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java b/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java index 196bbd69..7af1a523 100644 --- a/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java +++ b/src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java @@ -194,13 +194,10 @@ public class DirectionalTranslator implements Translator { if (translatedArgumentName == null) { translatedArgumentName = inheritLocalVariableName(entry); } - if (translatedArgumentName == null) { - return entry; - } // TODO: Translating arguments calls method translation.. Can we refactor the code in such a way that we don't need this? MethodDefEntry translatedOwner = getTranslatedMethodDef(entry.getOwnerEntry()); TypeDescriptor translatedTypeDesc = getTranslatedTypeDesc(entry.getDesc()); - return new LocalVariableDefEntry(translatedOwner, entry.getIndex(), translatedArgumentName, translatedTypeDesc); + return new LocalVariableDefEntry(translatedOwner, entry.getIndex(), translatedArgumentName != null ? translatedArgumentName : entry.getName(), translatedTypeDesc); } // TODO: support not identical behavior (specific to constructor) -- cgit v1.2.3