Skip to content

Instantly share code, notes, and snippets.

@knutwannheden
Created January 31, 2013 10:55
Show Gist options
  • Save knutwannheden/4682105 to your computer and use it in GitHub Desktop.
Save knutwannheden/4682105 to your computer and use it in GitHub Desktop.
MWE2 workflow as an Xtend class
package org.xtext.example.mydsl
import org.eclipse.emf.mwe.utils.DirectoryCleaner
import org.eclipse.emf.mwe.utils.StandaloneSetup
import org.eclipse.emf.mwe2.runtime.workflow.WorkflowContextImpl
import org.eclipse.xtext.generator.Generator
import org.eclipse.xtext.generator.LanguageConfig
import org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment
import org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
import org.eclipse.xtext.generator.resourceFactory.ResourceFactoryFragment
import org.eclipse.xtext.generator.serializer.SerializerFragment
class GenerateMyDsl extends XtendWorkflow {
@Binding val grammarURI = "classpath:/org/xtext/example/mydsl/MyDsl.xtext"
@Binding val fileExtensions = "mydsl"
@Binding val projectName = "org.xtext.example.mydsl"
@Binding val String runtimeProject = '''../«projectName»'''
@Binding val generateXtendStub = true
new() {
beans += new StandaloneSetup => [
scanClassPath = true
platformUri = '''«runtimeProject»/..'''
// The following two lines can be removed, if Xbase is not used.
addRegisterGeneratedEPackage("org.eclipse.xtext.xbase.XbasePackage")
addRegisterGenModelFile("platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel")
]
components += new DirectoryCleaner => [
directory = '''«runtimeProject»/src-gen'''
]
components += new DirectoryCleaner => [
directory = '''«runtimeProject».ui/src-gen'''
]
components += new Generator => [
pathRtProject = runtimeProject
pathUiProject = '''«runtimeProject».ui'''
pathTestProject = '''«runtimeProject».tests'''
projectNameRt = projectName
projectNameUi = '''«projectName».ui'''
languages += new LanguageConfig => [
autoInject
uri = grammarURI
// Java API to access grammar elements (required by several other fragments)
fragments += typeof(GrammarAccessFragment).getInstance
// generates Java API for the generated EPackages
fragments += new EcoreGeneratorFragment().autoInject => [
// referencedGenModels = "
// platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel,
// platform:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel
// "
]
// the old serialization component
// fragments += typeof(ParseTreeConstructorFragment).getInstance
// serializer 2.0
fragments += typeof(SerializerFragment).getInstance => [
generateStub = false
]
// a custom ResourceFactory for use with EMF
fragments += typeof(ResourceFactoryFragment).getInstance
// The antlr parser generator fragment.
]
]
}
def static void main(String[] args) {
new GenerateMyDsl().run(new WorkflowContextImpl)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment