From c133e05b786ff5357931842581571c046f958c74 Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 16 Mar 2015 12:29:17 -0400 Subject: fix a zillion issues with inner classes --- src/cuchaz/enigma/bytecode/ClassRenamer.java | 2 +- src/cuchaz/enigma/bytecode/ClassTranslator.java | 17 ++++++++++------- src/cuchaz/enigma/bytecode/InnerClassWriter.java | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) (limited to 'src/cuchaz/enigma/bytecode') diff --git a/src/cuchaz/enigma/bytecode/ClassRenamer.java b/src/cuchaz/enigma/bytecode/ClassRenamer.java index a5fea92..e9cdea3 100644 --- a/src/cuchaz/enigma/bytecode/ClassRenamer.java +++ b/src/cuchaz/enigma/bytecode/ClassRenamer.java @@ -43,7 +43,7 @@ public class ClassRenamer { for (int i = 0; i < attr.tableLength(); i++) { ClassEntry classEntry = new ClassEntry(Descriptor.toJvmName(attr.innerClass(i))); if (attr.innerNameIndex(i) != 0) { - attr.setInnerNameIndex(i, constants.addUtf8Info(classEntry.getInnerClassName())); + attr.setInnerNameIndex(i, constants.addUtf8Info(classEntry.getInnermostClassName())); } /* DEBUG diff --git a/src/cuchaz/enigma/bytecode/ClassTranslator.java b/src/cuchaz/enigma/bytecode/ClassTranslator.java index 4167731..94ab2c4 100644 --- a/src/cuchaz/enigma/bytecode/ClassTranslator.java +++ b/src/cuchaz/enigma/bytecode/ClassTranslator.java @@ -26,7 +26,6 @@ import cuchaz.enigma.mapping.BehaviorEntry; import cuchaz.enigma.mapping.ClassEntry; import cuchaz.enigma.mapping.EntryFactory; import cuchaz.enigma.mapping.FieldEntry; -import cuchaz.enigma.mapping.MethodEntry; import cuchaz.enigma.mapping.Signature; import cuchaz.enigma.mapping.Translator; import cuchaz.enigma.mapping.Type; @@ -101,26 +100,30 @@ public class ClassTranslator { } // translate the type - Type translatedType = m_translator.translateType(new Type(field.getFieldInfo().getDescriptor())); + Type translatedType = m_translator.translateType(entry.getType()); field.getFieldInfo().setDescriptor(translatedType.toString()); } // translate all the methods and constructors for (CtBehavior behavior : c.getDeclaredBehaviors()) { + + BehaviorEntry entry = EntryFactory.getBehaviorEntry(behavior); + if (behavior instanceof CtMethod) { CtMethod method = (CtMethod)behavior; // translate the name - MethodEntry entry = EntryFactory.getMethodEntry(method); String translatedName = m_translator.translate(entry); if (translatedName != null) { method.setName(translatedName); } } - // translate the type - Signature translatedSignature = m_translator.translateSignature(new Signature(behavior.getMethodInfo().getDescriptor())); - behavior.getMethodInfo().setDescriptor(translatedSignature.toString()); + if (entry.getSignature() != null) { + // translate the type + Signature translatedSignature = m_translator.translateSignature(entry.getSignature()); + behavior.getMethodInfo().setDescriptor(translatedSignature.toString()); + } } // translate all the class names referenced in the code @@ -137,7 +140,7 @@ public class ClassTranslator { // translate the source file attribute too ClassEntry deobfClassEntry = map.get(classEntry); if (deobfClassEntry != null) { - String sourceFile = Descriptor.toJvmName(deobfClassEntry.getOuterClassName()) + ".java"; + String sourceFile = Descriptor.toJvmName(deobfClassEntry.getOutermostClassName()) + ".java"; c.getClassFile().addAttribute(new SourceFileAttribute(constants, sourceFile)); } } diff --git a/src/cuchaz/enigma/bytecode/InnerClassWriter.java b/src/cuchaz/enigma/bytecode/InnerClassWriter.java index dd21a78..976028d 100644 --- a/src/cuchaz/enigma/bytecode/InnerClassWriter.java +++ b/src/cuchaz/enigma/bytecode/InnerClassWriter.java @@ -93,7 +93,7 @@ public class InnerClassWriter { // get the new inner class name ClassEntry obfInnerClassEntry = obfClassEntry.buildClassEntry(obfClassChain); - ClassEntry obfOuterClassEntry = obfInnerClassEntry.getOuterClassEntry(); + ClassEntry obfOuterClassEntry = obfInnerClassEntry.getOutermostClassEntry(); // here's what the JVM spec says about the InnerClasses attribute // append(inner, parent, 0 if anonymous else simple name, flags); @@ -105,7 +105,7 @@ public class InnerClassWriter { int innerClassNameIndex = 0; int accessFlags = 0; if (!m_index.isAnonymousClass(obfClassEntry)) { - innerClassNameIndex = constPool.addUtf8Info(obfInnerClassEntry.getInnerClassName()); + innerClassNameIndex = constPool.addUtf8Info(obfInnerClassEntry.getInnermostClassName()); } attr.append(innerClassIndex, parentClassIndex, innerClassNameIndex, accessFlags); -- cgit v1.2.3