2

現在、xText を使用してカスタム DSL を解析するプロジェクトを変更しています。生成されたクラスに機能を追加したいのですが、残念ながらジェネレーション ギャップ パターンの実装に失敗しました。私はこの記事を基礎として使用しました:

http://heikobehrens.net/2009/04/23/generation-gap-pattern/

私の問題は、org.eclipse.xtext.generator.Generator をカスタマイズするために多くのフラグメントを使用していることです。これらのフラグメントを org.eclipse.xpand2.Generator に再利用できないようです。

結論として:

  • xtext ジェネレーターのジェネレーション ギャップ パターンを実装するにはどうすればよいですか
  • または、xpand2-Generator で Fragments を使用するにはどうすればよいですか
  • または、フラグメントを使用してジェネレーション ギャップ パターンを実装できるようにする 3 番目のソリューションはありますか?

問題を調査した後、私は完全に混乱しています。

4

1 に答える 1

2

この記事で説明されているジェネレーション ギャップ パターンは、ほとんどすべての汎用コード生成フレームワークで機能します。Xtext も例外ではありません。

それに加えて、Xtext はジェネレーション ギャップを埋めるためのもう 1 つの気の利いたソリューションを提供します。これがXbaseです。しかし、Xbase では Java と緊密に統合する必要があるため、これが常に代替手段とは限りません。

既存の Xtext プロジェクトにジェネレーション ギャップ パターンを追加する次の手順を検討してください。

  • ギャップのある生成されたファイルを見つけます(手動で記述したいコードフラグメントを含む)。たとえば、MyClass としましょう。
  • ジェネレーターを次のように変更します。
    • 生成されたファイルの名前が AbstractMyClass に変更されます。
    • abstract キーワードが AbstractMyClass クラス定義に追加されます。
    • ギャップは単一のメソッドに移動します。
    • ギャップに対して抽象メソッドが生成されます。
    • 抽象メソッドは、生成されたコードから呼び出されます。
  • 「MyClass extends AbstractMyClass」を手動で追加し、抽象ギャップメソッドを実装します

Xtend2 コードに具体的な問題がある場合は、ここまたは Xtend フォーラムに質問を投稿してください。

于 2013-04-17T16:31:05.830 に答える