を拡張する場合AbstractProcessor、 をオーバーライドする可能性がありますが、すべてのラウンドが処理さinit(...)れた後に呼び出される「反対の」メソッドはありません。
これは問題です。各ラウンドで収集した情報を同じファイルに追加する必要がある場合、最後のラウンドがいつだったかを知ることができないため、ファイルを閉じることができません。そのため、ファイルは閉じられず、空のままです。
シャットダウン フックを使用しても機能しません。フックは呼び出されません。
何か案は?
を拡張する場合AbstractProcessor、 をオーバーライドする可能性がありますが、すべてのラウンドが処理さinit(...)れた後に呼び出される「反対の」メソッドはありません。
これは問題です。各ラウンドで収集した情報を同じファイルに追加する必要がある場合、最後のラウンドがいつだったかを知ることができないため、ファイルを閉じることができません。そのため、ファイルは閉じられず、空のままです。
シャットダウン フックを使用しても機能しません。フックは呼び出されません。
何か案は?
メソッドに typeのProcessor.process引数が含まれていますRoundEnvironment。方法が参考になるかもしれませんRoundEnvironment.processingOver。
注釈処理の文脈における「ラウンド」の私の理解は間違っていたようです:
ここで述べたように、
[...] 各ラウンドで、プロセッサは、前のラウンドで生成されたソース ファイルとクラス ファイルで見つかった注釈のサブセットを処理するように求められる場合があります。処理の最初のラウンドへの入力は、ツールの実行への初期入力です。これらの初期入力は、仮想ゼロ回目の処理の出力と見なすことができます。[...]
私のユースケースでは、新しいクラスファイルを作成していないか、作成したが処理する必要がないため、ラウンドを「カウント」し、最初のラウンドでのみ実際の作業を行うだけで十分です(そして最後に、ファイルを閉じるなどの作業をクリーンアップします)。