Xtext:由无序组自定义错误消息

问题描述 投票:1回答:3

我已经定义了一个无序组,它的工作方式与我预期的一样。我唯一想要改变的是错误消息,当无序组的元素尚未建模时出现。有没有简单的方法来解决这个问题?我已经尝试过自定义检查,但是我遇到了意外行为。

遵循我对无序组的规则和错误消息:

Element:
    (name=ConfigurationName) &
    (description=Description)? &
    (tool=Tool) &
    (model=Model) &
    (interfaces=Interfaces)? &
    (paramaters=Parameters)? &
    (paramfile=ParamFile)?
;

rule ruleElement failed predicate: {getUnorderedGroupHelper().canLeave(grammarAccess.getElementAccess().getUnorderedGroup())}?

我想将此错误消息更改为:“配置中需要以下元素:......”

error-handling message xtext unordered
3个回答
2
投票

Xtext有一个名为SyntaxErrorMessageProvider的服务,用于重写解析器错误消息。您必须在解析器级别定义消息(因此不会使用EMF模型),但是可以获取原始错误消息和上下文,遍历它并提供您自己的错误消息。

要注册它,请打开«YourLanguage»RuntimeModule类,并添加以下方法:

public Class<? extends ISyntaxErrorMessageProvider> bindISyntaxErrorMessageProvider() {
    return «YourLanguage»SyntaxErrorMessageProvider.class;
}

其中«YourLanguage«SyntaxErrorMessageProvider是由您介绍的类,扩展了类SyntaxErrorMessageProvider,您可以在其中实现自定义函数。


0
投票

我工作自动验证自定义,我创建公共类MyDslLanguageSyntaxErrorMessageProvider扩展SyntaxErrorMessageProvider {}

我在MyDslRuntimeModule中注册它:public Class bindISyntaxErrorMessageProvider(){return MyDslLanguageSyntaxErrorMessageProvider.class;}

但我的问题是哪个包用于此自定义。我使用org.xtext.example.mydsl.validation包用于创建java类。我也使用xtend类进行此自定义。我在互联网上找不到足够的源:(


0
投票

您可以使用Java编写此Custom SyntaxErrorMessageProvider类,但要绑定它,您可以在Runtime Module类中进行绑定。你也可以使用任何包声明这个类,但是在你有Runtime类的同一个包中声明这个类是有意义的

© www.soinside.com 2019 - 2024. All rights reserved.