From 2fbcf8e5c4eec0aa4a4fc59c7cc8abac33b1429c Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 19 Jan 2015 22:22:57 -0500 Subject: solved tricky issue with incorrect translation of fields/methods referenced by a subclass instead of the declaring class --- src/cuchaz/enigma/bytecode/ClassTranslator.java | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/cuchaz/enigma/bytecode') diff --git a/src/cuchaz/enigma/bytecode/ClassTranslator.java b/src/cuchaz/enigma/bytecode/ClassTranslator.java index 735a8fa..6441830 100644 --- a/src/cuchaz/enigma/bytecode/ClassTranslator.java +++ b/src/cuchaz/enigma/bytecode/ClassTranslator.java @@ -38,6 +38,7 @@ public class ClassTranslator { } public void translate(CtClass c) { + // NOTE: the order of these translations is very important // translate all the field and method references in the code by editing the constant pool @@ -45,7 +46,9 @@ public class ClassTranslator { ConstPoolEditor editor = new ConstPoolEditor(constants); for (int i = 1; i < constants.getSize(); i++) { switch (constants.getTag(i)) { + case ConstPool.CONST_Fieldref: { + // translate the name FieldEntry entry = new FieldEntry( new ClassEntry(Descriptor.toJvmName(constants.getFieldrefClassName(i))), @@ -53,6 +56,11 @@ public class ClassTranslator { ); FieldEntry translatedEntry = m_translator.translateEntry(entry); + // TEMP + if (entry.toString().equals("none/bxq.m")) { + System.out.println("FIELD: " + entry + " -> " + translatedEntry); + } + // translate the type String type = constants.getFieldrefType(i); String translatedType = m_translator.translateSignature(type); @@ -65,6 +73,7 @@ public class ClassTranslator { case ConstPool.CONST_Methodref: case ConstPool.CONST_InterfaceMethodref: { + // translate the name and type BehaviorEntry entry = BehaviorEntryFactory.create( Descriptor.toJvmName(editor.getMemberrefClassname(i)), -- cgit v1.2.3