2016-07-06 15 views
0

私はJava Annotation Processorを使いこなしてきました。 今私は以下のことをしたいと思います。私が見る限り、これは不可能です。Javaアノテーション式を分析するプロセッサ?

ビルダーパターンを実装するいくつかのクラスがあります。メソッド呼び出しの「チェーン」は​​方法を使用して終了されることが重要であるインスタンス

new FooBuilder().doSomething("A").doSomethingElse("B").execute(); 

のために言います。それ以外の場合、ビルダーは基本的に何もしません。

私は、コンパイル時に​​メソッドが特定の式の型に存在することを確認するためにJAPを使用したかったのです。残念ながら、私が取り出すことができる最も細かい情報は、式ではなくメソッド宣言レベルにあるようです。

私はすべて可能にしたいですか?

+0

ユーザーが次のようなことをした場合に起こることはあります: 'FooBuilder fb = new FooBuilder()。doSomething(" A ")。doSomethingElse(" B ");/*他に何かする*/fb.execute(); '? –

+0

この場合、代入は 'execute()'が存在しないことを正当化する可能性があります。しかし、あなたはこれが愚かではないことは間違いありません。それにもかかわらず、それは多くの基本的なケースをキャッチすることができます。 – geert3

答えて

2

Javaの標準アノテーションプロセッサは、メソッド宣言やフィールド宣言などの宣言でのみコールバックを提供します。

注釈プロセッサを使用して式を分析することは可能ですが、もう少し作業があります。それぞれのメソッドでメソッドのAST(抽象構文ツリーまたは解析ツリー)を取得し、メソッドの各式にアクセスするアノテーションプロセッサを作成する必要があります。 ASTはコンパイラ固有です。

これを行う最もよく知られているプロジェクトは、Checker FrameworkProject Lombokです。たぶんあなたは実装からインスピレーションを得ることができ、あるいはそれらのいずれかの上に注釈プロセッサーを書くことさえできます。

関連する問題