Я использую библиотеку ASM для инструментария некоторых классов. Я создаю свой собственный экземпляр MethodVisitor
и переопределяю некоторые из его методов, например visitCode()
, который вызывается, когда MethodVisitor
находится в начале метода. Здесь я вставляю свой собственный код, если метод не является получателем / установщиком. Но как я могу узнать, не является ли метод получателем / установщиком, если посетитель находится только в начале метода, а остальная часть метода еще не посещена?
Я мог бы посмотреть на имя метода, но это не окончательный результат. Чтобы проверить, является ли метод получателем или установщиком, я хотел бы проверить, является ли единственное, что делает метод, - это то, что он использует код операции GETFIELD или SETFIELD в текущем экземпляре и ничего больше.
ОБНОВЛЕНИЕ: Один из способов, который я нашел для работы, - это переопределить метод visitField()
на моем ClassVisitor
, а не только visitMethod()
, поэтому я сохраняю все имена полей класса и проверяю, есть ли у метода имя getX()
или setX()
, где X - имя поля. Этот подход будет работать, но он все еще ограничен, потому что что, если у пользователя есть такой метод с таким именем, но он не является сеттером / получателем.