* Reconciliers are very difficult pieces of code. And they are only a “workaround”, it is not very agile
* Advantage over modifying generated code → Less lines to maintain → Default behavior still works/customization is isolated → if Generator changes drastically, default still work, customization will show you compile errors => easier to debug
Iterative and agile principles applied to code generationMickael Istria, EclipseCon 2012, CC-BY 2.0@mickaelistria for Tweeters
You need something not supported by the generation framework...
You do not really own the generated code.Its internals are owned by the generation framework.
Modifying generated code does not scaleForces you to maintain generated classes, reducebenefits of generation.Can cause conflicts between configuration andmodified code.About @generated NOT: Do you trust yourgeneration framework reconcilier? I dont.Does not scale through generator upgrades.
Generation framework usually guarantee conformance to an API, to a specification to patterns. GMF Tooling guarantees results conform to GMF Runtime API and generated classes follow patterns Runtime API Implements Generator Generation Config Generated Code
Use generated code as an API for your custom code The “generation-gap pattern”http://heikobehrens.net/2009/04/23/generation-gap-pattern/
Runtime API ImplementsGenerator Generation Config Generated Code $ Clazz extends and @overrides $$$$$ CustomClas s $
Runtime API ImplementsGenerator Generation Config Generated Code $ Clazz extends and @overrides $$$$$ FavoriteFramework uses MyClass(not supported by generator)
How can I consume custom in generated without customizing all code depending on custom? How to re-inject your custom code to your generated noodle-plate ? Leverage underlying APIs.
GMFGMF editors follows a declarative “component- based” architecture. Most of default behavior classes can be replaced by custom via Eclipse extensions.
XTextUsing Google Guice binding and DependencyInjection.http://www.eclipse.org/Xtext/documentation/1_0_1/xtext.html#dependencyInjection
IN CASE OF EMERGENCY CUSTOMIZE GENERATOR ITSELFGMF Tooling has extendible Xpand templates.Xtext has a smart MWE workflow and Xtend templatesEMF has overridable JET templates