「Component」と呼ばれる xText のルールは、通常、src-gen フォルダーにクラス「Component」を生成します。DSL に小さな変更を加えるたびにオーバーライドされることなく、これらのクラスにメソッドを追加したいと考えています。これらのクラスに独自のコードを挿入する適切な方法は何ですか? また、すべてのクラスがデフォルトの EObject の代わりに独自のルート クラスを拡張する方法はありますか?
前もって感謝します。
「Component」と呼ばれる xText のルールは、通常、src-gen フォルダーにクラス「Component」を生成します。DSL に小さな変更を加えるたびにオーバーライドされることなく、これらのクラスにメソッドを追加したいと考えています。これらのクラスに独自のコードを挿入する適切な方法は何ですか? また、すべてのクラスがデフォルトの EObject の代わりに独自のルート クラスを拡張する方法はありますか?
前もって感謝します。
基本的に次の 2 つの選択肢があります。
を使用しIXtext2EcorePostProcessor
て、Xtext が文法から推測した EMF モデルを変更できます。実際のコード生成は EMF によって行われるため、そのボトルネックを介してコードをいじる必要があります。詳細はChristian Dietrich のブログに記載されています。このアプローチは、小さな変更にのみ適しています。
生成されたモデルクラスから派生するクラスを作成できる「ジェネレーションギャップパターン」(別名「実装ギャップパターン」)を使用できます。ここでは、必要なものを追加できます。詳細はHeiko Behrens のブログに記載されています。このアプローチは、継承による大規模な変更に適しています。
もちろん、2つのアプローチを混在させることもできます...