Reputation: 48
I'm trying to create a grammar for my dsl and this is a sample from it.
Model :
'@Model' modelName=ID '{'
fields+=Field*
toBeImportedIn+=ModelExportList*
'}'
;
/* Some other Rules here */
WebServiceConsumer :
'@WebServiceConsumer' '(' serviceName=ID ',' webServiceURL=STRING ','
modelName=[Model])'
;
When I try to test my grammar like this, I got an error : "Couldn't resolve reference to Model 'myModel'."
@Model myModel{}
@WebServiceConsumer(serviceName,"URL goes here",myModel)
Upvotes: 0
Views: 1218
Reputation: 11868
you can reference things that have an attribute called name
by default. you can bypass this behaviour by implementing your own IQualifiedNameProvider
e.g.
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());
}
}
and dont forget to bind
public class MyDslRuntimeModule extends org.xtext.example.mydsl.AbstractMyDslRuntimeModule {
override Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
return MyDslQNP;
}
}
Upvotes: 2