diff options
| author | 2022-04-13 21:30:34 +0100 | |
|---|---|---|
| committer | 2022-04-13 21:30:34 +0100 | |
| commit | 9f4e8979cb6d4059819833d932d4ead284bea1db (patch) | |
| tree | 675199726a90badd098f867f6ca0ac4712488bc0 | |
| parent | Update ASM (diff) | |
| download | enigma-9f4e8979cb6d4059819833d932d4ead284bea1db.tar.gz enigma-9f4e8979cb6d4059819833d932d4ead284bea1db.tar.xz enigma-9f4e8979cb6d4059819833d932d4ead284bea1db.zip | |
Fix remapping of field Handle's
This fixes source export, tested with 1.18.2-pre1
| -rw-r--r-- | enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java | 14 |
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; | |||
| 4 | import cuchaz.enigma.translation.representation.MethodDescriptor; | 4 | import cuchaz.enigma.translation.representation.MethodDescriptor; |
| 5 | import cuchaz.enigma.translation.representation.TypeDescriptor; | 5 | import cuchaz.enigma.translation.representation.TypeDescriptor; |
| 6 | import cuchaz.enigma.translation.representation.entry.ClassEntry; | 6 | import cuchaz.enigma.translation.representation.entry.ClassEntry; |
| 7 | import cuchaz.enigma.translation.representation.entry.FieldEntry; | ||
| 7 | import cuchaz.enigma.translation.representation.entry.MethodEntry; | 8 | import cuchaz.enigma.translation.representation.entry.MethodEntry; |
| 8 | import org.objectweb.asm.Handle; | 9 | import org.objectweb.asm.Handle; |
| 10 | import org.objectweb.asm.Opcodes; | ||
| 9 | import org.objectweb.asm.Type; | 11 | import org.objectweb.asm.Type; |
| 10 | 12 | ||
| 11 | public class AsmObjectTranslator { | 13 | public 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); |