GMF的快速开发体大部分体现在它的智能代码生成,即model to model 之后在再引入可编程的模板语言Xpand生成代码。Xpand是oaw基于Antlr开发的一个DSL语言,GMF对它进行了适当的简化与封装,但语法,生成器并没有改变。
公式:
GMFGEN model+Xpand template+Code Generator->Graphical Editing Plugin
其中,gmfgen可以定制,xpand template也可以定制,code generator如果修改一下Antlr定义还是可以定制,只不过高阶一点。
gmfgen是一个ecore模型,这里不描述,而code generator比较复杂,略。
使用动态模板省事步骤:
- 打开Plug-ins View,将org.eclipse.gmf.codegen导出为source project,将其templates目录拷贝到某个gmf项目中,假设这个项目名称为a.b.c。
- 通过gmfgraph+gmftool+gmfmap生成gmfgen模型,修改类GenEditorGenerator的dynamicTemplates属性为true,然后设置Template Directory为/a.b.c/templates。
- 视自己的需要修改xpt文件,再次调用generate diagram code之后,改过的模板将会被调用。
FAQ:
1 保护区域Protect Region
某些方法可能有需要自定义,为避免Xpand覆盖,使用PR来保护,其中CSTART为保护区开始标识符,CEND为结束符,ID的作用主要是用来被ProtectRegionResolver扫描使用的,在一个生成文件中,ID就如同EMF XMI的ID一样,是唯一的。