1

私は2つの製品を持っています。たとえば、A と B です。A 製品では、AValidator.xtend ファイルに存在する 1 つの検証を有効にする必要があり、B 製品は A に依存しているため、B 製品を実行するときに警告を無効にする必要があります。

AValidator.xtend:

@Check
def validateElement(Element e)
{
    warning('''Element «e.name» missing in files.''', e,         package.Literals.NAMED__NAME)
}

同じチェックは BProduct では機能しないはずです。

これらに対してできるオーバーライド機能はありますか?

よろしくお願いします。

4

2 に答える 2

1

これを解決するには、次の 2 つの方法があります。

  • この機能を有効にするシステム プロパティ (おそらくbooleanフラグ) を追加できます。A の ini ファイルで、オプションを有効にします。B では省略します。

  • プラグインをライブラリに分割してから、製品で使用する 2 つのプラグインに分割できます。

プラグインの分割は次のように機能します。

新しいプラグインを作成し、すべての共有コードをそれにコピーする必要があります。また、両方の製品で同じ検証からのコードを含めることもできます。検証コードに名前を付けますSharedValidator

このプラグインでは、名前を変更する必要がありますDslRuntimeModule(Dslは文法の名前でありAbstractDslRuntimeModule、検証用のバインディングを含むように拡張されています)。に名前を変更しSharedDslRuntimeModuleます。

次に、製品 A のプラグインを作成します。これには、特定の検証が含まれています。このクラスは拡張する必要がありますSharedValidator

また、拡張するバインディングを作成する必要があるためSharedDslRuntimeModule、新しいバリデータ クラスをバインドできます。

それが大まかな概要です。他のいくつかのファイル (DslStandaloneSetupや などplugin.xml) もコピー/変更する必要がありますが、コンパイル エラーを修正すると、これらの変更が明らかになるはずです。

...多分フラグはもっと単純です。

于 2015-01-19T15:13:14.373 に答える