先週までの解説で,Pluggable Annotation Processing APIの機能はほぼ紹介しました。今週は応用編ということで,Compiler API からPluggable Annotation Processing APIを呼び出してみましょう。
Compiler APIからアノテーションプロセッサを使用する
本連載「Java SE 6完全攻略」の第89回から第93回まで紹介したCompiler APIは,プログラム中でJavaのソースをコンパイルするためのAPIです。しかし,ソースファイルのコンパイルだけでなく,アノテーション処理も行うことが可能です。
そこで今週は,先週使用したjavax.lang.model.util.ElementScanner6インタフェースを使用したアノテーションプロセッサをCompiler APIから呼び出してみます。
Abstraction.java
AbstractionMethod.java
AbstractionProcessor.java
AnnotationProcessorSample1.java
Compiler APIでアノテーションプロセッサを呼び出す前に,少しだけCompiler APIの復習をしておきましょう。
Compiler APIでソースファイルをコンパイルするには,次のような手順で行います。
- ToolProviderクラスのgetSystemJavaCompilerメソッドをコールすることによりJavaCompilerオブジェクトを取得する
- JavaCompilerオブジェクトに対して,getStandardFileManagerメソッドをコールし,仮想ファイルマネージャであるStandardJavaFileManagerオブジェクトを取得する
- StandardJavaFileManagerオブジェクトに対して,setJavaFileObjectsメソッドなどをコールして,コンパイルする対象のJavaFileObjectオブジェクトを生成する
- 3で生成したJavaFileObjectオブジェクトを引数にして,JavaCompilerオブジェクトのgetTaskメソッドをコールし,JavaCompiler.CompilationTaskオブジェクトを生成する
- CompilationTaskオブジェクトのcallメソッドをコールする
アノテーションプロセッサを呼び出す場合でも,基本的な手順は同じです。異なるのは次の2点です。
- JavaCompilerオブジェクトのgetTaskメソッドをコールする時にアノテーションプロセッサを指定する
- CompilationTaskオブジェクトのcallメソッドをコールする前に,setProcessorsメソッドでアノテーションプロセッサをセットする