この文書では、JDT AST から Java コードを生成するための JET2 変換の要素と構造について説明します。 本書は特に、JDT AST から Java コードを生成するためにこの変換を使用する予定の開発者に有用です。
JDT からコード JET2 への変換は、トップレベルの変換です。
| JDT からコード JET2 への変換 |
|
変換では、ルート要素として Map<IJavaProject,Collection<CompilationUnit>> を予期します。 そしてプロジェクトごとにコレクションを処理し、対応するプロジェクト内に、対応するソース・ファイルを生成します。 CompilationUnit 要素には、必要な情報すべてが含まれていることが期待されます。 すなわち、パッケージ宣言、インポート宣言などです
変換では、org.eclipse.jet.modelInspectors 拡張を使用して、JET テンプレート内で JDT AST を全探索します。 インスペクターは、オブジェクトを XPath 情報モデルに適合させるオブジェクトです。 各インスペクターは、適合可能なオブジェクトのタイプを規定し、それらのオブジェクトだけに引き渡されます。 ASTNode ごとに 1 つのインスペクターがあり、その ASTNode の XPath 照会に応答します。 それらのインスペクターは com.ibm.xtools.transform.java.jet2 プラグイン内で実装されます
変換は拡張ポイントとして com.ibm.xtools.transform.java.jet2.IJavaJET2ListenerProvider を提供します。 これによって、変換実行中にカスタム・アクションを行うために、変換を起動することが可能になります。 IJavaJET2ListenerProvider というインターフェースによって、クライアントは、ASTNode ごとに Java JET2 変換に リスナーを登録し、さらに書き込まれるファイルごとに org.eclipse.jet.IWriterListener にリスナーを登録します。 拡張ポイントの構造については、以下に説明があります
| IJavaJET2ListenerProvider 拡張 |
|
インターフェース IJavaJET2ListenerProvider は次のように定義されます
| public interface IJavaJET2ListenerProvider { public IJavaJET2Listener getJavaJET2Listener(String activityId); public IWriterListener getWriterListener(String activityId); } |
IJavaJET2Listener というノード・レベル・リスナーは、各 ASTNode が処理される前と後に起動され、 IWriterListener というファイル・レベル・リスナーは、各ファイルがコミットされる前と後に起動されます。 コントリビューターは、それぞれ関心のある特定の activityId についてのみ、リスナーを提供できます。 ActivityId は、Java JET2 変換のクライアントが指定できる識別子であり、コントリビューターは任意の activityId について リスナーを提供できます。それによってコントリビューターは、Java JET2 変換を起動する任意の変換を拡張できます。 インターフェース IJavaJET2Listener は、次のように定義されます
| public interface IJavaJET2Listener { public void preVisit (ASTNode node, JET2Writer writer); public void postVisit(ASTNode node, JET2Writer writer); } |
<TBD>
<TBD>