JDK 6 および 7 の Java Annotation Processing API (5 の apt ツール API ではない) は、アノテーション プロセッサのライフサイクルを定義します。1 つは引数のないコンストラクターを介してインスタンス化され、init
メソッドはインスタンスで呼び出され、ProcessingEnvironment
そのプロセッサがメソッドを介して使用されprocess
ます。プロセッサの 1 つのインスタンスのみが作成され、該当する場合、後続のすべての処理ラウンドで使用されます。
私のプロセッサー・クラスは少し肥大化していたので、処理するはずの別個のアノテーション用のハンドラー・クラスを作成しました。これらのクラスのメソッドでは、ユーティリティ メソッド用にから取得したインスタンスを常に渡してElements
います。これにより、メソッドのシグネチャがかなり長くなります。Types
ProcessingEnvironment
プロセッサ インスタンスだけでなく、ハンドラでもインスタンスElements
への参照を維持したいだけです。渡されたTypes
ものからメソッドに取得することでこれを行いました。さて、これは安全かどうか疑問に思っています。JavaDoc forは、一部のメソッドがプロセッサに対して 1 回だけ呼び出されることを明確にしていますが、ここでは言及されていません。これは暗黙のうちに理解されていると思い込んでいましたが、100%確実ではありません。ProcessingEnvironment
init
Processor
init
Messager
同様に取得できるインスタンスが、ProcessingEnvironment
すべての処理ラウンドで同じままであるかどうかも知りたいです。あるラウンドからの警告/エラーが表示されるのではなく、他のラウンドが取り残されることは望ましくありません。ラウンド全体で同じインスタンスを使用しても安全であると合理的に確信していますが、ある程度の確実性が必要です。