From 0bc766f8e7ac0a57dfc5d9d8f04e9adce83b0cfe Mon Sep 17 00:00:00 2001 From: Agaricus Date: Tue, 5 Feb 2013 21:53:54 -0800 Subject: [PATCH] Add debug option to ReflectionRemapper --- .../specialsource/ReflectionRemapper.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/md_5/specialsource/ReflectionRemapper.java b/src/main/java/net/md_5/specialsource/ReflectionRemapper.java index 119e5e6..b540bc4 100644 --- a/src/main/java/net/md_5/specialsource/ReflectionRemapper.java +++ b/src/main/java/net/md_5/specialsource/ReflectionRemapper.java @@ -13,6 +13,7 @@ import java.util.List; public class ReflectionRemapper { private JarMapping jarMapping; + public boolean debug = false; public ReflectionRemapper(JarMapping jarMapping) { this.jarMapping = jarMapping; @@ -45,45 +46,47 @@ public class ReflectionRemapper { private void remapGetDeclaredField(AbstractInsnNode insn) { MethodInsnNode mi = (MethodInsnNode) insn; - System.out.println("methodnode "+mi.owner+" "+mi.name+" "+mi.desc); if (!mi.owner.equals("java/lang/Class") || !mi.name.equals("getDeclaredField") || !mi.desc.equals("(Ljava/lang/String;)Ljava/lang/reflect/Field;")) { return; } - System.out.println("found getDeclaredField!"); + log("ReflectionRemapper found getDeclaredField!"); if (insn.getPrevious() == null || insn.getPrevious().getOpcode() != Opcodes.LDC) { - System.out.println("- not constant field; skipping"); + log("- not constant field; skipping"); return; } LdcInsnNode ldcField = (LdcInsnNode) insn.getPrevious(); - System.out.println("field constant = "+ldcField.cst); if (!(ldcField.cst instanceof String)) { - System.out.println("- not field string; skipping"); + log("- not field string; skipping: " + ldcField.cst); return; } String fieldName = (String) ldcField.cst; if (ldcField.getPrevious() == null || ldcField.getPrevious().getOpcode() != Opcodes.LDC) { - System.out.println("- not constant class; skipping"); + log("- not constant class; skipping: field=" + ldcField.cst); return; } LdcInsnNode ldcClass = (LdcInsnNode) ldcField.getPrevious(); if (!(ldcClass.cst instanceof Type)) { - System.out.println("- not class type; skipping"); + log("- not class type; skipping: field=" + ldcClass.cst + ", class=" + ldcClass.cst); return; } - System.out.println("class = "+ldcClass.cst); String className = ((Type) ldcClass.cst).getInternalName(); - System.out.println("Remapping "+className+"/"+fieldName); - String newName = jarMapping.tryClimb(jarMapping.fields, NodeType.FIELD, className, fieldName); + log("Remapping "+className+"/"+fieldName + " -> " + newName); + if (newName != null) { // Change the string literal to the correct name ldcField.cst = newName; //ldcClass.cst = className; // not remapped here - taken care of by JarRemapper - System.out.println(" -> to "+newName); + } + } + + private void log(String message) { + if (debug) { + System.out.println("[ReflectionRemapper] " + message); } } }