如何使用JDT以编程方式重命名方法
我的目标是以编程方式为Java源文件中的方法调用Refactor >> Rename
Eclipse命令。 重命名方法也应该将更改应用于使用/引用此方法的所有实例。
我相信JDT有一个重构API,但无法找到相同的任何文档或教程。
有人可以指出我正确的方向。
编辑:运行时不需要更改。
我认为你最有希望的方法是去eclipse源代码。
- 使用源代码下载所需的版本。 特别是,您需要JDT插件的源代码,它包含在“经典”版本中。 以下所有内容均基于4.2.1 。
- 启动到空工作区。
- 文件 – >导入:插件和片段
- 从“活动目标平台”,“从所有选择…”,“包含源文件夹的项目”导入
- 至少选择org.eclipse.jdt.ui和org.eclipse.ltk.core.refactoring。
对应于Refactor >> Rename
的起点是org.eclipse.jdt.ui.actions.RenameAction
。 这是整个重命名重构,但它可以重命名从方法到文件的任何内容。 与您更相关的是RenameSupport.create(IMethod, String, int)
。
您可以看到在处理器( RenameVirtualMethodProcessor
或RenameNonVirtualMethodProcessor
周围创建了RenameRefactoring
类,然后将其发送到RenameSupport
的新实例。 RenameSupport
处理所有用于配置重构的UI,但由于您以编程方式执行,因此只需要使用各种processor.set*()
方法配置的RenameRefactoring
和处理器。
现在您已经配置了RenameRefactoring
实例。 怎么办? Eclipse中的实际操作跨两个Job实现执行。 有关详细信息,请查看RefactoringExecutionHelper.Operation
和PerformChangeOperation
。
这一切归结为什么? 除了exception处理的所有细节,具有撤消堆栈和工作区检查点之外,您可以使用以下步骤重命名“虚拟”方法:
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())
在那里有很多支持代码用于撤销,进度条,异步执行,工作空间检查点等,您可能需要或可能需要这些代码,具体取决于您希望如何运行它。 但这是如何运行重构的胆量。
我想如果您正在寻找的话, 这将有助于您。