我的目标是以编程Refactor >> Rename
方式为 Java 源文件中的方法调用 Eclipse 命令。像这样重命名方法也应该将更改应用于使用/引用此方法的所有实例。
我相信 JDT 有一个 Refactoring API,但找不到任何文档或教程。
有人可以指出我正确的方向。
编辑:运行时不需要更改。
我的目标是以编程Refactor >> Rename
方式为 Java 源文件中的方法调用 Eclipse 命令。像这样重命名方法也应该将更改应用于使用/引用此方法的所有实例。
我相信 JDT 有一个 Refactoring API,但找不到任何文档或教程。
有人可以指出我正确的方向。
编辑:运行时不需要更改。
我认为您最有希望的方法是转到 eclipse 源代码。
对应的起点Refactor >> Rename
是org.eclipse.jdt.ui.actions.RenameAction
。那是为了整体重命名重构,它可以将任何东西从方法重命名为文件。与您更相关的是RenameSupport.create(IMethod, String, int)
.
您可以在那里看到一个RenameRefactoring
类是围绕一个处理器(aRenameVirtualMethodProcessor
或 a )创建的RenameNonVirtualMethodProcessor
,然后发送到RenameSupport
. RenameSupport
处理所有 UI 以配置您的重构,但由于您是以编程方式进行的,因此您只需要使用各种方法RenameRefactoring
配置的和处理器。processor.set*()
现在您有一个已配置的RenameRefactoring
. 怎么办?Eclipse 中的实际操作是跨两个 Job 实现执行的。查看RefactoringExecutionHelper.Operation
并PerformChangeOperation
了解详细信息。
这一切归结为什么?抛开异常处理、撤消堆栈和工作区检查点的所有细节不谈,您可以使用以下步骤重命名“虚拟”方法:
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())
那里有很多用于撤消、进度条、异步执行、工作区检查点等的支持代码,您可能需要或可能需要这些代码,具体取决于您希望如何运行它。但这就是如何运行重构的胆量。