快速业务通道

在Eclipse中创建新的重构功能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
ON_UNIT) {    element = element.getParent();    if (element == null)    return;   }   if (element.getElementType() == IJavaElement.COMPILATION_UNIT)  {    if (!element.isReadOnly())    compilationUnits.add(element);   }   if (element.getElementType() <  IJavaElement.COMPILATION_UNIT)    findWritableCompilationUnits(element);   }

接着完成checkInitialConditions函数,实现初始检查的具体操作。作为示 例,在本文工程中我们不进行任何具体的检查操作,只简单得给出初始检查成功 的信息,返回RefactoringStatus.

INFO以使重构操作继续执行。checkInitialConditions函数代码如下:

清单 7

public RefactoringStatus checkInitialConditions (IProgressMonitor pm)    throws CoreException, OperationCanceledException {   return RefactoringStatus.createInfoStatus("Initial Condition  is OK!");   }

接着完成checkFinalConditions函数,实现获得用户输入参数后的后续检查 操作。在本文工程中,我们首先收集所有需要添加注释的以test 开头的方法, 判断是否不存在这样的方法,如果不存在给出出错信息,返回 RefactoringStatus.FATAL以结束重构操作;如果存在这样的方法,则给出后续 检查成功的信息,返回RefactoringStatus.

INFO。checkFinalConditions函数代码如下:

清单 8

public RefactoringStatus checkFinalConditions (IProgressMonitor pm)    throws CoreException, OperationCanceledException {   collectChanges();   if (fChangeManager.size() == 0)    return RefactoringStatus     .createFatalErrorStatus("No testing methods found!");   else return RefactoringStatus.createInfoStatus("Final  condition is OK!");   }

最后,创建Change对象的createChange函数是整个重构操作中最核心的代码 ,它的实现将在下面章节中介绍。

6 使用AST构造Change对象

在Eclipse中创建新的重构功能(6)

时间:2010-12-02 IBM 志甘 春郭迎 林刘岳

当我们找到了修改的位置时,我们有两个选择:

1. 通过IScanner接口扫描代码,然后通过IBuffer接口直接修改代码

2. 通过遍历和编辑AST树进行结构化的修改

DeveloperWorks提供的文章《扩展Eclipse的Java开发工具》中,给出了使用 IBuffer接口的例子。现在我们要讲述使用AST来遍历和修改Java源代码的方法。

AST是abstract syntax tree的缩写。它是Eclipse中的Java开发环境(JDT)为 我们提供的极为强大的源代码解析和编辑工具。

在使用AST树提供的功能之前,我们首先要创建AST树。由于AST树的构建是一 项费时的操作,JDT缺省情况下不将源代码解析为AST树。下面的代码演示了获得 一个ICompilationUnit对应的AST树的过程。在JDT提供的API中, ICompilationUnit接口用于表示一个可以被编译的源代码文件。在我们提供的例 子程序中,我们通过下面的代码将整个文件解析成为了一颗AST树。

清单 9

ASTParser parser = ASTParser.newParser (AST.JLS3);   parser.setSource(cu);   ASTNode root = parser.createAST(null);

AST树中的每个节点都是ASTNode类型,通过Visit模式,我们可以访问一个 ASTNode包含的所有节点。下面的代码演示了访问一个AST节点并获得其中所有的 MethodDeclaration节点的方法。

清单 10

private void getMethods(ASTNode cuu, final  List methods) {   cuu.accept(new ASTVisitor() {    public boolean visit(MethodDeclaration node) {    methods.add(node);    return f

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