使用 ASM 创建方法
Create method using ASM
使用ASM,我需要修改一个方法,然后我需要在其中插入两个方法。我已经很好地修改了,但是如何创建一个方法?我需要一个单独的 MethodVisitor
,还是可以使用同一个,但调用其他名称?
您需要在相应的ClassWriter上调用visitMethod,为每个方法创建一个新的MethodVisitor。
无法重复使用 MethodVisitor。如果要将方法插入现有的 class,您通常会从读取原始 class 文件的 ClassVisitor 的 visitEnd 方法中执行此操作。
这种转换的示意图如下所示:
class TransformingClassVisitor extends ClassVisitor {
TransformingClassVisitor(ClassVisitor cv) { super(Opcodes.ASM5, cv); }
@Override
public MethodVisitor visitMethod(int opcode, String name, String owner, String desc, String signature, boolean iFace) {
MethodVisitor mv = super.visitMethod(opcodes, name, owner, desc, signature, iFace);
if (<isTransformedMethod>) {
return new TransformingMethodVisitor(mv);
}
return mv;
}
@Override
public void visitEnd() {
MethodVisitor m1 = super.visitMethod(<firstMethod>);
implement1(m1);
MethodVisitor m2 = super.visitMethod(<secondMethod>);
implement1(m2);
super.visitEnd();
}
}
使用ASM,我需要修改一个方法,然后我需要在其中插入两个方法。我已经很好地修改了,但是如何创建一个方法?我需要一个单独的 MethodVisitor
,还是可以使用同一个,但调用其他名称?
您需要在相应的ClassWriter上调用visitMethod,为每个方法创建一个新的MethodVisitor。
无法重复使用 MethodVisitor。如果要将方法插入现有的 class,您通常会从读取原始 class 文件的 ClassVisitor 的 visitEnd 方法中执行此操作。
这种转换的示意图如下所示:
class TransformingClassVisitor extends ClassVisitor {
TransformingClassVisitor(ClassVisitor cv) { super(Opcodes.ASM5, cv); }
@Override
public MethodVisitor visitMethod(int opcode, String name, String owner, String desc, String signature, boolean iFace) {
MethodVisitor mv = super.visitMethod(opcodes, name, owner, desc, signature, iFace);
if (<isTransformedMethod>) {
return new TransformingMethodVisitor(mv);
}
return mv;
}
@Override
public void visitEnd() {
MethodVisitor m1 = super.visitMethod(<firstMethod>);
implement1(m1);
MethodVisitor m2 = super.visitMethod(<secondMethod>);
implement1(m2);
super.visitEnd();
}
}