summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java
index 1a2b47fb..341cfce4 100644
--- a/enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java
@@ -4,8 +4,10 @@ import cuchaz.enigma.translation.Translator;
4import cuchaz.enigma.translation.representation.MethodDescriptor; 4import cuchaz.enigma.translation.representation.MethodDescriptor;
5import cuchaz.enigma.translation.representation.TypeDescriptor; 5import cuchaz.enigma.translation.representation.TypeDescriptor;
6import cuchaz.enigma.translation.representation.entry.ClassEntry; 6import cuchaz.enigma.translation.representation.entry.ClassEntry;
7import cuchaz.enigma.translation.representation.entry.FieldEntry;
7import cuchaz.enigma.translation.representation.entry.MethodEntry; 8import cuchaz.enigma.translation.representation.entry.MethodEntry;
8import org.objectweb.asm.Handle; 9import org.objectweb.asm.Handle;
10import org.objectweb.asm.Opcodes;
9import org.objectweb.asm.Type; 11import org.objectweb.asm.Type;
10 12
11public class AsmObjectTranslator { 13public class AsmObjectTranslator {
@@ -29,12 +31,24 @@ public class AsmObjectTranslator {
29 } 31 }
30 32
31 public static Handle translateHandle(Translator translator, Handle handle) { 33 public static Handle translateHandle(Translator translator, Handle handle) {
34 final boolean isFieldHandle = handle.getTag() <= Opcodes.H_PUTSTATIC;
35 return isFieldHandle ? translateFieldHandle(translator, handle) : translateMethodHandle(translator, handle);
36 }
37
38 private static Handle translateMethodHandle(Translator translator, Handle handle) {
32 MethodEntry entry = new MethodEntry(new ClassEntry(handle.getOwner()), handle.getName(), new MethodDescriptor(handle.getDesc())); 39 MethodEntry entry = new MethodEntry(new ClassEntry(handle.getOwner()), handle.getName(), new MethodDescriptor(handle.getDesc()));
33 MethodEntry translatedMethod = translator.translate(entry); 40 MethodEntry translatedMethod = translator.translate(entry);
34 ClassEntry ownerClass = translatedMethod.getParent(); 41 ClassEntry ownerClass = translatedMethod.getParent();
35 return new Handle(handle.getTag(), ownerClass.getFullName(), translatedMethod.getName(), translatedMethod.getDesc().toString(), handle.isInterface()); 42 return new Handle(handle.getTag(), ownerClass.getFullName(), translatedMethod.getName(), translatedMethod.getDesc().toString(), handle.isInterface());
36 } 43 }
37 44
45 private static Handle translateFieldHandle(Translator translator, Handle handle) {
46 FieldEntry entry = new FieldEntry(new ClassEntry(handle.getOwner()), handle.getName(), new TypeDescriptor(handle.getDesc()));
47 FieldEntry translatedMethod = translator.translate(entry);
48 ClassEntry ownerClass = translatedMethod.getParent();
49 return new Handle(handle.getTag(), ownerClass.getFullName(), translatedMethod.getName(), translatedMethod.getDesc().toString(), handle.isInterface());
50 }
51
38 public static Object translateValue(Translator translator, Object value) { 52 public static Object translateValue(Translator translator, Object value) {
39 if (value instanceof Type) { 53 if (value instanceof Type) {
40 return translateType(translator, (Type) value); 54 return translateType(translator, (Type) value);