ファイラ
まだストリーム開けるだけ。
/** * @when */ public void always(Filer filer, CtClass<?> klass) throws IOException { // 宣言以外はいらない (1) if (!klass.isMaster()) { return; } CtFolder folder = filer.getFolder("sample/tmp/filer"); // (2) CtFile file = folder.getFile(klass.getName()); // (3) PrintWriter writer = new PrintWriter(file.openOutputStream()); // (4) try { writer.println(klass.toString()); // (5) } finally { writer.close(); // (6) } }
という感じのファイラを動かすHack。
Eclipse上で動作させる場合、ルートフォルダがIWorkspaceRootで、その直下のフォルダがIProjectです。
上記のプログラムでは、
- クラス/列挙型のうち、宣言(マスタ参照)を探す
- "sample"プロジェクトの "tmp/filer" フォルダを取得。現時点で存在していなければファントムとして扱う
- (2)のフォルダの下に(1)で探した型の完全限定名と同じ名前のファイルを作成
- (3)のファイルに書き込むストリームを開く
- 書き込み
- 閉じる(現在の実装ではここでコミット)
ファントムを扱えるため、トランザクション切ってワーキングコピーに書き出す→最後にコミットとかやりたいところだけど、Eclipseに関して不勉強なので後回しに。