Xtext禁用特定产品的验证检查

时间:2015-01-19 14:21:06

标签: eclipse-plugin dsl xtext mwe

我有两种产品。例如A和B.在产品中我需要启用AValidator.xtend文件中存在的一个验证,而B产品依赖于A,所以当我运行B产品时,检查需要禁用警告。

AValidator.xtend

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

同样的检查不适用于BProduct。

是否有任何覆盖功能可以做到这些?

非常感谢提前。

2 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题:

  • 您可以添加启用此功能的系统属性(可能是boolean标志)。在A的ini文件中,启用该选项。在B中,你省略了它。

  • 您可以将插件拆分为库,然后将两个插件拆分为产品中使用的插件。

拆分插件的工作原理如下:

您需要创建一个新插件并将所有共享代码复制到其中。它还可以包含来自验证的代码,这两个产品都是相同的。为验证代码指定名称SharedValidator

在此插件中,您需要重命名DslRuntimeModuleDsl是您的语法的名称,它扩展AbstractDslRuntimeModule,其中包含验证的绑定)。将其重命名为SharedDslRuntimeModule

然后为产品A创建一个插件。它包含特定的验证。这个类需要扩展SharedValidator

您还需要创建一个扩展SharedDslRuntimeModule的绑定,以便绑定新的验证程序类。

粗略的轮廓。您还必须复制/更改其他几个文件(例如DslStandaloneSetupplugin.xml),但在修复编译错误时,这些更改应该会很明显。

......也许旗帜更简单。

答案 1 :(得分:0)

此问题的解决方法是创建扩展点。

我在AProduct验证器插件中创建了一个扩展点,其名称为接口IProdcutEnabled,并带有一个方法。

并在BProduct验证器插件中添加了该扩展点。

然后是AProduct验证器类,验证我检查了任何产品是否使用了扩展点。如果使用它不显示警告。