先週までの解説で,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でソースファイルをコンパイルするには,次のような手順で行います。

  1. ToolProviderクラスのgetSystemJavaCompilerメソッドをコールすることによりJavaCompilerオブジェクトを取得する
  2. JavaCompilerオブジェクトに対して,getStandardFileManagerメソッドをコールし,仮想ファイルマネージャであるStandardJavaFileManagerオブジェクトを取得する
  3. StandardJavaFileManagerオブジェクトに対して,setJavaFileObjectsメソッドなどをコールして,コンパイルする対象のJavaFileObjectオブジェクトを生成する
  4. 3で生成したJavaFileObjectオブジェクトを引数にして,JavaCompilerオブジェクトのgetTaskメソッドをコールし,JavaCompiler.CompilationTaskオブジェクトを生成する
  5. CompilationTaskオブジェクトのcallメソッドをコールする

アノテーションプロセッサを呼び出す場合でも,基本的な手順は同じです。異なるのは次の2点です。

  1. JavaCompilerオブジェクトのgetTaskメソッドをコールする時にアノテーションプロセッサを指定する
  2. CompilationTaskオブジェクトのcallメソッドをコールする前に,setProcessorsメソッドでアノテーションプロセッサをセットする