2010-11-10 17 views
11

Bei der Erweiterung AbstractProcessor gibt es eine Möglichkeit, init(...) zu überschreiben, aber es gibt keine "Gegenteil" -Methode, die nach alle Runden würde verarbeitet werden würde.Java Annotation Processing: Woher weiß ich, ob eine Runde die letzte ist?

Dies ist ein Problem: Wenn Sie Informationen, die während jeder Runde zu gleichen Datei gesammelt anhängen haben, kann man einfach nicht immer die Datei schließen, weil man nie, wenn das war letzte Runde kennen lernen. Die Datei wird also nie geschlossen und bleibt leer.

Mit einem Shutdown-Hook funktioniert auch nicht, der Hook wird nie aufgerufen.

Irgendwelche Ideen?

Antwort

4

Es scheint, dass mein Verständnis von „Runden“ im Zusammenhang mit der Anmerkung Verarbeitung falsch war:

Wie here erwähnt,

[...] Auf jeder Runde kann ein Prozessor sein gebeten, eine Teilmenge der Annotationen auf der Quelle und Klassendateien von einer vorherigen Runde produziert zu verarbeiten. Die Eingaben in die erste Runde von Verarbeitung sind die ersten Eingaben zu einem Lauf des Werkzeugs; diese anfänglichen Eingaben können als die Ausgabe einer virtuellen nullten Verarbeitungsrunde angesehen werden. [...]

Da in meinem Anwendungsfall bin ich entweder nicht keine neuen Klassendateien produzieren, oder ich produzieren sie aber nicht Notwendigkeit Prozess sie, sollte es enought werden nur um Runden zu "zählen" und die eigentliche Arbeit nur in der ersten zu tun (und Arbeit aufräumen, wie das Schließen von Dateien, am Ende davon).

+3

Aber andere Annotationsprozessoren können Dateien erzeugen, die dann von Ihnen verarbeitet werden. Daher sollten Sie sich nicht auf diese Annahme verlassen. –