summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorGravatar gegy10002018-05-19 19:00:56 +0200
committerGravatar gegy10002018-05-19 19:00:56 +0200
commit93c771a890f0f73b8caebafa4667e0535703cfa2 (patch)
treecf6b3abcd5019f13151da22bc2910a6609eb75b2 /src/main
parentAnnotation + inner class translation (diff)
downloadenigma-93c771a890f0f73b8caebafa4667e0535703cfa2.tar.gz
enigma-93c771a890f0f73b8caebafa4667e0535703cfa2.tar.xz
enigma-93c771a890f0f73b8caebafa4667e0535703cfa2.zip
Fix inner class mapping
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java25
-rw-r--r--src/main/java/cuchaz/enigma/mapping/DirectionalTranslator.java5
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;
13 13
14import cuchaz.enigma.analysis.JarIndex; 14import cuchaz.enigma.analysis.JarIndex;
15import cuchaz.enigma.bytecode.AccessFlags; 15import cuchaz.enigma.bytecode.AccessFlags;
16import cuchaz.enigma.mapping.*; 16import cuchaz.enigma.mapping.MethodDescriptor;
17import cuchaz.enigma.mapping.Translator;
18import cuchaz.enigma.mapping.TypeDescriptor;
17import cuchaz.enigma.mapping.entry.*; 19import cuchaz.enigma.mapping.entry.*;
18import org.objectweb.asm.*; 20import org.objectweb.asm.*;
19 21
@@ -101,18 +103,13 @@ public class TranslationClassVisitor extends ClassVisitor {
101 103
102 @Override 104 @Override
103 public void visitInnerClass(String name, String outerName, String innerName, int access) { 105 public void visitInnerClass(String name, String outerName, String innerName, int access) {
104 // If this is not an anonymous class 106 ClassDefEntry translatedEntry = translator.getTranslatedClassDef(new ClassDefEntry(name, new AccessFlags(access)));
105 if (innerName != null && outerName != null) { 107 String translatedName = translatedEntry.getName();
106 ClassDefEntry translatedEntry = translator.getTranslatedClassDef(new ClassDefEntry(innerName, new AccessFlags(access))); 108 int separatorIndex = translatedName.lastIndexOf("$");
107 ClassEntry outerEntry = translator.getTranslatedClass(entryPool.getClass(outerName)); 109 String parentName = translatedName.substring(0, separatorIndex);
108 ClassEntry innerEntry = translator.getTranslatedClass(entryPool.getClass(innerName)); 110 String childName = translatedName.substring(separatorIndex + 1);
109 super.visitInnerClass(translatedEntry.getName(), outerEntry.getName(), innerEntry.getName(), translatedEntry.getAccess().getFlags()); 111
110 } else { 112 ClassEntry outerEntry = translator.getTranslatedClass(entryPool.getClass(parentName));
111 int separatorIndex = name.lastIndexOf("$"); 113 super.visitInnerClass(translatedName, outerEntry.getName(), childName, translatedEntry.getAccess().getFlags());
112 String parentName = name.substring(0, separatorIndex);
113 String childName = name.substring(separatorIndex + 1);
114 ClassEntry outerEntry = translator.getTranslatedClass(entryPool.getClass(parentName));
115 super.visitInnerClass(outerEntry.getName() + "$" + childName, outerName, innerName, access);
116 }
117 } 114 }
118} 115}
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 {
194 if (translatedArgumentName == null) { 194 if (translatedArgumentName == null) {
195 translatedArgumentName = inheritLocalVariableName(entry); 195 translatedArgumentName = inheritLocalVariableName(entry);
196 } 196 }
197 if (translatedArgumentName == null) {
198 return entry;
199 }
200 // TODO: Translating arguments calls method translation.. Can we refactor the code in such a way that we don't need this? 197 // TODO: Translating arguments calls method translation.. Can we refactor the code in such a way that we don't need this?
201 MethodDefEntry translatedOwner = getTranslatedMethodDef(entry.getOwnerEntry()); 198 MethodDefEntry translatedOwner = getTranslatedMethodDef(entry.getOwnerEntry());
202 TypeDescriptor translatedTypeDesc = getTranslatedTypeDesc(entry.getDesc()); 199 TypeDescriptor translatedTypeDesc = getTranslatedTypeDesc(entry.getDesc());
203 return new LocalVariableDefEntry(translatedOwner, entry.getIndex(), translatedArgumentName, translatedTypeDesc); 200 return new LocalVariableDefEntry(translatedOwner, entry.getIndex(), translatedArgumentName != null ? translatedArgumentName : entry.getName(), translatedTypeDesc);
204 } 201 }
205 202
206 // TODO: support not identical behavior (specific to constructor) 203 // TODO: support not identical behavior (specific to constructor)