From 86f6886d8c8dd286164557b458049ea5beb093cc Mon Sep 17 00:00:00 2001 From: Lucwousin Date: Sun, 19 Jul 2020 03:21:06 +0200 Subject: [PATCH] Finishing touches to annotations --- .../java/net/runelite/asm/Annotation.java | 22 ++++++++++++++ .../runelite/asm/attributes/Annotated.java | 2 +- .../net/runelite/deob/DeobAnnotations.java | 30 ++++++++++--------- 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/deobfuscator/src/main/java/net/runelite/asm/Annotation.java b/deobfuscator/src/main/java/net/runelite/asm/Annotation.java index efcb4203c1..6c9e4ff23b 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/Annotation.java +++ b/deobfuscator/src/main/java/net/runelite/asm/Annotation.java @@ -26,6 +26,7 @@ package net.runelite.asm; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.TreeMap; import org.jetbrains.annotations.NotNull; import org.objectweb.asm.AnnotationVisitor; @@ -59,6 +60,12 @@ public class Annotation extends AnnotationVisitor implements Comparable e : data.entrySet()) + str.append(e.getKey()).append('=').append(e.getValue().toString()); + str.append(')'); + return str.toString(); + } } diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotated.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotated.java index edffbfd459..bb43361049 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotated.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotated.java @@ -38,7 +38,7 @@ public interface Annotated default void addAnnotation(Type type, Object val) { - addAnnotation(type, val); + getAnnotations().put(type, new Annotation(type, val)); } default void addAnnotation(Type type, String key, Object val) diff --git a/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java b/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java index 77e8945f73..f2ee7438c4 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java +++ b/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java @@ -41,26 +41,25 @@ public class DeobAnnotations public static final Type IMPLEMENTS = new Type("Lnet/runelite/mapping/Implements;"); public static final Type OBFUSCATED_GETTER = new Type("Lnet/runelite/mapping/ObfuscatedGetter;"); public static final Type OBFUSCATED_SIGNATURE = new Type("Lnet/runelite/mapping/ObfuscatedSignature;"); - public static final Type HOOK = new Type("Lnet/runelite/mapping/Hook;"); public static Signature getObfuscatedSignature(Method m) { - String str = getStringValue(m, OBFUSCATED_SIGNATURE); + Object val = get(m, OBFUSCATED_SIGNATURE, "descriptor"); - if (str == null) + if (val == null) return null; - return new Signature(str); + return new Signature((String) val); } public static Type getObfuscatedType(Field f) { - String str = getStringValue(f, OBFUSCATED_SIGNATURE); + Object val = get(f, OBFUSCATED_SIGNATURE, "descriptor"); - if (str == null) + if (val == null) return null; - return new Type(str); + return new Type((String) val); } @Nullable @@ -88,14 +87,10 @@ public class DeobAnnotations if (a == null) return null; - Object v = a.getValue(); - if (v == null) - return null; - if (field.getType().equals(Type.INT)) - return (Integer) v; - else if (field.getType().equals(Type.LONG)) - return (Long) v; // very long v + return (Integer) a.get("intValue"); + if (field.getType().equals(Type.LONG)) + return (Long) a.get("longValue"); // very long v throw new IllegalArgumentException("Field with getter but not a long or an int?"); } @@ -106,6 +101,13 @@ public class DeobAnnotations return a == null ? null : (String) a.get("garbageValue"); } + @Nullable + public static Object get(Annotated an, Type type, String name) + { + final var a = an.findAnnotation(type); + return a == null ? null : a.get(name); + } + @Nullable public static String getStringValue(Annotated an, Type type) {