2010-11-10 6 views
11

Quando si estende AbstractProcessor, esiste la possibilità di ignorare init(...), ma non esiste alcun metodo "contrario", che verrebbe chiamato dopo tutti i round sono stati elaborati.Elaborazione delle annotazioni Java: come faccio a sapere se un round è l'ultimo?

Questo è un problema: quando si deve aggiungere le informazioni raccolte durante ogni round di stesso file, semplicemente non è possibile mai chiudere il file, perché non si arriva a sapere quando il giro ultima era. Quindi, il file non viene mai chiuso e rimane vuoto.

L'utilizzo di un gancio di arresto non funziona, il gancio non viene mai chiamato.

Qualche idea?

risposta

4

Sembra che la mia comprensione di "ronde" nel contesto di elaborazione di annotazione erano sbagliate:

Come detto here,

[...] in ogni giro, un processore può essere chiesto di elaborare un sottoinsieme delle annotazioni trovate sui file di classe di origine e prodotto da un ciclo precedente. Gli ingressi del primo ciclo di elaborazione sono gli input iniziali di una corsa dello strumento ; questi ingressi iniziali possono essere considerati come l'uscita di un ciclo di elaborazione virtuale di zero di . [...]

Dal momento che nel mio caso d'uso sono sia non produce eventuali nuovi file di classe, o li produco, ma Non necessità di processo di loro, occorre enought solo per "contare" i turni e fare il lavoro effettivo solo nel primo (e facendo il lavoro di ripulitura, come la chiusura dei file, alla fine di esso).

+3

Ma altri processori di annotazione possono produrre file che vengono poi elaborati dal tuo. Quindi non dovresti fare affidamento su questa ipotesi. –