■ はじめに
https://blogs.yahoo.co.jp/dk521123/37773041.htmlで、「Pluggable Annotation Processing API」を使っているとのことだったので、調べてみた。
■ Pluggable Annotation Processing API
* コンパイル時にアノテーションを読み込んでくれる機能 => アノテーションについては、以下の関連記事を参照のことhttps://blogs.yahoo.co.jp/dk521123/32740125.html
* Java1.6から追加された機能
補足
* Java1.5から追加されたAnnotation Processing Tool (apt)とは別物
■ サンプル
* 「Hello World」をやってみる
DemoAnnotationProcessor.java
package com.sample.annotation; import java.util.HashSet; import java.util.Set; import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.RoundEnvironment; import javax.lang.model.SourceVersion; import javax.lang.model.element.TypeElement; public class DemoAnnotationProcessor extends AbstractProcessor { private int round = 1; @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnvironment) { System.out.println("Round : " + (this.round++)); annotations.forEach(System.out::println); return true; } @Override public Set<String> getSupportedAnnotationTypes() { Set<String> supportedAnnotationTypes = new HashSet<>(); supportedAnnotationTypes.add("*"); return supportedAnnotationTypes; } @Override public SourceVersion getSupportedSourceVersion() { return SourceVersion.RELEASE_8; } }
DemoClass.java
package com.sample.annotation; public class DemoClass { @Deprecated public void deprecatedMethod() { } @Override public String toString() { return "demo"; } }
コマンド実行
# [1] 移動 cd C:\eclipse\workspace\DemoProject\src\main\java # [2] コンパイル前に確認 dir com\sample\annotation\* /b DemoAnnotationProcessor.java DemoClass.class # [3] コンパイル javac com/sample/annotation/DemoAnnotationProcessor.java # [4] コンパイル後の確認 dir com\sample\annotation\* /b DemoAnnotationProcessor.java DemoAnnotationProcessor.class << コンパイルしてクラスファイルができた DemoClass.class # [5] 実行 javac -processor com.sample.annotation.DemoAnnotationProcessor com/sample/annotation/DemoClass.java Round : 1 java.lang.Deprecated java.lang.Override Round : 2
参考文献
https://qiita.com/opengl-8080/items/beda51fe4f23750c33e9https://speakerdeck.com/sinsengumi/pluggable-annotation-processing-dekodeingugui-yue-tupoimofalse
http://vermeer.hatenablog.jp/entry/2017/11/16/170859
http://d.hatena.ne.jp/taedium/20090420/p1
http://mikeneck.blogspot.com/2013/02/pluggable-annotation-processor-api.html