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?

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top