Создать метод с использованием ASM
Используя ASM, мне нужно изменить метод, затем мне нужно вставить в него два метода. Я получил модификацию в порядке, но как мне создать метод? Нужен ли мне отдельный MethodVisitor
, или я могу использовать тот же, но назвать что-то еще?
1 ответ
Решение
Вам нужно вызвать visitMethod для соответствующего ClassWriter, чтобы создать новый MethodVisitor для каждого метода.
MethodVisitor не может быть повторно использован. Если вы хотите вставить метод в существующий класс, вы обычно делаете это с помощью метода visitEnd класса ClassVisitor, считывающего исходный файл класса.
Схема такого преобразования будет выглядеть так:
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();
}
}