Я хочу посетить классы, которые передаются в методе
Я попробовал visitMethodInsn
в моем MethodVisitor
, но я получаю сигнатуру метода, а не класс, переданный при его выполнении.
общедоступный статический класс C { }
public static class B {
void myMethod(Class clz) {
}
}
public static class A {
static B getB() {
return new B();
}
}
public static class Foo {
public Foo() {
A.getB().myMethod(C.class);
}
}
Итак, основываясь на приведенном выше коде, при посещении класса Foo
я хочу, чтобы было замечено, что C.class
передается myMethod
в B.class
LDC
, помещающая значение дляC.class
в стек операндов, и инструкцияinvokevirtual
, нацеленная наmyMethod
, которая извлекает получателя и аргументы из стека. Вы должны отслеживать влияние инструкций на стек, чтобы предсказать, какое фактическое значение будет передано методу. Вы можете использовать этот ответ в качестве отправной точки для написания кода, который проверяет аргументы инструкции вызова вместо инструкции загрузки. - person Holger   schedule 09.07.2019visitLdcInsn
в реализацииMethodVisitor
, возвращаемой, когда посетитель моего класса посещаетmyMethod
. - person Mcm   schedule 10.07.2019