Anes El Gongi
Anes El Gongi

Reputation: 48

xtext couldn't resolve reference to Model

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

Answers (1)

Christian Dietrich
Christian Dietrich

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

Related Questions