快速业务通道

基于Eclipse平台的代码生成技术 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
%=s%>

基于Eclipse平台的代码生成技术(4)

时间:2012-02-26 IBM 吕锋 于沛 王轩

经 JET 编译后的模板文件代码内容如下,其中红色文字为利用骨架合并的效果。

清单 6. 模板文件代码

package demo.translated;   import java.util.Date;   import java.util.List;   public class Demo2 {   protected static String nl;   public static synchronized Demo1 create(String lineSeparator)   {   nl = lineSeparator;   Demo2 result = new Demo2();   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;   protected final String TEXT_5 = NL;   public String s = "Mission Completed!";   private Date getCurrentDate() {   return new Date();   }   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(getCurrentDate());   stringBuffer.append(TEXT_3);   stringBuffer.append(TEXT_4);   stringBuffer.append(s);   stringBuffer.append(TEXT_5);   return stringBuffer.toString();   }   }

在这里有一点需要注意,JET 对模板文件的编译只会将其内容编译到最后一个方法中。因此,骨架最后一个方法必须为 public String generate(Object argument),若将其他方法放在最后,代码执行类在将模板编译后与骨架进行合并时会出错。

示例 3 使用 JMerger 实现代码合并(demo3)

JET 可以根据事先编辑好的模板文件生成代码,并且还支持重复生成。实际项目开发中,有时需要将自动生成的代码进行手工修改,这时如果因某种原则需重新执行代码生成,会导致手工编写的代码丢失。在 JET 中解决此类问题的方法是代码合并技术,它能将自动生成的内容和手工编写的内容区分开,在必要时进行合并,JET 中负责合并代码的类是 JMerger 。本示例讨论利用 JMerger 对代码进行合并的技术。

基于Eclipse平台的代码生成技术(5)

时间:2012-02-26 IBM 吕锋 于沛 王轩

执行 JET 引擎的程序代码如下。

清单 7. JET 引擎的程序代码

// 模板文件所在插件项目的名称   String pluginId = "demo3";   // 模板文件在项目中的路径及文件名    String uri = Platform.getBundle(pluginId).getEntry("/").toString();   uri += "templates/demo4.jet";   // 声明 JETEmitter   JETEmitter emitter = new JETEmitter(uri);   IProgressMonitor progress = new NullProgressMonitor();   // 声明一个 Map 作为数据变量集的 container   Map argument = new HashMap();   argument.put("fileName", fileName);   argument.put("className", fileName.substring(0, fileName.indexOf(".")));   // 对当前模板进行转换并将需要输出成实际文件的内容返回以便通过输出流输出   String result = emitter.g

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号