我有两种产品。例如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。
是否有任何覆盖功能可以做到这些?
非常感谢提前。
答案 0 :(得分:1)
有两种方法可以解决这个问题:
您可以添加启用此功能的系统属性(可能是boolean
标志)。在A的ini文件中,启用该选项。在B中,你省略了它。
您可以将插件拆分为库,然后将两个插件拆分为产品中使用的插件。
拆分插件的工作原理如下:
您需要创建一个新插件并将所有共享代码复制到其中。它还可以包含来自验证的代码,这两个产品都是相同的。为验证代码指定名称SharedValidator
在此插件中,您需要重命名DslRuntimeModule
(Dsl
是您的语法的名称,它扩展AbstractDslRuntimeModule
,其中包含验证的绑定)。将其重命名为SharedDslRuntimeModule
。
然后为产品A创建一个插件。它包含特定的验证。这个类需要扩展SharedValidator
。
您还需要创建一个扩展SharedDslRuntimeModule
的绑定,以便绑定新的验证程序类。
粗略的轮廓。您还必须复制/更改其他几个文件(例如DslStandaloneSetup
和plugin.xml
),但在修复编译错误时,这些更改应该会很明显。
......也许旗帜更简单。
答案 1 :(得分:0)
此问题的解决方法是创建扩展点。
我在AProduct验证器插件中创建了一个扩展点,其名称为接口IProdcutEnabled,并带有一个方法。
并在BProduct验证器插件中添加了该扩展点。
然后是AProduct验证器类,验证我检查了任何产品是否使用了扩展点。如果使用它不显示警告。