快速业务通道

扩展Eclipse的Java开发工具 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
口呢?

您将发现这出奇地简单,不过可能在直觉上不那么明显。JDT 的 Java 模型在大多数实践情况下都是“只读”的。通过与 Java 编译器的集成协作,给定元素的底层 Java 源代码进行的更改就与 Java 模型的其余部分的更改同步了。实际上,您要做的就是更新 Java 源代码,而对模型所作的其余必要更改就传送给任何依赖它们的元素中。例如,每当 Java 源代码/Java 模型发生更改时,JDT 的索引会自动更新,所以仍旧可以快速执行搜索,重新编译从属类(按照项目特性中指定的 Java 构建路径所指示的),等等。

可以大松一口气了!以下就是 Java 模型是插件集成之关键的原因所在:Java 模型提供了整个 Java 环境的常见的内存中共享的模型,它的范围从一个项目,一直到其所有被引用的库,所有这些都不要您费心去操作文件系统中的 .java 文件、 .class 文件以及 .jar 文件。您可以将精力集中于高级模型,而让 JDT 处理这其中的许多杂乱细节。

还不能确信它很容易?清单 9 包含了这个解决方案的核心代码的一小部分,它是从提供操作的 run 方法上抽取出的,并出于可读性考虑,稍作了简化:

清单 9. selectionChanged 方法,小型解决方案

public void selectionChanged(IAction action, ISelection selection) {   IMember member = (IMember)     ((IStructuredSelection) selection).getFirstElement();   ICompilationUnit cu = member.getCompilationUnit();   if (cu.isWorkingCopy()) {    IBuffer buffer = cu.getBuffer();    buffer.replace(...);    cu.reconcile();   } }

似乎有点虎头蛇尾,不是吗?对您提供的操作提供了选中的成员,向它请求其父容器(Java .class 或 .java 文件的模型,用 JDT 的说法,全都称为 编译单元),因为其父容器管理底层源代码,验证该成员是否属于“未提交的” Java 模型(换句话说,它目前在编辑器中是打开的),然后修改作为缓冲器返回的源代码。 IBuffer 接口类似于 StringBuffer ,其原理不同之处在于,更改与编译单元相关的缓冲区更新了 Java 模型的对应元素。对 reconcile 的最终调用告知 JDT 去通知其它相关各方(象 Package Explorer 视图):您的模型更新已准备好作为公共消费品。

您一定注意到上述代码中的省略号。在那里,您必须分析源代码本身以进行修改。同样,JDT 会提供帮助,正如我们将在下一个问题中看到的。

扩展Eclipse的Java开发工具(9)

时间:2011-02-23 IBM Dan Kehn

怎样分析 Java 代码以进行修改?

JDT 提供了几个工具来帮助您分析代码。本文有意选择了最简单的 IScanner 接口进行演示,它的作用域也最有限。这个接口属于 JDT 工具箱,可以通过 JDT 的 ToolFactory 类访问它。其 createScanner 方法返回一个扫描程序,该扫描程序会简化对一串 Java 代码作标记的工作。它不处理任何特别困难的操作,只是对所返回的标记进行简单的解析和分类。例如,它指出下一个标记是 public 关键字,其后的标记是一个标识符,再后面的标记是左圆括号,等等。随后,只有当您希望分析一小段代码(您明确理解想要在这段代码中得到什么)时,这个扫描程序才是合适的。您决不会使用扫描程序分析整个 Java 源代码;因为您会转而使用一些对编译器迷而言十分熟悉的工具:JDT 的抽象语法树(Abstract Syntax Tree,AST)框架。

与简单的扫描程序不同,AST 理解语言元素(它们不再只是“标记”)之间的关系。它可以识别象局部变量、实例变量、表达式以及 if 语句等六十多种不同的语言元素。它将帮助您进行涉及范围广泛的重构,或难以满足对标记进行一对一分类的模糊程度特别高的重构。要更清晰地了解何时使用扫描程序与

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号