当前位置: 首页 > 面试题库 >

如何使用JDT以编程方式重命名方法

薛钧
2023-03-14
问题内容

我的目的是为Refactor >> RenameJava Source
File中的方法以编程方式调用Eclipse命令。重命名这样的方法还应该将更改应用于使用/引用此方法的所有实例。

我相信JDT具有Refactoring API,但无法找到相同的任何文档或教程。

有人能指出我正确的方向吗?

编辑:运行时不需要更改。


问题答案:

我认为您最有前途的方法是使用Eclipse源代码。

  1. 下载带有源代码的所需版本。特别是,您需要JDT插件的源,该源包含在“经典”版本中。以下所有内容均基于4.2.1。
  2. 启动到一个空的工作区。
  3. File-> Import:插件和片段
  4. 从“活动目标平台”,“从所有…中选择”,“带有源文件夹的项目”导入
  5. 至少选择org.eclipse.jdt.ui和org.eclipse.ltk.core.refactoring。

对应的起点Refactor >> Renameorg.eclipse.jdt.ui.actions.RenameAction。那是为了整体重命名重构,它可以重命名从方法到文件的任何内容。与您更相关的是RenameSupport.create(IMethod, String, int)

您可以在此处看到RenameRefactoring围绕一个处理器(一个RenameVirtualMethodProcessor或一个)创建了一个类RenameNonVirtualMethodProcessor,然后将其发送到的新实例RenameSupport
RenameSupport处理所有UI来配置重构,但是由于您以编程方式进行重构,因此您只需要RenameRefactoring和处理器,即可使用各种processor.set*()方法进行配置。

现在,您已配置的实例RenameRefactoring。怎么办?Eclipse中的实际操作是跨两个Job实现执行的。查看一下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())

那里有很多用于撤消,进度条,异步执行,工作区检查点等的支持代码,您可能会或可能需要根据运行方式的不同而定。但这就是如何运行重构的胆量。



 类似资料:
  • 问题内容: 我正在使用JDT生成一些类。之后,我想格式化整个ICompilationUnit,就像我在没有选择的打开的编辑器中按Ctrl + Shift + F(源>格式)一样。 高度赞赏JDT中用于以编程方式格式化源代码的API的任何指针。 另外:我像这样尝试过,但是代码没有改变。我在说什么 问题答案: 这可能是一个错误,但是使用Elcipse 4.2.2中的JDK时,有必要创建ICompila

  • 有没有图书馆可以为我做这件事?例如,如果我重命名一个方法,我也需要重命名它的所有用例。 这不仅适用于方法,还适用于所有被重命名的东西(字段、参数...)

  • 本文向大家介绍如何以编程方式“重启” iOS应用程序?,包括了如何以编程方式“重启” iOS应用程序?的使用技巧和注意事项,需要的朋友参考一下 无论如何,您都无法重启iOS应用程序,即使您能够使用某些私有api,您的应用程序也将被Apple拒绝,并且不会被视为App Store版本。

  • 使用 lavas init 创建的模板项目中,在以下场景下都会以编程方式使用 Lavas: server.dev.js 开发环境下的 SPA/SSR 模式。 server.prod.js 生产环境下的 SSR 模式。 可见以编程方式使用 Lavas 的主要场景就是 SSR 模式,而在 SPA 模式下仅仅是供开发服务器使用。因此,如果开发者选择了 SSR 模式,阅读下面的内容将十分有帮助: 如何选择

  • 问题内容: 您知道JavaScript的“ JSON Beautifier”吗? 从 至 例 问题答案: 程序格式化解决方案: 许多现代浏览器(包括IE8)支持的方法可以输出美化的JSON字符串: 此方法还包含在json2.js中,用于支持较旧的浏览器。