先週までの解説で,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メソッドでアノテーションプロセッサをセットする

この先は会員の登録が必要です。有料会員(月額プラン)は申し込み初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら