Я создал аннотацию, применил ее к DTO и написал аннотационный процессор стиля Java 1.6. Я могу видеть, как заставить annotationProcessor записывать новый исходный файл, чего я не хочу делать, я не вижу или не знаю, как его изменить существующий класс (в идеале просто изменить байтовый код). Модификация фактически довольно тривиальна, и все, что я хочу, чтобы процессор выполнял, - это вставить новый getter и setter, где имя происходит от значения обрабатываемой аннотации.Как использовать обработку аннотации Java 1.6 для выполнения компиляции во времени?
Мой обработчик комментариев выглядит следующим образом;
@SupportedSourceVersion(SourceVersion.RELEASE_6)
@SupportedAnnotationTypes({ "com.kn.salog.annotation.AggregateField" })
public class SalogDTOAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
//do some stuff
}
}
Это, безусловно, решение, но я уверен, что это не единственное решение. То, что я хочу сделать, может быть сделано несколькими существующими фреймворками/инструментами, например javassist. Я пытался избежать введения зависимости, которая, как представляется, не является строго необходимой, но введение обработки аннотаций в JDK1.6 выглядело так же, как и функции javassist. Возможно, я был неправ, хотя мне все еще нужно Инструмент сторонней стороны для выполнения ткачества во время компиляции. – Steve