Add debug option to ReflectionRemapper

This commit is contained in:
Agaricus 2013-02-05 21:53:54 -08:00
parent 3be71eee94
commit 0bc766f8e7

View File

@ -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);
}
}
}