我想知道是否可以禁用元模型中指定的模块元素子集的验证。
问题是我在编写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并进行一些模型转换。
答案 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();
}