1

メタモデルで指定されているモデル要素のサブセットの検証を無効にできるかどうかを知りたいです。

問題は、DSL ファイルの書き込み中に Xtexteditor からいくつかの検証エラーが発生することです。したがって、私の考えは、まさにこのモデル要素の検証を無効にすることです。私は本当に単純なテキスト表記を構築しようとしており、ファイルを保存するときに (有効な) モデルをシリアル化したいと考えています。保存されたモデルは保存プロセス中に変更されるため、最後に有効になります。

よろしく、アレックス

文法から始めましょう: 私はインポートされたメタモデル (UML2) に取り組んでいます:

import "http://www.eclipse.org/uml2/4.0.0/UML"

次に、クラス図を定義するために必要なすべてのパースルールを作成します。私の場合、問題はクラス間の関連付けのパーサールールに表示されます。

AssociationClass_Impl returns AssociationClass:
{AssociationClass} 'assoc' name=ID'{'
(ownedAttribute+=Property_Impl)*
'}';

そしてもちろん、プロパティのパーサールール:

Property_Impl returns Property:
     name=ID ':' type=[Type|QualifiedName]
     (association=[AssociationClass|QualifiedName])?
     ;

ここで、問題自体についていくつかの言葉を述べます。ランタイム Eclipse の xtexteditor で xtext-file を編集しているときに、ビルド モデルが検証されます。ここでの問題は、メタモデル自体が AssociationClass に対していくつかの制約を持っていることです (スクリーンショットはまだできません)。

Multiple markers at this line
- The feature 'memberEnd' of 'org.eclipse.uml2.uml.internal.impl.AssociationClassImpl@142edebe{platform:/resource/aaa/test.mydsl#//Has}'   
  with 0 values must have at least 2 values
- The feature 'relatedElement' of 'org.eclipse.uml2.uml.internal.impl.AssociationClassImpl@142edebe{platform:/resource/aaa/test.mydsl#//Has}'  
with 0 values must have at least 1 values
- The feature 'endType' of 'org.eclipse.uml2.uml.internal.impl.AssociationClassImpl@142edebe{platform:/resource/aaa/test.mydsl#//Has}'
with 0 values must have at least 1 values
- An association has to have min. two ownedends.

そして今、まさにこのモデル要素の検証を無効にすることが可能かどうか知りたいと思っていました. したがって、エラー情報をユーザーから隠すことができます。作成した xtextmodel を次のステップでシリアライズし、いくつかのモデル変換を行うためです。

4

1 に答える 1

1

UML はこのバリデータをグローバル シングルトン レジストリに登録しているようです。したがって、基本的にレジストリの使用は避ける必要があります。ランタイムモジュールで別の要素をバインドすることでそれを行うことができます:

public EValidator.Registry bindEValidatorRegistry() {
    // return an empty one as opposed to EValidator.Registry.INSTANCE
    return new org.eclipse.emf.ecore.impl.ValidationDelegateRegistryImpl();
}
于 2013-11-29T07:45:20.923 に答える