APTについて、追加で分かってきたこと

前回記事 [id:vvakame:20101223:1293086110]

ここから、こうした方がいんじゃね?って思ったことにちょっとだけ変化が発生したので、書いておきます。

どうでもいいこと

com.sunの方は、APTっていうけど、JSR269のjavax.lang.modelのほうは、アノテーションプロセッサーっていって、APTって言わないらしいってついったーで教えてもらった!(誰に教えてもらったかはわからなくなった)
でも、めんどいからAPTって書きます。3文字だし。

改善点

ソース出力処理自体

前回時点

2パス処理すればいいよ!!→1パス目でエラー検出、2パス目で逐次処理的にソース出力

これは、今となっては分かりにくいなーという感じっす。
分かりにくさの理由として、ソース内の色々な場所でソース出力処理を行っているので可読性が悪く、全体を把握しないとどういうソースが出力されるか不明なためです。
まぁ、出力後ソースが手に入るので死ぬほど辛いって感じじゃないと思いますが。

今時点の認識

テンプレートエンジンを使うといいよ。ってなりました。
そのためには、2ステップ処理をするように変更して、1ステップ目でエラー検出&生成用データを保持したデータの作成、2ステップ目でテンプレートエンジンへのデータ流しこみを行っています。
https://github.com/vvakame/JsonPullParser/blob/master/jsonpullparser-apt/src/main/java/net/vvakame/util/jsonpullparser/factory/GeneratingModel.java
https://github.com/vvakame/JsonPullParser/blob/master/jsonpullparser-apt/src/main/java/net/vvakame/util/jsonpullparser/factory/JsonElement.java
JsonPullParser/JsonModelGen.java.mvel at master · vvakame/JsonPullParser · GitHub

前回発表時[twitter:@zaki50]さんに"Velocityいいよ!"って言われたんですが、制御構文とかの使いにくさとかもあって、[twitter:@esmasui]さんに教えてもらったMVELを現在は利用しています。
テンプレートエンジン自体も抽象化して差し替え可能な構造にしてます。
こーすると、Javadocを提供するのも超簡単で便利です!
デバッグで止めて、テンプレートエンジン流しこみ直前のデータを見ればどういう処理が行われるのか人目でわかりますし、利点が大きいです。
また、import文を既知のものについては使えるので、動的に差し替える部分以外はSimpleNameを利用でき可読性が一応あがっています。
ただ、空行とかがガスガス入るので、見栄えはちょっと悪くなりましたw

弱点

複数プロジェクトでPOJOを共有し、別々のプロセッサを適用したい場合にうまい解決策がない。
jar化されたclassファイルに対してプロセッサを再適用する方法とかがない。

ていうのがわかった。[id:vvakame:20110130:1296356939]で困ってるのはそれが一因かも。