Java di elaborazione della nota: come faccio a sapere se un turno è l'ultimo?
-
30-09-2019 - |
Domanda
Quando si prolungano AbstractProcessor
, v'è la possibilità di sostituzione init(...)
, ma non v'è alcun metodo "fronte", che sarebbe chiamato dopo tutti tondi sono stati elaborati.
Questo è un problema: quando si dispone di informazioni di accodamento raccolte durante ogni round a stesso file, basta non può mai chiudere il file, perché non si arriva a sapere quando il ultima round è stato. Quindi, il file non è mai chiuso e rimane vuota.
Utilizzando un gancio di arresto non funziona neanche, il gancio viene mai chiamato.
Tutte le idee?
Soluzione
Il Processor.process
metodo comprende un argomento di tipo RoundEnvironment
. Forse il RoundEnvironment.processingOver
metodo può essere di aiuto.
Altri suggerimenti
Sembra che la mia comprensione di "ronde" nel contesto di elaborazione di annotazione erano sbagliate:
Come affermato qui ,
[...] in ogni giro, un processore può essere chiesto di elaborare un sottoinsieme del annotazioni trovati sul sorgente e file di classe prodotte da un giro prima . Gli ingressi al primo giro di elaborazione sono input iniziale ad un eseguire dello strumento; questi ingressi iniziali può essere considerato come l'uscita di un zeroth rotonda virtuale di elaborazione. [...]
Dal momento che nel mio caso d'uso sono non produce tutti i nuovi file di classe, o io li producono, ma non necessità di processo loro, dovrebbe essere sufficienti solo per "contare" giri e fare lavoro effettivo solo nel primo (e facendo un lavoro su pulito, come la chiusura dei file, alla fine di esso).