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

时间:2013-01-25 16:51:56

标签: error-handling message xtext unordered

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

要注册此内容,请打开«YourLanguage»RuntimeModule类,然后添加以下方法:

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

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

答案 1 :(得分:0)

我工作自动验证自定义,我创建 public class MyDslLanguageSyntaxErrorMessageProvider extends SyntaxErrorMessageProvider { }

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

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

答案 2 :(得分:0)

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