クエリ
言ってみればDIかも。
進捗遅れ気味で多方面にご迷惑かけてますが、↓がリアルタイムで動きました。
/** * @when * protected in x.modifiers */ public void sample(Messager messager, CtMethod<?> x) { messager.warn(x, x.toString()); }
まず、「@when」でコンパイル対象の構造を検出するクエリ文を書き始めます。
クエリの文法についてはオフィシャルでいずれ。
クエリの「protected in x.modifiers」は、次のように解釈します。
- x はコンパイル対象の任意の要素
- x は属性 "modifiers" (修飾子一覧) を持つ
- x はメソッドである (引数の CtMethod xより推論)
- x の修飾子一覧を x1 と置くと
- 修飾子 "protected" は x1 に含まれる
上記すべてを同時に満たすxがコンパイル対象から検出され、メソッドsampleの第2引数に順次ドライブされます。
第1引数の「Messager messager」はロガーのようなもので、環境から自動的にドライブされます。