xtext无法解析对Model的引用

时间:2018-03-30 11:03:46

标签: xtext cross-reference

我正在尝试为我的dsl创建一个语法,这是一个来自它的样本。

Model :
'@Model' modelName=ID '{'
    fields+=Field*
    toBeImportedIn+=ModelExportList*
'}'
;

/* Some other Rules here */

WebServiceConsumer :
'@WebServiceConsumer' '(' serviceName=ID ',' webServiceURL=STRING ',' 
 modelName=[Model])'
;

当我尝试像这样测试我的语法时,我收到一个错误:“无法解析对模型'myModel'的引用。”

@Model myModel{}

@WebServiceConsumer(serviceName,"URL goes here",myModel)

1 个答案:

答案 0 :(得分:1)

默认情况下,您可以引用具有name属性的内容。你可以通过实现自己的IQualifiedNameProvider例如

来绕过这种行为
package org.xtext.example.mydsl;

import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
import org.xtext.example.mydsl.myDsl.Element;
import org.xtext.example.mydsl.myDsl.Package;

public class MyDslQNP extends DefaultDeclarativeQualifiedNameProvider{

    QualifiedName qualifiedName(Element e) {
        Package p = (Package) e.eContainer();
        return QualifiedName.create(p.getName(), e.getId());
    }

}

并且不要忘记绑定

public class MyDslRuntimeModule extends org.xtext.example.mydsl.AbstractMyDslRuntimeModule {

    override Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
        return MyDslQNP;
    }

}