Чтение байт-кода из AnnotationProcessor
Возможный дубликат:
Подключение к компиляторам Java
Редактировать - это похоже на вставку в компиляторы Java
Я хотел бы реализовать AnnotationProcessor
для использования с apt
инструмент, который будет вызываться после компиляции класса в байт-код, который может читать и изменять байт-код.
Причина для этого заключается в том, что я хочу перевести аннотированные методы на другой язык и заменить java-методы заглушками, которые вызывают переведенные версии.
Тем не менее AnnotationProcessorEnvironment
Интерфейс предоставляет только методы для генерации новых классов, а не для чтения файла класса, который был сгенерирован в предыдущем раунде.
API инструментария делает что-то похожее на то, что я хочу, но только во время выполнения. Я ищу способ сделать это во время компиляции.
1 ответ
- Связанный: Подключение к компиляторам Java
Я посмотрел, когда я хотел сделать некоторые манипуляции в компиляторе, но в итоге использовал постпроцессор.
Вы можете манипулировать абстрактным синтаксическим деревом (AST), используя APT, но только с помощью специфичных для компилятора хаков. Если вам нужен пример того, как это делается, Project Lombok делает это с Sun javac
и Eclipse-компиляторы. В настоящее время нет лучшего способа.