Ho creato un'annotazione, l'ho applicata a un DTO e scritto un annotationProcessor in stile Java 1.6. Posso vedere come fare in modo che annotationProcessor scriva un nuovo file sorgente, che non è quello che voglio fare, non riesco a vedere o scoprire come farlo modificare la classe esistente (idealmente basta modificare il codice byte). La modifica è in realtà abbastanza banale, tutto quello che voglio che il processore faccia è inserire un nuovo getter e setter in cui il nome deriva dal valore dell'annotazione che viene elaborata.Come si utilizza l'elaborazione delle annotazioni Java 1.6 per eseguire la tessitura del tempo di compilazione?
Il mio processore di annotazione ha questo aspetto;
@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
}
}
Questa è sicuramente una soluzione, ma sono abbastanza sicuro che non è l'unica soluzione. Quello che voglio fare potrebbe essere fatto da diversi framework/toolset esistenti, ad esempio javassist. Stavo cercando di evitare di introdurre una dipendenza che non sembra essere strettamente necessaria però, l'introduzione dell'elaborazione delle annotazioni in JDK1.6 sembrava come se la funzionalità di javassist fosse in fase di cottura. Forse mi sbagliavo e ho ancora bisogno di un Strumento di terze parti per eseguire la tessitura del tempo di compilazione. – Steve