Pluggable Annotation Processing API Sample
Pluggable Annotation Processing API
について調べたり試したりしたまとめです。
今回やりたかったことは、Annotation Processor
で生成したソースが確認できるまでの環境準備です。「とりあえずAnnotation Processor
で簡易かつ完結したプロジェクトが欲しい」という事を満たすことが目的です。
参考サンプル
参考リンクとは別に、今回動くもののサンプルとして参考にさせていただいたサイトを先に挙げておきます。サンプルとさせていただいたAnnotation Processor
そのものの意図などはこちらを確認いただければと思います。
GitHub
今回のソースおよび実行環境の全量です*1。
GitHub - vermeer-1977-blog/annotation-processor-sample: Pluggable Annotation Processing API Sample
ポイント
今回の目的である「完結したプロジェクトを作成する」というところに絞ったポイントです。
テストについて多くのサイトではAptina Unitを話題に出していました。実際、DomaやJsonPullParserでも使われています。私自身も試してみたのですがJavaのバージョン@SupportedSourceVersion(SourceVersion.RELEASE_8)
で警告が出る事と今回のサンプルで上手くソース生成結果を取得できなかったので(getGeneratedSourceでSourceNotGeneratedException
が出る)、私はCompile Testingを使うことにしました。
ただCompile TestingにはgetGeneratedSource
のようなメソッドが見当たりませんでしたので、今回のプロジェクトでは直接コンソールに結果を出力するようにしています。*2
テストとは直接関係ないのですが、生成後想定クラスSampleFactory.java
については、NetBeans
で編集して保存をすると自動でフォーマットされてしまい、こちらの意図した形式と不一致になってしまいました。拡張子をtxt
にして編集をして、最後に拡張子だけをjava
に変えるという力技で対処しました。
参考リンク
Annotation Processor
について教科書的知識として必ず目を通した方が良いもの*3
- Java技術最前線 - 「Java SE 6完全攻略」第94回 アノテーションを処理する その1:ITpro
- Java技術最前線 - 「Java SE 6完全攻略」第95回 アノテーションを処理する その2:ITpro
- Java技術最前線 - 「Java SE 6完全攻略」第96回 アノテーションを処理する その3:ITpro
- Java技術最前線 - 「Java SE 6完全攻略」第97回 アノテーションを処理する その4:ITpro
- Java技術最前線 - 「Java SE 6完全攻略」第98回 アノテーションを処理する その5:ITpro
- Java技術最前線 - 「Java SE 6完全攻略」第99回 アノテーションを処理する その6:ITpro
- Java技術最前線 - 「Java SE 6完全攻略」第100回 アノテーションを処理する その7:ITpro
- Pluggable Annotation Processing API 使い方メモ - Qiita
実行サンプル(上述と同じ)
Annotation Processingを使ったソースコード生成プログラムを作ってみる。(Java編) - Qiita
アノテーションプロセッサで生成したコードをCompile Testingを使ってテストする - 量産型エンジニアの憂鬱
その他
アノテーションプロセッサで AST 変換 - Lombok を参考にして変数の型をコンパイル時に変更 - なんとなくな Developer のメモ
さいごに
Annotation Processor
を調べている中でDomaやJsonPullParserのソースを少しだけ読んだりしました。正直、私には難しかったです。ですが分からないなりにAnnotation Processor
の良さも分かったようにも思います。うらがみさんの「白魔術」という表現も言い得て妙だと思いました。
https://twitter.com/backpaper0/status/578776701989052416
ツール
(2017/11/17追記)
ツールを作ってみました。
ついでに、その実装説明も書いてみました。