#15
Output Configurations
In this episode I demonstrate, how to create multiple output configurations (also called outlets) with different default settings and use it within an IGenerator implementation.
- Download:
-
source code
Project Files in Zip (92.7 KB)
-
mp4
Full Size H.264 Video (21.5 MB)
-
m4v
Smaller H.264 Video (12.3 MB)
-
webm
Full Size VP8 Video (12.8 MB)
-
ogv
Full Size Theora Video (25.4 MB)
Hi, OutputConfigurationProviderClass is not being generated in Eclipse version 3.7 . Any idea to get this class in this version.
Thanks
Hi,
could you please provide the Xtext version you are using?
Cheers
I am using Xtext version 2.0.1. If I try to upgrade the version, I am getting compatibility error.
In Xtext version 2.0.1 you probably use MWE workflow files to run the generator. In this case you define your output configurations (called outlets) as follow
component = org.eclipse.xtext.generator.GeneratorComponent { ... outlet = { // Default output configuration path = targetDir } outlet = { // Custom output configuration path = targetDir outletName = "XML-FILES" } }Then within your generator you can specify the letout to use
Hi Boris,
Thanks for the reply, I am new to xtext and when I added above block I got below Runtime Exception :
0 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Registering platform uri 'C:\xtext-eclipse-3.7'
1218 [main] ERROR mf.mwe2.launch.runtime.Mwe2Launcher - Problems running workflow org.xtext.example.mydsl.GenerateMyDsl: no 'slot' has been configured.
java.lang.RuntimeException: Problems running workflow org.xtext.example.mydsl.GenerateMyDsl: no 'slot' has been configured.
Appreciate your help
Cheers
Below is the MWE code I am using:
module org.xtext.example.mydsl.GenerateMyDsl import org.eclipse.emf.mwe.utils.* import org.eclipse.xtext.generator.* import org.eclipse.xtext.ui.generator.* var grammarURI = "classpath:/org/xtext/example/mydsl/MyDsl.xtext" var file.extensions = "mydsl" var projectName = "org.xtext.example.mydsl" var runtimeProject = "../${projectName}" Workflow { bean = StandaloneSetup { scanClassPath = true platformUri = "${runtimeProject}/.." } component = DirectoryCleaner { directory = "${runtimeProject}/src-gen" } component = DirectoryCleaner { directory = "${runtimeProject}.ui/src-gen" } component = org.eclipse.xtext.generator.GeneratorComponent { outlet = { // Custom output configuration path = "read-src" outletName = "XML-FILES" } } component = Generator { pathRtProject = runtimeProject pathUiProject = "${runtimeProject}.ui" pathTestProject = "${runtimeProject}.tests" projectNameRt = projectName projectNameUi = "${projectName}.ui" language = { uri = grammarURI fileExtensions = file.extensions // Java API to access grammar elements (required by several other fragments) fragment = grammarAccess.GrammarAccessFragment {} // generates Java API for the generated EPackages fragment = ecore.EcoreGeneratorFragment { // referencedGenModels = " // platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel, // platform:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel // " } // Serializer 2.0 fragment = serializer.SerializerFragment {} // the serialization component (1.0) // fragment = parseTreeConstructor.ParseTreeConstructorFragment {} // a custom ResourceFactory for use with EMF fragment = resourceFactory.ResourceFactoryFragment { fileExtensions = file.extensions } // The antlr parser generator fragment. fragment = parser.antlr.XtextAntlrGeneratorFragment { // options = { // backtrack = true // } } // java-based API for validation fragment = validation.JavaValidatorFragment { composedCheck = "org.eclipse.xtext.validation.ImportUriValidator" composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator" } // scoping and exporting API // fragment = scoping.ImportURIScopingFragment {} // fragment = exporting.SimpleNamesFragment {} // scoping and exporting API fragment = scoping.ImportNamespacesScopingFragment {} fragment = exporting.QualifiedNamesFragment {} fragment = builder.BuilderIntegrationFragment {} // generator API fragment = generator.GeneratorFragment { generateMwe = true generateJavaMain = true } // formatter API fragment = formatting.FormatterFragment {} // labeling API fragment = labeling.LabelProviderFragment {} // outline API fragment = outline.OutlineTreeProviderFragment {} fragment = outline.QuickOutlineFragment {} // quickfix API fragment = quickfix.QuickfixProviderFragment {} // content assist API fragment = contentAssist.JavaBasedContentAssistFragment {} // generates a more lightweight Antlr parser and lexer tailored for content assist fragment = parser.antlr.XtextAntlrUiGeneratorFragment {} // generates junit test support classes into Generator#pathTestProject fragment = junit.Junit4Fragment {} // project wizard (optional) // fragment = projectWizard.SimpleProjectWizardFragment { // generatorProjectName = "${projectName}" // modelFileExtension = file.extensions // } // provides the necessary bindings for java types integration fragment = types.TypesGeneratorFragment {} // generates the required bindings only if the grammar inherits from Xbase fragment = xbase.XbaseGeneratorFragment {} // provides a preference page for template proposals fragment = templates.CodetemplatesGeneratorFragment {} // rename refactoring fragment = refactoring.RefactorElementNameFragment {} // provides a compare view fragment = compare.CompareFragment { fileExtensions = file.extensions } } } }Hi Kunal,
you alter wrong MWE workflow file.
Normally with Xtext 2.0 you have two MWE files. First MWE workflow (that you posted here) is used to generate java and other artifacts from your
MyDsl.xtextgrammar. We will leave it alone for now.The second workflow is used to generate code from your DSL. You will find this MWE file in the same directory your generator class located in. Within this MWE file you can define custom outlets, like I showed in my previous comment.
Thanks Boris....
First sign in through GitHub to post a comment.