Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Metodo process e gestione degli errori

Completiamo l'analisi dedicata alle basi del Java annotation processing con alcuni approfondimenti incentrati sul metodo process (il metodo principale del processore di annotazioni) e sulla gestione degli errori a carico del processore di annotazione.
Completiamo l'analisi dedicata alle basi del Java annotation processing con alcuni approfondimenti incentrati sul metodo process (il metodo principale del processore di annotazioni) e sulla gestione degli errori a carico del processore di annotazione.
Link copiato negli appunti

Metodo process

process è il metodo principale del processore di annotazioni, esso viene invocato almeno una volta durante l'esecuzione dell'annotation processing. Nell'esempio proposto in questa breve trattazione, la prima operazione che verrà eseguita con questo metodo sarà andare a cercare tutte le classi annotate con @Convert.

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    // iteriamo su tutti gli elementi con l'annotazione @Convert
    for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(Convert.class)) {
  		...
    }
  }

Gli elementi analizzati possono essere sia classi che interfacce. Per distinguere i due casi potrebbe rivelarsi conveniente adottare un controllo simile a quello riportato di seguito:

// verifica che l'annotazione @Convert sia su una classe
if (annotatedElement.getKind() != ElementKind.CLASS) {
...
}

Nel caso specifico non si può impiegare un controllo del tipo annotatedElement instanceof TypeElement in quanto anche le interfacce sono di tipo TypeElement. Una buona abitudine nella scrittura di annotation process è quella di evitare l'uso di instanceof e di usare piuttosto la proprietà Kind della classe Element.

Processing Rounds

I processori vengono istanziati una volta sola dal compilatore. Il metodo process viene invocato una o più volte, a seconda del fatto che durante un round venga generato qualche nuovo elemento. Questo è dovuto al fatto che anche le nuove classi potrebbero contenere delle annotazioni da gestire e quindi è necessario invocare il processore anche su di esse. Nel nostro esempio, ci si aspetta che il processore di annotazioni venga eseguito in 3 round:

Round Input Output
1 Persona.java, ... PersonaConverter.java
2 PersonaConverter.java --
3 -- --

Il metodo process smette di essere invocato non appena sono state analizzate tutte le classi con le annotazioni gestite dal processore di annotazioni.

Gestione degli errori

Nel metodo init è possibile ottenere una reference ad un oggetto di tipo Messager. Esso fornisce un valido strumento per l'annotation processing al fine di riportare messaggi di errore, di warning e altre notifiche.

Il tipo di messaggio più importante è Kind.ERROR, che viene usato per segnalare il fallimento del processore di annotazioni. Un'eventuale eccezione nel metodo process provoca la chiusura della Java Virtual Machine creata per eseguire il processore di annotazione. Il metodo più lineare per informare il compilatore che qualcosa è andato male, consiste invece nell'utilizzare il messager per indicare la presenza di un errore.


Ti consigliamo anche