如何以编程方式使用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)

    您可以看到,在处理器( RenameVirtualMethodProcessorRenameNonVirtualMethodProcessor周围创建了RenameRefactoring类,然后将其发送到RenameSupport的新实例。 RenameSupport处理所有UI以配置重构,但由于您正在以编程方式执行此操作,因此您只需要使用各种processor.set*()方法配置的RenameRefactoring和处理器。

    现在你有一个RenameRefactoring的配置实例。 怎么办? Eclipse中的实际操作在两个Job实现中执行。 请PerformChangeOperation 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())
    

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


    我认为这将帮助你,如果你正在寻找。

    链接地址: http://www.djcxy.com/p/64973.html

    上一篇: How to programmatically rename a method using JDT

    下一篇: How to add icon or change calendarview's day icon?