我目前正在尝试了解 ASM 库的工作原理。我决定尝试重命名给定类的所有方法,所以我写了一个迷你MethodRenamer
访问者:
class MethodRenamer extends ClassAdapter {
public MethodRenamer(ClassVisitor cv) {
super(cv);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
MethodVisitor methodVisitor = cv.visitMethod(access, name+"_new", desc, signature, exceptions);
return methodVisitor;
}
}
它实际上完成了我的全部工作,但我不明白为什么。我认为使用给定的代码,它只会为每个方法m
创建一个m_new
没有代码的方法。但与我的预期相反,它以某种方式填充m_new
了原始代码。
这怎么可能发生?我的想法是,只有我转发的内容cv
才会写入输出文件。我没有cv
在任何地方告诉原始m
代码的代码是什么..所以我想这里肯定还有其他事情发生?唯一其他可行的选择似乎是以methodVisitor
某种方式使用我的回报。