xtext 无法解析对模型的引用
xtext couldn't resolve reference to Model
我正在尝试为我的 dsl 创建语法,这是其中的一个示例。
Model :
'@Model' modelName=ID '{'
fields+=Field*
toBeImportedIn+=ModelExportList*
'}'
;
/* Some other Rules here */
WebServiceConsumer :
'@WebServiceConsumer' '(' serviceName=ID ',' webServiceURL=STRING ','
modelName=[Model])'
;
当我尝试像这样测试语法时,出现错误:"Couldn't resolve reference to Model 'myModel'."
@Model myModel{}
@WebServiceConsumer(serviceName,"URL goes here",myModel)
默认情况下,您可以引用具有名为 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;
}
}
我正在尝试为我的 dsl 创建语法,这是其中的一个示例。
Model :
'@Model' modelName=ID '{'
fields+=Field*
toBeImportedIn+=ModelExportList*
'}'
;
/* Some other Rules here */
WebServiceConsumer :
'@WebServiceConsumer' '(' serviceName=ID ',' webServiceURL=STRING ','
modelName=[Model])'
;
当我尝试像这样测试语法时,出现错误:"Couldn't resolve reference to Model 'myModel'."
@Model myModel{}
@WebServiceConsumer(serviceName,"URL goes here",myModel)
默认情况下,您可以引用具有名为 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;
}
}