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

Unn*_*ris 7 java refactoring abstract-syntax-tree eclipse-jdt

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

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

有人能指出我正确的方向.

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

sha*_*kan 5

我认为你最有前途的方法是去 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,然后发送到 的新实例RenameSupportRenameSupport处理所有 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())
Run Code Online (Sandbox Code Playgroud)

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