好吧,好吧。我正在尝试在ASM 4.0中的ClassNode中重命名方法。
这是我的重命名课程:
public class RenameVisitor extends ClassVisitor {
private String newName,oldName;
public RenameVisitor(String newName,String oldName){
super(Opcodes.ASM4);
this.newName = newName;
this.oldName = oldName;
}
@Override
public MethodVisitor visitMethod(int access, String name,
String desc, String signature, String[] exceptions) {
if(name.contains(oldName)){
System.out.println(newName);
return cv.visitMethod(access,newName,desc,signature,exceptions);
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
现在,我如何使用它来重命名类节点中的方法? 我试过了几件事:
ClassVisitor rv = new RenameVisitor(mn.name,"_"+mn.name);//mn is the method node being tested
ClassReader cr = new ClassReader(node.name);
cr.accept(rv,0);
它总是抛出一个无法找到类的错误。我需要做什么才能读取ClassNode ..?
答案 0 :(得分:0)
ClassReader JavaDoc将是一个很好的起点。您没有提供字节码来自的任何细节,但如果您想使用具有类名的ClassReader构造函数,则该类应存在于类路径中(因此无法找到“类”错误)。