aptを使ってみようかな

アノテーションによってコンポーネント構築を目論んだ次期S2Wicketだが,いくつかエントリした通り,芳しくない結果に終わってしまった。助けてエントリをしてみるも,とてもありがたい「頑張ってください」エールはいくつか頂けたものの,具体的な解決策を得るまでに至らなかった。 もっと別の何かを閃くことができれば,忘れることができるだろう。しかし,思いついたことといえば,TwitterclipseだったりSearchclipseだったり。S2Wicketについては,未解決で終わった問題領域を悶々と試すだけの日々が続いている。アノテーション以外の手立てを思いついたわけでもなく,コンポーネント構築以外の新機能が発想できたわけでもない。 僕の中で,アノテーションは「実行時に解釈するもの」という考えが根底にある。もちろんバイトコードに落ちずにコンパイル時にのみ使用する目的もアノテーションにあることは知っている。ただ,そのためには何らかの解析ツールを作成して利用しなければならず,アノテーションの利便性というか,利用価値というか,そういったものが犠牲になる気がしてならなかった。 何はともあれ, 「abstractなクラスを型とするフィールドに対して,アノテーションを付与することによって何らかの実装を持つインスタンスを動的に生成してセットする」 という次期S2Wicketの命題,どうしたものか。。。 ここで一歩引いて考えると,問題発生のそもそもの原因は,サブクラスを動的クラス生成で何とか実現できないか,と考えたことである。本来静的なものなバイトコードを動的に生成することは,永続化機構によって大きな問題となることがわかった。その壁は,とてつもなく高いものだった。 結局のところ,壁はその1枚であり,動的バイトコード生成アプローチを捨てて,事前にバイトコードを準備できさえすれば問題は解決する。たったそれだけのこと。 事前にバイトコードを準備するためには,自動生成をしてしまえば良い。つまり,aptの出番である。アノテーションが記述されたソースコードをアノテーションプロセッサに処理させて,実装を持つabstractなコンポーネントクラスのサブクラスのソースコードを自動生成する。そのコードが他のコードと同等にコンパイルされてwarファイルに含まれれば,解決である。 ま,最初からそうすれば良いのはわかっていたことだが,アノテーションに対する僕の印象が,その選択肢を選択させづらくしていたということは,前述の通りだ。 aptはもちろんコマンドラインツールとして提供されているものだが,Eclipseにビルダーとして組み込んで,暗黙的にアノテーションプロセッサを走らせることができる。これをうまく使えば(ビルダーのプラグインを利用することが前提となってしまうが)先の次期S2Wicketの目的は達成されるのではないか,と今は考えるようになった。 「アノテーションプロセッサ作ってみたいだけちゃうんか」と思うことだろう。そう,その通り。 何もランタイム時の解決だけがEoDではない。ツールに頼ることもEoDなはずだ。自動生成アプローチは,それはそれで幅広い命題なので,いろいろ模索してみたい。

このエントリーをはてなブックマークに追加

関連記事

2023年のRemap

Remapにファームウェアビルド機能を追加しました

Google I/O 2023でのウェブ関連のトピック

2022年を振り返って

現在のRemapと今後のRemapについて