验证XText中的函数参数数量

时间:2013-03-19 22:23:15

标签: xtext

我的DSL中有原型:

prototype function SaySomething(String Words);
prototype function SayHelloLanguage(String Language, String Words);

我想在你调用其中一个函数原型时验证它

SaySomething("Hello World!");
SayHelloLanguage("French", "Bonjour World!");

您包含正确的参数数量和类型。

Prototype:
   'prototype function' name=ID '('parameters+=Parameter (',' parameters+=Parameter)* ')'
Function:
    name=[Prototype] '('parameters+=Parameter (',' parameters+=Parameter)* ')'
                        ^^^^^ how do I cross reference/validate this part                       

我想出了足够的交叉引用和范围,以便它自动完成函数名称,但我没有看到如何在语法中定义正确的参数计数或类型限制。

我是否需要实施验证器?或者这是我可以在语法中定义的东西吗?

1 个答案:

答案 0 :(得分:4)

我终于想通了。

在DSLJavaValidator.java中添加一个支票:

@check
public void checkParameterCount(Function function){
    Prototype p = (Prototype) function.eCrossReferences().get(0);
    if(function.getParameters.size() != p.getParameters.size()){
       error("Bad Parameter Count", DSLPackage.Literals.FUNCTION__NAME);
    }
}

在编辑器中输入时,所有用@check注释的函数都会被调用。