Add debug option to ReflectionRemapper
This commit is contained in:
parent
3be71eee94
commit
0bc766f8e7
@ -13,6 +13,7 @@ import java.util.List;
|
|||||||
public class ReflectionRemapper {
|
public class ReflectionRemapper {
|
||||||
|
|
||||||
private JarMapping jarMapping;
|
private JarMapping jarMapping;
|
||||||
|
public boolean debug = false;
|
||||||
|
|
||||||
public ReflectionRemapper(JarMapping jarMapping) {
|
public ReflectionRemapper(JarMapping jarMapping) {
|
||||||
this.jarMapping = jarMapping;
|
this.jarMapping = jarMapping;
|
||||||
@ -45,45 +46,47 @@ public class ReflectionRemapper {
|
|||||||
private void remapGetDeclaredField(AbstractInsnNode insn) {
|
private void remapGetDeclaredField(AbstractInsnNode insn) {
|
||||||
MethodInsnNode mi = (MethodInsnNode) 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;")) {
|
if (!mi.owner.equals("java/lang/Class") || !mi.name.equals("getDeclaredField") || !mi.desc.equals("(Ljava/lang/String;)Ljava/lang/reflect/Field;")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("found getDeclaredField!");
|
log("ReflectionRemapper found getDeclaredField!");
|
||||||
|
|
||||||
if (insn.getPrevious() == null || insn.getPrevious().getOpcode() != Opcodes.LDC) {
|
if (insn.getPrevious() == null || insn.getPrevious().getOpcode() != Opcodes.LDC) {
|
||||||
System.out.println("- not constant field; skipping");
|
log("- not constant field; skipping");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LdcInsnNode ldcField = (LdcInsnNode) insn.getPrevious();
|
LdcInsnNode ldcField = (LdcInsnNode) insn.getPrevious();
|
||||||
System.out.println("field constant = "+ldcField.cst);
|
|
||||||
if (!(ldcField.cst instanceof String)) {
|
if (!(ldcField.cst instanceof String)) {
|
||||||
System.out.println("- not field string; skipping");
|
log("- not field string; skipping: " + ldcField.cst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String fieldName = (String) ldcField.cst;
|
String fieldName = (String) ldcField.cst;
|
||||||
|
|
||||||
if (ldcField.getPrevious() == null || ldcField.getPrevious().getOpcode() != Opcodes.LDC) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
LdcInsnNode ldcClass = (LdcInsnNode) ldcField.getPrevious();
|
LdcInsnNode ldcClass = (LdcInsnNode) ldcField.getPrevious();
|
||||||
if (!(ldcClass.cst instanceof Type)) {
|
if (!(ldcClass.cst instanceof Type)) {
|
||||||
System.out.println("- not class type; skipping");
|
log("- not class type; skipping: field=" + ldcClass.cst + ", class=" + ldcClass.cst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
System.out.println("class = "+ldcClass.cst);
|
|
||||||
String className = ((Type) ldcClass.cst).getInternalName();
|
String className = ((Type) ldcClass.cst).getInternalName();
|
||||||
|
|
||||||
System.out.println("Remapping "+className+"/"+fieldName);
|
|
||||||
|
|
||||||
String newName = jarMapping.tryClimb(jarMapping.fields, NodeType.FIELD, className, fieldName);
|
String newName = jarMapping.tryClimb(jarMapping.fields, NodeType.FIELD, className, fieldName);
|
||||||
|
log("Remapping "+className+"/"+fieldName + " -> " + newName);
|
||||||
|
|
||||||
if (newName != null) {
|
if (newName != null) {
|
||||||
// Change the string literal to the correct name
|
// Change the string literal to the correct name
|
||||||
ldcField.cst = newName;
|
ldcField.cst = newName;
|
||||||
//ldcClass.cst = className; // not remapped here - taken care of by JarRemapper
|
//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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user