Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|Comet程序开发
您现在的位置: 天极网 > 开发频道 > 在Eclipse中创建新的重构功能
全文

在Eclipse中创建新的重构功能

2005-12-05 15:54 作者: 甘志 郭迎春 刘岳林 出处: ibm 责任编辑:>方舟
  扩展Refactoring类

  通过前面系统构架的介绍,大家知道了Refactoring和RefactoringWizard是完成EClipse重构功能的基础类。在创建好插件工程后,我们就通过扩展Refactoring来实现具体的功能。

  Refactoring是所有支持代码转化的类的抽象父类,它在整个流程中与RefactoringWizard交互以完成重构的功能,起着非常重要的作用。这些类需要提供以下两类方法:

  用于条件检查的方法,判断重构操作大体而言能否执行,以及具体的转化能否完成;

  创建Change对象的方法,Change对象描述了所有将要执行的对当前代码的修改操作。

  Refactoring类的典型流程如下所示:

  1. 具体的Refactoring类被创建。

  2. 获得用户选择的要进行重构的对象,初始化该Refactoring类。这个由具体的实现类给出相应的方法。

  3. 在重构操作开始执行时,首先调用Refactoring的checkInitialConditions(IProgressMonitor) 基于用户选择的对象做一个的初始检查,这个通常由界面自动执行。返回RefactoringStatus.FATAL表明初始检查没有通过,重构操作不能继续。

  4. 获得进行重构的其他参数,比如,对重命名操作来说就是指新名字。这个通常是由界面根据用户的输入提供的。由具体的实现类给出相应的方法。

  5. 获得用户输入参数后,调用Refactoring的checkFinalConditions(IProgressMonitor)进行剩下的检查,这个通常由界面自动执行,返回RefactoringStatus.FATAL表明最后的检查没有通过,重构操作不能继续。

  6. 调用Refactoring的createChange(IProgressMonitor)获得Change对象,这个通常由界面自动执行,界面可以根据Change对象显示预览界面。

  基于以上的介绍,为了实现本文工程中的重构操作,我们需要扩展Refactoring类,为它增加一个构造函数,并且具体实现checkInitialConditions、checkFinalConditions和createChange三个函数。

  首先通过菜单File -> New->Class弹出创建类的对话框,输入包名manage.annotation.refactor,类名AnnotationRefactoring,输入父类org.eclipse.ltk.core.refactoring.Refactoring,选中"继承抽象方法"复选框,点击完成按钮,一个扩展了Refactoring的最基本的类AnnotationRefactoring就被创建出来了。

  首先为其增加构造函数,以用户选择的Java模型元素作为参数。Refactoring分析这个参数以得到所有相关的可写Java文件,作为重构操作的对象,如果该模型元素包含在Java文件中,则找到包含它的文件节点;如果该模型元素包含Java文件,则找到它的所有子Java文件。构造函数代码如下:

  清单 6

public AnnotationRefactoring(IJavaElement element) {
 while (element.getElementType() > IJavaElement.COMPILATION_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函数是整个重构操作中最核心的代码,它的实现将在下面章节中介绍。

共5页。 9 1 2 3 4 5 :
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml