システム開発で思うところ

Javaで主にシステム開発をしながら思うところをツラツラを綴る。主に自分向けのメモ。EE関連の情報が少なく自分自身がそういう情報があったら良いなぁということで他の人の参考になれば幸い

Pluggable Annotation Processing API Sample

Pluggable Annotation Processing APIについて調べたり試したりしたまとめです。
今回やりたかったことは、Annotation Processorで生成したソースが確認できるまでの環境準備です。「とりあえずAnnotation Processorで簡易かつ完結したプロジェクトが欲しい」という事を満たすことが目的です。

参考サンプル

参考リンクとは別に、今回動くもののサンプルとして参考にさせていただいたサイトを先に挙げておきます。サンプルとさせていただいたAnnotation Processorそのものの意図などはこちらを確認いただければと思います。

qiita.com

GitHub

今回のソースおよび実行環境の全量です*1

GitHub - vermeer-1977-blog/annotation-processor-sample: Pluggable Annotation Processing API Sample

ポイント

今回の目的である「完結したプロジェクトを作成する」というところに絞ったポイントです。

テストについて多くのサイトではAptina Unitを話題に出していました。実際、DomaJsonPullParserでも使われています。私自身も試してみたのですがJavaのバージョン@SupportedSourceVersion(SourceVersion.RELEASE_8)で警告が出る事と今回のサンプルで上手くソース生成結果を取得できなかったので(getGeneratedSourceSourceNotGeneratedExceptionが出る)、私はCompile Testingを使うことにしました。
ただCompile TestingにはgetGeneratedSourceのようなメソッドが見当たりませんでしたので、今回のプロジェクトでは直接コンソールに結果を出力するようにしています。*2


テストとは直接関係ないのですが、生成後想定クラスSampleFactory.javaについては、NetBeansで編集して保存をすると自動でフォーマットされてしまい、こちらの意図した形式と不一致になってしまいました。拡張子をtxtにして編集をして、最後に拡張子だけをjavaに変えるという力技で対処しました。

参考リンク

Annotation Processorについて教科書的知識として必ず目を通した方が良いもの*3


実行サンプル(上述と同じ)
Annotation Processingを使ったソースコード生成プログラムを作ってみる。(Java編) - Qiita


Compile Testing

アノテーションプロセッサで生成したコードをCompile Testingを使ってテストする - 量産型エンジニアの憂鬱


その他

アノテーションプロセッサで AST 変換 - Lombok を参考にして変数の型をコンパイル時に変更 - なんとなくな Developer のメモ

さいごに

Annotation Processorを調べている中でDomaJsonPullParserのソースを少しだけ読んだりしました。正直、私には難しかったです。ですが分からないなりにAnnotation Processorの良さも分かったようにも思います。うらがみさんの「白魔術」という表現も言い得て妙だと思いました。

https://twitter.com/backpaper0/status/578776701989052416

ツール

(2017/11/17追記)

ツールを作ってみました。

ついでに、その実装説明も書いてみました。

vermeer.hatenablog.jp

vermeer.hatenablog.jp

*1:GitHubを初めて使いました。思った構成にならず、Readmeの書き方に戸惑い、何度もRepositoryを削除するという繰り返し。まだ良く分かっていませんが、とりあえずプロジェクト公開まで至れたので良しとしたいと思います。

*2:その他のメッセージも同様ですが実際の稼動時には出力しないようにしてください。

*3:といいつつ、私は途中までしか読んでいません。。なので自分向けのリンクでもあります