В настоящее время я пытаюсь понять, как работает библиотека 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
.