Xtext禁用导入的元模型验证

时间:2013-11-06 10:55:21

标签: validation xtext

我想知道是否可以禁用元模型中指定的模块元素子集的验证。

问题是我在编写dsl文件时从Xtexteditor获得了一些验证错误。所以我的想法是禁用这个模式元素的验证。 我尝试构建一个真正简单的文本符号,并希望在保存文件时序列化(有效)模型。保存的模型在保存过程中被修改,所以它是 最后有效。

此致 亚历

让我们从语法开始: 我正在处理导入的元模型(UML2):

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

然后我创建所有必要的解析器来定义一个classdiagram。在我的情况下出现问题 在parserrule中用于类之间的关联:

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文件时,将验证构建模型。问题在于元模型本身对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并进行一些模型转换。

1 个答案:

答案 0 :(得分:1)

似乎UML在全局单例注册表中注册了此验证器。所以你基本上需要避免使用注册表。您可以通过绑定运行时模块中的其他元素来实现:

public EValidator.Registry bindEValidatorRegistry() {
    // return an empty one as opposed to EValidator.Registry.INSTANCE
    return new org.eclipse.emf.ecore.impl.ValidationDelegateRegistryImpl();
}