基于 Eclipse 平台的代码生成技术
2010-07-02 00:00:00 来源:WEB开发网下文用三个示例来演示 JET 的功能和用法。示例 1 演示使用 JETEmitter 类生成简单的文件。示例 2 利用 JET 中的骨架 (skeleton) 技术对模板编译后的模板执行类进行方法定制。示例 3 利用类 JMerger 与合并规则达到自动生成代码与手工代码合并的效果。
示例 1 简单的文件生成(demo1)
1 编写模板,JET 语法与 JSP 语法很相似。下面是一个最简单的带有参数的模板文件 demo1.jet 。
清单 1. Demo1.jet
<%@jet package="demo.translated" imports="java.util.List" class="Demo1"%>
Hello, <%=((List)argument).get(0).toString()%>!
The current time is <%=new java.util.Date()%>.
模板文件一般放在插件项目的 templates 目录下,模板中的 argument 是 JET 的隐含变量,它代表用户的输入参数 , 一般是数据变量集。
模板的第一行表示生成内容的包路径为 demo.translated,模板执行类是 Demo1.java,该类 import java.util.List 。
第二行和第三行是 JET 需要生成的文件内容,使用 <% …… %> 包括代码,使用 <%= …… %> 打印表达式的值,与 JSP 类似,正确地使用 <% …… %> 标签就可以添加任何逻辑循环或结构,其内容很好理解,但 JET 生成代码中,常量字符串最终要以变量的形式存在,于是其生成内容如下:
清单 2. 生成内容
package demo.translated;
import java.util.List;
public class Demo1
{
protected static String nl;
public static synchronized Demo1 create(String lineSeparator)
{
nl = lineSeparator;
Demo1 result = new Demo1();
nl = null;
return result;
}
public final String NL = nl == null ? (System.getProperties().
getProperty("line.separator")) : nl;
protected final String TEXT_1 = "Hello, ";
protected final String TEXT_2 = "!" + NL + "The current time is ";
protected final String TEXT_3 = ". ";
protected final String TEXT_4 = NL;
public String generate(Object argument)
{
final StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(TEXT_1);
stringBuffer.append(((List)argument).get(0).toString());
stringBuffer.append(TEXT_2);
stringBuffer.append(new java.util.Date());
stringBuffer.append(TEXT_3);
stringBuffer.append(TEXT_4);
return stringBuffer.toString();
}
}
调用 JET 执行模板生成操作的代码如下:
更多精彩
赞助商链接