J2SE5.0 (Tiger)で導入されたアノテーションがMustangでは簡潔になりました。
- AbstractionProcessorクラスが提供され、アノテーションプロセッサを実装するのが楽に
- AnnotationProcessorFactoryは作らなくてもよくなった
- javacにオプション-processorが追加され、aptコマンドを直接使わなくてもよくなった
sun.comのblogで紹介されています。
http://blogs.sun.com/roller/page/darcy?entry=jsr_269_in_mustang_build
mustang b65では若干コードを修正しないと動きませんでした。
import javax.annotation.processing.*; import static javax.lang.model.SourceVersion.*; import javax.lang.model.element.*; import javax.lang.model.type.*; import javax.lang.model.util.*; import javax.tools.DiagnosticMessage; import java.util.Set; @SupportedAnnotationTypes("*") @SupportedSourceVersion(RELEASE_6) public class AccessorProcessor extends AbstractProcessor { public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { if (!roundEnv.processingOver()) { processingEnv.getMessager().printMessage( DiagnosticMessage.Kind.NOTE, "Hello World" ); } return false; } }
実行は、以下
$ javac -cp /java/jdk1.6.0/lib/tools.jar:. AccessorProcessor.java $ javac -processor AccessorProcessor Sample.java 注:Hello World $
また、Tree APIなるものがあるらしいです。
http://forums.java.net/jive/thread.jspa?threadID=1766&tstart=60