使用JET自动生成代码
在Eclipse的EMF里提供了一个根据模板生成代码的机制:JET。EMF就是使用JET来生成代码的。JET可以根据定制的生成模板生成最终的文本(代码)。这一节大致讲一下怎么使用JET来生成代码。?
一、原理
JET的原理很简单:通过一个定义的模板,生成一个中间类,这个中间类有一个generate()方法,用来生成最终的一串字符串(也就是你想生成的代码)。generate()方法里就是使用一个StringBuffer对象,根据模板的内容来构造出一个字符串,最后返回在。?
所以我们生要明白,总共有两个东西在起作用:模板和中间类。
其实还有一个,就是用来生成中间类和执行类的后台引擎。不过从用户的角度来看,通常只能知道模板的存在。?
二、模板格式
首先介绍一下模板的格式。?
要把一个文件作为JET的模板文件,则它的文件名的后缀需要以"jet"结尾,例如:test.javajet、helloWorld.xmljet等。这里后缀的前半段可以随意,不过通常用来表示生成的内容格式,例如你要生成的是java代码,则通常是*.javajet;如果想生成xml文件内容,则格式通常是*.xmljet。?
要使用jet,首先我们就得先准备一个这样的模板。
上面讲了模板文件名字的约束,下面来讲一下模板文件的内容格式。?
1、???????文件头???Jet文件头需要如下声明:
else{???
注意:有几个注意事项:
1、??需要注意空格的存在,例如“hello world”和”??hello world”生成的结果不一样。
2、??构造代码时,需要注意代码定义的完整性,以及代码与非代码片段的区分。?
?
二、JET引擎?
一般来说,我们都是在程序中使用JET去生成代码,所以当然需要有通过调用程序的方式来生成。这就要用到JET引擎。?EMF中默认提供了JET的引擎类:JETEmitter
我们可以如下例如:
JETEmitter emitter = new JETEmitter(templateURI);
有了这个对象后,就可以直接调用它的方法来生成代码:
emitter.generate(monitor, arguments);?
这里的arguments是一个数组对象,也就是最后会传到模板中的那个argument。最后方法的返回对象是一个String。?
有时我们会传入一些只在当前插件中才存在对象,所以需要告知JET引擎这个对象类的所在,我们需要如下使用:?
emitter.addVariable(variableName, pluginID);?
这样,id为pluginID的插件就会被作为依赖项加入。当然,可以加入一个或多个。
?
http://liugang594.iteye.com/blog/154065