我认为您最有前途的方法是使用Eclipse源代码。
- 下载带有源代码的所需版本。特别是,您需要JDT插件的源,该源包含在“经典”版本中。以下所有内容均基于4.2.1。
- 启动到一个空的工作区。
- File-> import:插件和片段
- 从“活动目标平台”,“从所有…中选择”,“带有源文件夹的项目”导入
- 至少选择org.eclipse.jdt.ui和org.eclipse.ltk.core.refactoring。
对应的起点
Refactor >>Rename是
org.eclipse.jdt.ui.actions.RenameAction。那是为了整体重命名重构,它可以重命名从方法到文件的任何内容。与您更相关的是
RenameSupport.create(IMethod,String, int)。
您可以在此处看到
RenameRefactoring围绕一个处理器(一个
RenameVirtualMethodProcessor或一个)创建了一个类
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())那里有很多用于撤消,进度条,异步执行,工作区检查点等的支持代码,您可能会或可能需要根据运行方式的不同而定。但这就是如何运行重构的胆量。



