无法在Eclipse中进行重构重命名

30

当我试图对某个东西进行重构命名时,它会尝试进行一段时间,但随后又将其恢复为原来的名称。没有显示任何错误或任何指示有问题。


我刚刚重新启动了Eclipse,现在情况变得更糟了。以前,至少选择重构 > 重命名会在名称周围形成“框”,并假装让你进行重构。现在,在重新启动后,选择重构 > 重命名没有任何作用。

Win7 64位
Eclipse Indigo版本20110615-0604


1
你处于哪个视图?你正在重命名什么,重命名为什么?只有当你真正期望得到帮助时才需要提供更多信息... - arcy
1
同时验证项目是否有任何编译错误。有时候出现编译错误会阻止您重构代码。 - vikas
1
当我尝试重命名Javascript方法时,这种情况发生在我身上。已安装JSDT。删除和添加项目没有帮助。 - Nilzor
更新:请注意,有一个错误会在新版本的Eclipse中触发此问题,直到2020-09,请更新您的Eclipse并参考此Q/A获取详细信息。别忘了投票支持。当然,无论如何,它都不应该打开“运行...”。 - Maarten Bodewes
15个回答

20
如果您使用Lombok(在我的情况下是1.18.22版本),并且Eclipse错误日志中显示“Unhandled event loop exception”错误消息,则可能是Lombok问题 - 这个问题已经得到解决。请将Lombok升级至1.18.24或更高版本。请注意,保留html标记。

2
我在使用较新版本的Lombok时遇到了同样的问题。我将其更新为v1.18.24。我建议修改此帖以更新提到的Lombok版本。 - Shadyar
2
@Shadyar 在回答发布时,v1.18.22 是最新版本。只有带有错误修复的快照版本可用。我已编辑答案并指定了更新版本。 - Markus Pscheidt
3
我也遇到了同样的问题,是由于Lombok 1.18.6和Eclipse 2022-03不兼容导致的。将Lombok更新到最新版本可以解决问题。 - Gmugra
2
同样的问题,更新到1.18.24后Lombok问题解决了,谢谢! - Renan Ribeiro
1
Lombok 1.18.20出现了相同的错误。通过更新到1.18.26解决了问题。 - Balint G.

7

尝试从Eclipse中删除项目(不要在磁盘上删除项目内容),然后重新加载它。


3
八年后,仍是同样的胡言乱语。 - Koenigsberg

6

我想为其他答案增加一些信息。

Archenoth的回答指出你可以在重命名操作中运行预览来获取更多信息。我花了一些时间才弄清楚如何进入预览模式:按下第二次重命名快捷键即可弹出对话框。有时预览不会提供错误信息(而且没有弹出窗口的快速重命名也是如此),但单击对话框中的“确定”按钮会提供更多信息。

MutantXenu通过进入工作区中的文件找到了日志中的信息,但您也可以通过进入错误日志视图(从Cmd-3)在Eclipse中找到这些日志。

当我遇到这个问题时,错误日志指向了这个失败的断言:“搜索方法声明未找到原始元素”,这导致了一些未解决的错误。(我正在运行Kepler版本,但该问题显然很难复制,我看不到已经解决它的证据。请参见这里这里。)

您可以选择该方法并使用Cmd-G(或Ctrl-G:搜索>声明>工作区)来查看是否遇到了此特定错误。Eclipse无法找到您要重命名的方法,搜索结果为空。

我遇到的情况表明,错误可能与不同类中具有相同名称的方法有关。 当发生问题时,它不会影响大多数其他方法。

对我来说,刷新、项目->清理和重启Eclipse都没有帮助。Kevin的回答对我有用: “尝试从Eclipse中删除项目(不要删除磁盘上的项目内容),然后重新加载它。”


4

在编辑器中直接重命名方法有时会出现极少数情况下不起作用的情况,然后按回车键后IDE会恢复原始方法名称 - 类似于“不可知模式” :-),但是当我通过重构->更改方法签名来执行相同的操作时,在右上角更改方法名称,然后我收到了一个完整详细的错误消息:“执行重构时发生意外异常...原因:lambda #1中的匿名#1...工作副本...不存在。”

这表明,在使用lambda或匿名类的上下文中使用重命名方法会触发此故障。

要检查,请注释掉lambda或匿名类中的出现,然后重构/重命名就可以像我一样正常工作。


2

我也曾遇到这个问题。当我查看Eclipse的错误日志视图时,我注意到每次尝试重命名变量或方法时,都会出现以下异常:

java.lang.reflect.InvocationTargetException at 
org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421) at 
org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:759) at
org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at 
org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:756) at
org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2606) at 
org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper.perform(RefactoringExecutionHelper.java:191) at
org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper.perform(RefactoringExecutionHelper.java:151) at
org.eclipse.jdt.ui.refactoring.RenameSupport.perform(RenameSupport.java:197) at
org.eclipse.jdt.internal.ui.refactoring.reorg.RenameLinkedMode.doRename(RenameLinkedMode.java:361) at
org.eclipse.jdt.internal.ui.refactoring.reorg.RenameLinkedMode$EditorSynchronizer.left(RenameLinkedMode.java:119) at 
org.eclipse.jface.text.link.LinkedModeModel.exit(LinkedModeModel.java:341) at 
org.eclipse.jface.text.link.LinkedModeUI$4.run(LinkedModeUI.java:1194) at
org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at
org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at 
org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041) at 
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660)

我注意到它全部始于SWT库。尝试更新SWT,但由于某些原因,我甚至无法找到已安装的SWT。所以我简单地通过帮助 -> 安装新软件安装了SWT工具 3.106.0.v20170503-0851,这让问题得到了愉快的解决。

欢迎来到StackOverflow!我不确定你的回答是否与所提出的问题相符。如果是,请您将联系更加明确。谢谢。 - Ellen Spertus
您可以从这里获取 Help > Install_New_Software 中要使用的网站 URL:https://www.eclipse.org/swt/updatesite.php - 我使用了里程碑更新站点:http://download.eclipse.org/eclipse/updates/milestones - Curtis Yallop
@EllenSpertus 它确实与问题相符,并解决了我的问题。这个堆栈跟踪来自eclipse中的错误日志窗口。使用change-signature或Refactor>Rename>click-Options时,它会报告错误,并告诉您查看错误日志(仅在没有对话框的情况下简单重命名会执行一段时间,然后还原我的更改并且不报告任何内容)。此堆栈跟踪显示了特定的重命名操作异常。您可以知道堆栈跟踪匹配,因为它包含RefactoringExecutionHelper和RenameLinkedMode.doRename。 - Curtis Yallop
好的,在解决了这个问题之后,我又重命名了几个方法,然后又遇到了同样的错误。重启Eclipse解决了这个问题。请注意,我在安装SWT后第一次也不得不重启Eclipse。 - Curtis Yallop

1
我曾经在Eclipse Helios中遇到了这个问题。我查看了工作区的.metadata目录并打开了.log文件。它有一个相当长的引用链与错误相关,但其中关键部分是:

java.lang.NoClassDefFoundError: org/eclipse/jdt/core/IMethod

以及

java.lang.reflect.InvocationTargetException 在 org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421) 中 在 org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:759) 中运行 在 org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) 中显示忙碌状态 在 org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:756) 中运行 在 org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2606) 中运行 在 org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper.perform(RefactoringExecutionHelper.java:191) 中执行 在 org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper.perform(RefactoringExecutionHelper.java:151) 中执行 在 org.eclipse.jdt.ui.refactoring.RenameSupport.perform(RenameSupport.java:197) 中执行重命名操作 在 org.eclipse.jdt.internal.ui.refactoring.reorg.RenameLinkedMode.doRename(RenameLinkedMode.java:361) 中执行重命名操作 在 org.eclipse.jdt.internal.ui.refactoring.reorg.RenameLinkedMode$EditorSynchronizer.left(RenameLinkedMode.java:119) 中执行重命名操作 在 org.eclipse.jface.text.link.LinkedModeModel.exit(LinkedModeModel.java:341) 中退出联动模式 在 org.eclipse.jface.text.link.LinkedModeUI$4.run(LinkedModeUI.java:1194) 中运行 在 org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 中运行 在 org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) 中异步运行消息 在 org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041) 中异步运行消息 在 org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660) 中读取和分派消息
我去了 帮助 > 安装新软件 > 已安装的软件,然后选择了与 org.eclipse.swt 相关的所有内容,并单击 卸载。重新启动 Eclipse 后,问题消失了,我能够正常地进行重构/重命名操作。

同样适用于 Kepler。 - leonbloy

1
重构不会在项目中存在任何错误的情况下运行。修复错误,或仅将被检测到为错误的部分注释掉以运行重构。这对我起作用了。

1

尝试以下操作(对我有效):

  1. 删除该项目
  2. 使用相同的名称创建一个新的Java项目

0
当我尝试重命名变量和方法名称时,我遇到了与 OP 完全相同的问题。在重新启动 Eclipse 后,重构->重命名功能正常工作了。

0

遇到了同样的问题:

  • 在Java类中左键单击属性名称
  • 右键单击
  • 重构
  • 重命名
  • 进行重命名
  • 按Enter键
  • 绿色进度条出现在页脚菜单上,但从未完成
  • 要恢复,我必须杀死Eclipse(您可以尝试退出,但保存工作台状态时会挂起)

我在Windows上运行此操作:

  • 版本:Kepler Service Release 2
  • Build id:20140224-0627

我通过以下方式“修复”了这种行为:

  • 对文件进行小改动
  • 保存文件
  • 重新尝试重构,它可以正常工作(虽然等待重构完成需要大约五秒钟,有点不舒服)

项目中没有错误,在挂起时日志中也没有明显的内容,并且删除/重新导入工作区中的项目也无法解决问题(在重新导入之前删除.classpath、.project和.settings)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接