Object Web, посетите классы, которые передаются как значение класса параметра

Я хочу посетить классы, которые передаются в методе

Я попробовал 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


person Mcm    schedule 08.07.2019    source источник
comment
Это не тривиально, так как этот оператор не скомпилирован в одну инструкцию. Есть инструкция LDC, помещающая значение для C.class в стек операндов, и инструкция invokevirtual, нацеленная на myMethod, которая извлекает получателя и аргументы из стека. Вы должны отслеживать влияние инструкций на стек, чтобы предсказать, какое фактическое значение будет передано методу. Вы можете использовать этот ответ в качестве отправной точки для написания кода, который проверяет аргументы инструкции вызова вместо инструкции загрузки.   -  person Holger    schedule 09.07.2019
comment
Спасибо за ваше предложение. Наконец мне удалось получить это, используя visitLdcInsn в реализации MethodVisitor, возвращаемой, когда посетитель моего класса посещает myMethod.   -  person Mcm    schedule 10.07.2019