Как игнорировать инструментальные геттеры / сеттеры при использовании ASM? - PullRequest
2 голосов
/ 02 августа 2020

Я использую библиотеку ASM для инструментария некоторых классов. Я создаю свой собственный экземпляр MethodVisitor и переопределяю некоторые из его методов, например visitCode(), который вызывается, когда MethodVisitor находится в начале метода. Здесь я вставляю свой собственный код, если метод не является получателем / установщиком. Но как я могу узнать, не является ли метод получателем / установщиком, если посетитель находится только в начале метода, а остальная часть метода еще не посещена?

Я мог бы посмотреть на имя метода, но это не окончательный результат. Чтобы проверить, является ли метод получателем или установщиком, я хотел бы проверить, является ли единственное, что делает метод, - это то, что он использует код операции GETFIELD или SETFIELD в текущем экземпляре и ничего больше.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...