diff --git a/jode/jode/obfuscator/MethodIdentifier.java b/jode/jode/obfuscator/MethodIdentifier.java
index fda1f9d..547843f 100644
--- a/jode/jode/obfuscator/MethodIdentifier.java
+++ b/jode/jode/obfuscator/MethodIdentifier.java
@@ -34,6 +34,8 @@ import java.util.Hashtable;
public class MethodIdentifier extends Identifier implements Opcodes {
ClassIdentifier clazz;
MethodInfo info;
+ String name;
+ String type;
///#ifdef JDK12
/// /**
@@ -69,6 +71,8 @@ public class MethodIdentifier extends Identifier implements Opcodes {
public MethodIdentifier(ClassIdentifier clazz, MethodInfo info) {
super(info.getName());
+ this.name = info.getName();
+ this.type = info.getType();
this.clazz = clazz;
this.info = info;
}
@@ -130,11 +134,11 @@ public class MethodIdentifier extends Identifier implements Opcodes {
}
public String getName() {
- return info.getName();
+ return name;
}
public String getType() {
- return info.getType();
+ return type;
}
public boolean conflicting(String newAlias, boolean strong) {
@@ -165,9 +169,14 @@ public class MethodIdentifier extends Identifier implements Opcodes {
*
renaming field, method and class references
*
*/
+ boolean wasTransformed = false;
public void doTransformations() {
+ if (wasTransformed)
+ throw new jode.AssertError
+ ("doTransformation called on transformed method");
+ wasTransformed = true;
info.setName(getAlias());
- info.setType(clazz.bundle.getTypeAlias(info.getType()));
+ info.setType(clazz.bundle.getTypeAlias(type));
if (getCodeAnalyzer() != null) {
BytecodeInfo strippedBytecode = getCodeAnalyzer().stripCode();
// strippedBytecode.dumpCode(GlobalOptions.err);
@@ -196,44 +205,25 @@ public class MethodIdentifier extends Identifier implements Opcodes {
case opc_invokestatic:
case opc_invokeinterface:
case opc_invokevirtual: {
- Reference ref = (Reference) instr.objData;
- MethodIdentifier mi = (MethodIdentifier)
- clazz.bundle.getIdentifier(ref);
- String newType = clazz.bundle.getTypeAlias(ref.getType());
- if (mi != null)
- instr.objData = new Reference
- ("L"+mi.clazz.getFullAlias().replace('.','/')+';',
- mi.getAlias(), newType);
- else
- instr.objData = new Reference
- (ref.getClazz(), ref.getName(), newType);
+ instr.objData = clazz.bundle.getReferenceAlias
+ ((Reference) instr.objData);
break;
+
}
case opc_putstatic:
case opc_putfield:
case opc_getstatic:
case opc_getfield: {
- Reference ref = (Reference) instr.objData;
- String newType = clazz.bundle.getTypeAlias(ref.getType());
- FieldIdentifier fi = (FieldIdentifier)
- clazz.bundle.getIdentifier(ref);
- if (fi != null) {
- instr.objData = new Reference
- ("L"+fi.clazz.getFullAlias().replace('.','/')+';',
- fi.getAlias(), newType);
- } else
- instr.objData = new Reference
- (ref.getClazz(), ref.getName(), newType);
-
+ instr.objData = clazz.bundle.getReferenceAlias
+ ((Reference) instr.objData);
break;
}
case opc_new:
case opc_checkcast:
case opc_instanceof:
case opc_multianewarray: {
- String clName = (String) instr.objData;
- clName = clazz.bundle.getTypeAlias(clName);
- instr.objData = clName;
+ instr.objData = clazz.bundle.getTypeAlias
+ ((String) instr.objData);
break;
}
}