JET学习笔记 (五)

来源:互联网 发布:2016古道社区网络黑市 编辑:程序博客网 时间:2024/06/03 13:16

一些JET类

JET包中的类可以被大致的分为两组:

(1)     把模板转换成模板实现类的低层次的工具类。JETCompiler类将这些低级类聚集在一起来提供模板转换的简单API

(2)     建在JETCompiler顶部来完成用户任务的上层类。在第一部分我们已经使用过JETNature和JETBuilder。其他上层类有CodeGen和JETEmitter。

低层次的工具类不再在此深入讨论。要了解org.eclipse.emf.codegen插件所有类的描述,可参考JET API Overview。在本章节的剩余部分我们会探讨一些高层类。

  Org.eclipse.emf.codegen.jet.JETEmitter

JETCompiler 是模板转换的核心类。这个类负责将模板转换成模板实现类。实际的转换工作被派给同一个包的其他类。客户为特殊的模板创建一个JETCompiler对象,然后通过generate方法调用parse方法来将结果的模板实现类的源代码写入到指定流。

Org.eclipse.emf.codegen.jet.JETEmitter

   JETEmitter为用户提供了方便的高层API。这个类中的generate方法把模板转换和文本生成整合在一步中。通过处理模板转换和编译实现类的细节,JETEmitter可以使你只需关注实现类的输出。

   另一个对JETEmitter的理解是它将转换的过程抽象化,假使你可以直接通过模板生成文本。遵循抽象规则,我们有时不能这样抽象,在“JETEmitter疑难问题”章节会指出你需注意的一些地方。

   JETEmitter是我们在插件中需要用到的类,所以我们在此会更进一步了解其细节。

   JETEmitter对象通过生成代码的模板URI构建。只要有可用的协议处理程序,任何类型的URI都可以使用。这说明file:/ uris, ftp:/ uris and http:/ uris都可以使用。Eclipse为platform:/base/, platform:/plugin/, platform:/fragment/ and platform:/resource/ uris添加了特殊的协议处理程序,所以插件可以使用platform:/resource/myproject/myfolder/mytemplate.jet形式的URI来指定模板文件。注意:Eclipse3.0向其特定协议列表中引入了bundleentry。它应该用在Eclipse元素的引用中,比如插件和功能。

   在插件示例中,我们会把模板文件分至插件,所以模板文件位置会是位于Eclipse plugins文件夹下的myplugin/templates/文件夹。以下的代码可以用来指定位置并从这个文件夹中生成模板。

 String pluginId = "myplugin.id";

 String base = Platform.getBundle(pluginId).getEntry("/").toString();

 String uri = base + "templates/myTemplate.javajet";

 JETEmitter emitter = new JETEmitter(uri);

 String generatedText = emitter.generate(new Object[] {parameter});

创建JETEmitter对象后,客户端可以使用该对象调用generate方法生成文本。generate方法将会执行下列步骤:

1)  在工作空间中创建一个叫做.JETEmitters 的工程

2)  通过添加Java Nature和路径变量准备工程

3)  在 .JETEmitters工程中将模板转换成模板实现类的代码。

4)  将实现类的代码编译成java的.class文件

5)  调用实现类中的generate方法并且生成文本,以字符串形式返回

.JETEmitters是工程在模板转换时的默认名称。这个值可以通过setProjectName方法修改。

我们的示例插件使用JETEmitter并且在工作空间中将生成的代码保存为java源文件。下图展示了使用JETEmitter生成源代码的步骤。

 

原创粉丝点击