8. Model Navigation
val eClasses = myEPackage.EClassifiers.filter(EClass)
val abstractEClasses = eClasses.filter[isAbstract]
val namesOfAbstractClasses = abstractEClasses.map[name]
val commaSeparatedNamesOfAbstractClasses = namesOfAbstractClasses.join(',')
CommaSeparatedNamesOfAbstractClasses
Model Navigation
29. Use incremental code generators
Fast turnarounds
Just having it run on a server is no option
30. The m - 1 Problem
BeanBeanObject
Resource
Configuration File
BeanBeanObject
Resource
BeanBeanObject
Resource
ResourceSet
31. ResourceSet
The m - 1 Problem
BeanBeanObject
Resource
Configuration File
BeanBeanObject
Resource
BeanBeanObject
Resource
It’s worth to think about a
merging strategy
33. Incremental code generators in Xtext
// generator API
fragment = generator.GeneratorFragment auto-inject {}
class MyDslGenerator implements IGenerator {
override void doGenerate(Resource resource, IFileSystemAccess fsa) {
// fsa.generateFile('greetings.txt', 'People to greet: ' +
// resource.allContents
// .filter(typeof(Greeting))
// .map[name]
// .join(', '))
}
}
34. Incremental code generators in Xtext
// generator API
fragment = generator.GeneratorFragment auto-inject {}
class MyDslGenerator implements IGenerator {
override void doGenerate(Resource resource, IFileSystemAccess fsa) {
// fsa.generateFile('greetings.txt', 'People to greet: ' +
// resource.allContents
// .filter(typeof(Greeting))
// .map[name]
// .join(', '))
}
}
Customisable mechanism is taking care to
recompile affected resources
35. Incremental code generators in Xtext
// generator API
fragment = generator.GeneratorFragment auto-inject {}
class MyDslGenerator implements IGenerator {
override void doGenerate(Resource resource, IFileSystemAccess fsa) {
// fsa.generateFile('greetings.txt', 'People to greet: ' +
// resource.allContents
// .filter(typeof(Greeting))
// .map[name]
// .join(', '))
}
}
http://www.eclipse.org/Xtext/documentation/
350_continuous_integration.html
Get Maven integration for free
36. more than just a code-gen language…
http://www.xtend-lang.org/
37. Why „for Non-Xtext
Models“?
• Xtext provides an infrastructure to generate code
from Xtext DSL files
• Proper setup of Guide required
• Default Xtext Guice modules are only suitable for
Xtext DSLs
• Not much code generators for non-Xtext models
known in open source projects
45. 1 Xtext Framework
14 MB of Libraries
1 (EMF) UML Model
1 MWE2 Workflow
1 Guice Configuration
1 Standalone Setup
1 Output Configuration
some Xtend Templates
Generator with
Xtext Framework
on EMF UML Model
46. Xtext’s Generator Support
• IGenerator Interface
• MWE components for reading models and executing
the generator
• Dependency Injection support
• Eclipse build integration, Incremental build
• Different file access for plain Java and EFS
• Outlets
47. Generic Resource Service
• Package org.eclipse.xtext.resource.generic contains
support for generic resources
• Requires EMF based models
• Makes resources for non-Xtext based EMF models
available for the Xtext infrastructure
• Index
• compute IResourceDescription
• create IEObjectDescription