如何使用JDT以编程方式重命名方法

时间:2012-10-19 06:10:24

标签: java refactoring abstract-syntax-tree eclipse-jdt

我的目标是以编程方式为Java源文件中的方法调用Refactor >> Rename Eclipse命令。重命名方法也应该将更改应用于使用/引用此方法的所有实例。

我相信JDT有一个Refactoring API,但无法找到相同的文档或教程。

有人可以指出我正确的方向。

编辑:运行时不需要进行更改。

2 个答案:

答案 0 :(得分:4)

我认为你最有希望的方法是转到eclipse源代码。

  1. 使用源代码下载所需的版本。特别是,您需要JDT插件的源代码,它包含在“经典”版本中。以下所有内容均基于4.2.1
  2. 启动到空白工作区。
  3. 文件 - >导入:插件和碎片
  4. 从“活动目标平台”,“从所有选择...”,“包含源文件夹的项目”
  5. 导入
  6. 至少选择org.eclipse.jdt.ui和org.eclipse.ltk.core.refactoring。
  7. Refactor >> Rename对应的起点是org.eclipse.jdt.ui.actions.RenameAction。这是整个重命名重构,但它可以重命名从方法到文件的任何内容。与您更相关的是RenameSupport.create(IMethod, String, int)

    您可以看到在RenameRefactoringRenameVirtualMethodProcessor处理器周围创建了RenameNonVirtualMethodProcessor类,然后将其发送到RenameSupport的新实例。 RenameSupport处理配置重构的所有用户界面,但由于您是以编程方式执行此操作,因此只需要使用各种RenameRefactoring方法配置的processor.set*()和处理器。

    现在您已配置RenameRefactoring的实例。怎么办? Eclipse中的实际操作跨两个Job实现执行。有关详细信息,请查看RefactoringExecutionHelper.OperationPerformChangeOperation

    这一切归结为什么?除了异常处理的所有细节,具有撤消堆栈和工作区检查点之外,您可以使用以下步骤重命名“虚拟”方法:

    IMethod methodToRename = <....>
    RenameMethodProcessor processor = new RenameVirtualMethodProcessor(methodToRename)
    processor.setUpdateReferences(true);
    processor.setNewElementName("newMethodName");
    
    RenameRefactoring fRefactoring = new RenameRefactoring(processor);
    fChange= fRefactoring.createChange(new NullProgressMonitor());
    fChange.initializeValidationData(new NullProgressMonitor());
    fChange.perform(new NullProgressMonitor())
    

    有很多支持代码可用于撤消,进度条,异步执行,工作区检查点等,根据您的运行方式,您可能需要或可能需要这些代码。但这就是如何进行重构的内容。

答案 1 :(得分:0)

我认为如果您正在寻找的话,this会对您有所帮助。