torutkのブログ

ソフトウェア・エンジニアのブログ

Java SE 6 (Mustang)のannotation処理

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