快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
alse;    }   });   }

在收集到了所有的MethodDeclaration节点之后,我们就可以通过向AST树中 插入和删除节点或者修改已有的节点的方法来修改AST树了。下面的代码演示了 使用AST工具为方法添加@Test Annotation的功能。

清单 11

private boolean collectChanges(CompilationUnit  root,    MethodDeclaration method) {   if (method.getName().getFullyQualifiedName().startsWith("test"))  {    AST ast = method.getAST();    if (needTimeout) {    NormalAnnotation na = ast.newNormalAnnotation();    na.setTypeName(ast.newSimpleName("Test"));    MemberValuePair pair = ast.newMemberValuePair();    pair.setName(ast.newSimpleName("timeout"));    pair.setValue(ast.newNumberLiteral("500"));    na.values().add(pair);    method.modifiers().add(0, na);    } else {    MarkerAnnotation na = ast.newMarkerAnnotation();    na.setTypeName(ast.newSimpleName("Test"));    method.modifiers().add(0, na);    }    return true;   }   return false;   }

在 Refactoring框架中,我们要求对AST树的修改并不立刻反映到源代码中。 相反,我们需要一个能记录整个修改过程的Change对象。Refactoring框架将利 用这个Change对象来显示Priveiw窗口、进行Undo和Redo等操作。大致上,我们 记录对一个AST树的修改从而生成Change对象的过程如以下代码所示。

清单 12

root.recordModifications();    //在这里修改AST树…   TextEdit edits = root.rewrite(document, cu.getJavaProject()    .getOptions(true));   TextFileChange change = new TextFileChange("", (IFile)  cu    .getResource());   change.setEdit(edits);

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

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

最后,由于Refactoring类的createChange方法仅返回一个Change对象,如果 我们需要对多个源代码文件进行修改,我们可以利用 CompositeChange类将多个 Change对象封装成一个Change对象。这个过程可能类似如下代码所执行的流程

清单 13

public Change createChange(IProgressMonitor pm)  throws CoreException,    OperationCanceledException {   Change[] changes = new Change[fChangeManager.size()];   System.arraycopy(fChangeManager.toArray(), 0, changes, 0,    fChangeManager.size());   CompositeChange change = new CompositeChange(    "Add @Override Annotation", changes);   return change;   }

7 扩展RefactoringWizard 框架

Eclipse中的RefactoringWizard框架扩展了Eclipse的Wizard框架,关于 Wizard框架的介绍可以在Eclipse的帮助系统中找到,这里我们仅从OO设计和架 构的角度探讨一下RefactoringWizard框架。

我们从Wizard相关的几个类开始:

1. WizardPage类

WizardPage是一个包含了多个界面元素(比如文本框Text,按钮Button)的 一个界面组合部分。各个Page之间是独立的,是可以动态加载的。WizardPage类 的职责有:

组合SWT界面元素,构造出一个界面页。

定义本身界面元素的操作行为。

在 RefactoringWizard框架中预设了两个通用的属性页:PreviewWizardPage 和ErrorWizardPage。PreviewWizardPage类是用来预览重构后的修改,对比代码 或其他资源的变化。ErrorWizardPage类是用来处理条件检查及错误状态通知的 。我们只需扩展RefactoringWizard框架就可以自

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