Hi there!
Recently I've started working on a project that mixes xtext and Xpand. For now I'm testing to control the environment. Indeed I have tried from the initial examples to try to generate something.
I'm using the grammar that is created by default:
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
generate myDsl ...
Model:
greetings+=Greeting*;
Greeting:
'Hello' name=ID '!';
Add an Xpand proyect and the dependence to xtext project. I define the workflow file as:
module workflow.MYDslGenerator
import org.eclipse.emf.mwe.utils.*
var targetDir = "src-gen"
var fileEncoding = "Cp1252"
var modelPath = "src/model"
Workflow {
component = org.eclipse.xtext.mwe.Reader {
path = modelPath
register = org.xtext.example.mydsl.MyDslStandaloneSetup {}
load = {
slot = "model"
type = "Model"
}
}
component = org.eclipse.xpand2.Generator {
metaModel = org.eclipse.xtend.typesystem.emf.EmfMetaModel {
metaModelPackage = "org.xtext.example.mydsl.myDsl.MyDslPackage"
}
expand = "templates::Template::main FOREACH model"
outlet = {
path = targetDir
}
fileEncoding = fileEncoding
}
}
As I read in the documentation and forum for Model name does not exist, therefore must be supplied by overriding the names provider in MYDslRuntimeModule class:
MyDslNameProvider.class
package org.xtext.example.mydsl;
import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
import org.xtext.example.mydsl.myDsl.Model;
public class MyDslNameProvider extends DefaultDeclarativeQualifiedNameProvider {
public String qualifiedName(Model m) {
//return m.eResource().getURI().toString();
return "Model";
}
}
MyDslRuntimeModule.java
/*
* generated by Xtext
*/
package org.xtext.example.mydsl;
/**
* Use this class to register components to be used at runtime / without the Equinox extension registry.
*/
public class MyDslRuntimeModule extends org.xtext.example.mydsl.AbstractMyDslRuntimeModule {
@Override
public Class<? extends org.eclipse.xtext.naming.IQualifiedNameProvider> bindIQualifiedNameProvider() {
return MyDslNameProvider.class;
}
}
When I try running the worflow of the Xpand project get the following error:
0 ERROR DefaultResourceDescriptionStrategy - java.lang.String cannot be cast to org.eclipse.xtext.naming.QualifiedName
0 ERROR DefaultResourceDescriptionStrategy - java.lang.String cannot be cast to org.eclipse.xtext.naming.QualifiedName
31 WARN SlotEntry - Could not find any exported element of type 'Model' -> Slot 'model' is empty.
62 INFO Workflow - Done.
Anybody can help me?
Thank you very much.