9

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

我相信 JDT 有一个 Refactoring API,但找不到任何文档或教程。

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

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

4

1 回答 1

4

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

  1. 下载你想要的版本,带有源代码。特别是,您需要 JDT 插件的源代码,它包含在“经典”版本中。以下所有内容均基于4.2.1
  2. 启动到一个空的工作区。
  3. 文件->导入:插件和片段
  4. 从“活动目标平台”、“从所有选择...”、“带有源文件夹的项目”中导入
  5. 至少选择 org.eclipse.jdt.ui 和 org.eclipse.ltk.core.refactoring。

对应的起点Refactor >> Renameorg.eclipse.jdt.ui.actions.RenameAction。那是为了整体重命名重构,它可以将任何东西从方法重命名为文件。与您更相关的是RenameSupport.create(IMethod, String, int).

您可以在那里看到一个RenameRefactoring类是围绕一个处理器(aRenameVirtualMethodProcessor或 a )创建的RenameNonVirtualMethodProcessor,然后发送到RenameSupport. RenameSupport处理所有 UI 以配置您的重构,但由于您是以编程方式进行的,因此您只需要使用各种方法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())

那里有很多用于撤消、进度条、异步执行、工作区检查点等的支持代码,您可能需要或可能需要这些代码,具体取决于您希望如何运行它。但这就是如何运行重构的胆量。

于 2012-10-24T17:29:59.080 回答