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