2013年2月17日日曜日

JavaのAST標準について

みけです。

最近はPluggable Annotation Processor APIにハマっています。

ただ、ここで一つの課題に直面しています。

このエントリーでは、僕が今直面していて、どうしてもやっつけたい課題について書いて行きたいと思っています。


JavaのASTの標準仕様?


これは僕が不勉強なのもあるのですが、

JavaでASTを操作する場合の標準AST(Abstract Syntax Tree)のモデルがないような気がします。

もちろん、package com.sun.toolsにはASTの実装がありますし、

Pluggable Annotation Processor APIをいじっているとInterfaceベースでASTを扱うので、

ないとは言えないのですが、

AST解析用にあるだけっぽくて、ASTからクラスファイル生成の標準がないような感じがします。


ASTモデルにあっては、javaファイルをパースしてASTモデルを生成する方向のAST利用シーンと、

自らASTモデルを生成してjavaファイルを生成するという二つの利用目的があるように思います。


Eclipse JDT


一応Eclipse JDTを簡単に調べてみましたが、

Eclなんとかを使用することが大前提のため、

宗教的な理由により却下。


好みは


僕はGroovyっ子なので、GroovyASTTransformationで使われている

package org.codehause.groovy.ast のモデルを使うのが比較的好きです。

このパッケージは非常に洗練されていて、

僕は一日程度で覚えることができました。


だからこのASTモデルを元にして、

javaファイルジェネレーションを実行できたらいいなと思う反面、

このpackage自体を取り出すのが面倒なので、

さて、困った…という状況にあります。


ASTモデル形成後の話


ASTモデルでクラスを組成できたとしても、

それを実際のjavaファイルに出力するには別途出力するエンジンが必要になるかと思っています。

その辺りについてはGroovyのコードをまだ追っていないので、

よくわかっていません。

まあ、結局のところ、勉強不足という事ですね。


Groovy依存を取り除く


また、Javaの標準的なASTの仕組みが欲しいので、

Groovy依存を無くしたいと思っている次第です。

なので、希望としてはJavaのAST標準がJSRあたりで提起されないかな〜

なんて思っています。


考えてもしかたがないので


ありうる形でASTモデルとjavaファイルジェネレーションを分離しつつ、

標準っぽいのを作って行きたいなーと思っています。

で、思っているだけだと

『[発声練習] 「何がわからないか」がわからないをそのままにしておかない技術モドキ』

こういう感じで突っ込まれそうなので、

githubあたりでコードを公開しつつ、

やろうかなと思っているんですが、

イマイチ抽象的な分野なので、

成果がなかなか現れない(´・ω・`)

@SupressWarnings("serialVersionUID")
public class Hoge implements java.io.Serializable {}

この程度でいいので生成できるASTとコードジェネレーションから作っていければいいかな

なんて思います。


0 件のコメント:

コメントを投稿