Xtext 禁用特定产品的验证检查
Xtext disable validation check for specfic product
我有两个产品。例如 A 和 B。在 A 产品中,我需要启用一个存在于 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。
是否有任何覆盖功能可以做这些?
非常感谢。
有两种方法可以解决这个问题:
您可以添加一个系统 属性(可能是 boolean
标志)以启用此功能。在 A 的 ini 文件中,您启用该选项。 B中你省略了。
您可以将插件拆分为一个库,然后拆分为两个您在产品中使用的插件。
拆分插件是这样的:
您需要创建一个新插件并将所有共享代码复制到其中。它还可以包含两种产品相同的验证代码。将验证码命名为 SharedValidator
在此插件中,您需要重命名 DslRuntimeModule
(Dsl
是您的语法名称,它扩展了包含验证绑定的 AbstractDslRuntimeModule
)。将其重命名为 SharedDslRuntimeModule
.
然后您为产品 A 创建一个插件。它包含特定的验证。这个 class 需要扩展 SharedValidator
。
您还需要创建一个扩展 SharedDslRuntimeModule
的绑定,这样您就可以绑定新的验证器 class.
这是大概的轮廓。您还必须 copy/change 几个其他文件(例如 DslStandaloneSetup
和 plugin.xml
),但是当您修复编译错误时,这些更改应该会变得很明显。
...也许flag更简单
此问题的解决方案是创建扩展点。
我已经使用一种方法在 AProduct 验证器插件中创建了一个扩展点,其名称为 IProdcutEnabled 接口。
并在 BProduct 验证器插件中添加了该扩展点。
然后是 AProduct 验证器 class,验证我检查了扩展点是否被任何产品使用。如果已使用,则不显示警告。
我有两个产品。例如 A 和 B。在 A 产品中,我需要启用一个存在于 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。
是否有任何覆盖功能可以做这些?
非常感谢。
有两种方法可以解决这个问题:
您可以添加一个系统 属性(可能是
boolean
标志)以启用此功能。在 A 的 ini 文件中,您启用该选项。 B中你省略了。您可以将插件拆分为一个库,然后拆分为两个您在产品中使用的插件。
拆分插件是这样的:
您需要创建一个新插件并将所有共享代码复制到其中。它还可以包含两种产品相同的验证代码。将验证码命名为 SharedValidator
在此插件中,您需要重命名 DslRuntimeModule
(Dsl
是您的语法名称,它扩展了包含验证绑定的 AbstractDslRuntimeModule
)。将其重命名为 SharedDslRuntimeModule
.
然后您为产品 A 创建一个插件。它包含特定的验证。这个 class 需要扩展 SharedValidator
。
您还需要创建一个扩展 SharedDslRuntimeModule
的绑定,这样您就可以绑定新的验证器 class.
这是大概的轮廓。您还必须 copy/change 几个其他文件(例如 DslStandaloneSetup
和 plugin.xml
),但是当您修复编译错误时,这些更改应该会变得很明显。
...也许flag更简单
此问题的解决方案是创建扩展点。
我已经使用一种方法在 AProduct 验证器插件中创建了一个扩展点,其名称为 IProdcutEnabled 接口。
并在 BProduct 验证器插件中添加了该扩展点。
然后是 AProduct 验证器 class,验证我检查了扩展点是否被任何产品使用。如果已使用,则不显示警告。