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

Eclipse plugin Xtext禁用特定产品的验证检查,eclipse-plugin,dsl,xtext,mwe,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) } 同样的检查不适用于BPProd

我有两种产品。例如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)
}
同样的检查不适用于BPProduct

是否有任何覆盖功能可用于这些


非常感谢。有两种方法可以解决这个问题:

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

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

拆分插件的工作方式如下:

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

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

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

您还需要创建一个扩展
sharedslruntimemodule
的绑定,以便绑定新的验证器类

这是大概的轮廓。您还必须复制/更改其他几个文件(如
DslStandaloneSetup
plugin.xml
),但在修复编译错误时,这些更改应该变得很明显


。。。可能标志更简单。

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

我在一个产品验证插件中创建了一个扩展点,名为interface IProdcutEnabled with one method

并在BPProduct validator插件中添加了该扩展点


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

您能稍微详细说明一下您的问题吗。如果您提供相应的语法,这也会非常有用。例如,如果元素没有任何赋值(元素e),那么Product:sample.aentity公共类sample{element e=10;}然后应该显示类似“初始化丢失”的警告。B.product中的samething我在那里使用的实体类还有B product:sample.bentity entity bentity{sample.aentity}。因此,当我运行BPProduct时,我不应该显示任何类似初始化丢失的警告;2.)定义语法的语法规则和3.)验证方法。也许我能帮你。但是目前还没有足够的信息。你有没有关于addIssue方法的信息?take代码可以转换为通过ConfigurableIssueCodeProvider(使用首选项存储严重性)配置的严重性问题嗨,Aaron,谢谢您的回复。我想采用第二种方法。我正在BValidator类中重写Availator类检查,但没有得到预期的输出。抱歉,我不理解plugin.xml文件中需要更改的内容。验证在
plugin.xml
文件中配置。搜索AValidator,查看它是如何完成的。现在对于产品B,您需要一个插件,该插件是a中插件的副本,但带有
plugin.xml
,其中
AValidator
替换为
BValidator
。如果您不想在每次更改后复制代码,那么您需要创建三个插件:一个包含共享代码,另一个仅包含验证器的每个产品。如果您在拆分插件时遇到问题,请发布新问题。实际上,通过绑定类来配置验证。现在我已经尝试了下面一个@ComposedChecks(validators=BValidator)类AValidator扩展了AJavaValidator{@Check def void validateInitialization(元素元素){warning('Invalid dependency',Element,Package.Literals.NAMED___NAME)}}类BValidator扩展了AValidator{override validateInitialization(元素元素){error(''B''中的依赖项无效',元素,包.Literals.NAMED__NAME)}所以它添加了错误标记和警告。它不是覆盖。@Saran:在这种情况下,您需要一个不同的模块配置来替换
AValidator
的绑定。我认为,要使其工作,您确实需要三个插件。添加系统属性到底是什么意思?这是如何工作的?