我的目标是以编程方式为Java源文件中的方法调用Refactor >> Rename
Eclipse命令。重命名方法也应该将更改应用于使用/引用此方法的所有实例。
我相信JDT有一个Refactoring API,但无法找到相同的文档或教程。
有人可以指出我正确的方向。
编辑:运行时不需要进行更改。
答案 0 :(得分:4)
我认为你最有希望的方法是转到eclipse源代码。
与Refactor >> Rename
对应的起点是org.eclipse.jdt.ui.actions.RenameAction
。这是整个重命名重构,但它可以重命名从方法到文件的任何内容。与您更相关的是RenameSupport.create(IMethod, String, int)
。
您可以看到在RenameRefactoring
或RenameVirtualMethodProcessor
处理器周围创建了RenameNonVirtualMethodProcessor
类,然后将其发送到RenameSupport
的新实例。 RenameSupport
处理配置重构的所有用户界面,但由于您是以编程方式执行此操作,因此只需要使用各种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())
有很多支持代码可用于撤消,进度条,异步执行,工作区检查点等,根据您的运行方式,您可能需要或可能需要这些代码。但这就是如何进行重构的内容。
答案 1 :(得分:0)
我认为如果您正在寻找的话,this会对您有所帮助。