当我试图对某个东西进行重构命名时,它会尝试进行一段时间,但随后又将其恢复为原来的名称。没有显示任何错误或任何指示有问题。
我刚刚重新启动了Eclipse,现在情况变得更糟了。以前,至少选择重构 > 重命名会在名称周围形成“框”,并假装让你进行重构。现在,在重新启动后,选择重构 > 重命名没有任何作用。
Win7 64位
Eclipse Indigo版本20110615-0604
当我试图对某个东西进行重构命名时,它会尝试进行一段时间,但随后又将其恢复为原来的名称。没有显示任何错误或任何指示有问题。
我刚刚重新启动了Eclipse,现在情况变得更糟了。以前,至少选择重构 > 重命名会在名称周围形成“框”,并假装让你进行重构。现在,在重新启动后,选择重构 > 重命名没有任何作用。
Win7 64位
Eclipse Indigo版本20110615-0604
1.18.20
出现了相同的错误。通过更新到1.18.26
解决了问题。 - Balint G.尝试从Eclipse中删除项目(不要在磁盘上删除项目内容),然后重新加载它。
我想为其他答案增加一些信息。
Archenoth的回答指出你可以在重命名操作中运行预览来获取更多信息。我花了一些时间才弄清楚如何进入预览模式:按下第二次重命名快捷键即可弹出对话框。有时预览不会提供错误信息(而且没有弹出窗口的快速重命名也是如此),但单击对话框中的“确定”按钮会提供更多信息。
MutantXenu通过进入工作区中的文件找到了日志中的信息,但您也可以通过进入错误日志视图(从Cmd-3)在Eclipse中找到这些日志。
当我遇到这个问题时,错误日志指向了这个失败的断言:“搜索方法声明未找到原始元素”,这导致了一些未解决的错误。(我正在运行Kepler版本,但该问题显然很难复制,我看不到已经解决它的证据。请参见这里和这里。)
您可以选择该方法并使用Cmd-G(或Ctrl-G:搜索>声明>工作区)来查看是否遇到了此特定错误。Eclipse无法找到您要重命名的方法,搜索结果为空。
我遇到的情况表明,错误可能与不同类中具有相同名称的方法有关。 当发生问题时,它不会影响大多数其他方法。
对我来说,刷新、项目->清理和重启Eclipse都没有帮助。Kevin的回答对我有用: “尝试从Eclipse中删除项目(不要删除磁盘上的项目内容),然后重新加载它。”
在编辑器中直接重命名方法有时会出现极少数情况下不起作用的情况,然后按回车键后IDE会恢复原始方法名称 - 类似于“不可知模式” :-),但是当我通过重构->更改方法签名来执行相同的操作时,在右上角更改方法名称,然后我收到了一个完整详细的错误消息:“执行重构时发生意外异常...原因:lambda #1中的匿名#1...工作副本...不存在。”
这表明,在使用lambda或匿名类的上下文中使用重命名方法会触发此故障。
要检查,请注释掉lambda或匿名类中的出现,然后重构/重命名就可以像我一样正常工作。
我也曾遇到这个问题。当我查看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)
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) 中读取和分派消息尝试以下操作(对我有效):
遇到了同样的问题:
我在Windows上运行此操作:
我通过以下方式“修复”了这种行为:
项目中没有错误,在挂起时日志中也没有明显的内容,并且删除/重新导入工作区中的项目也无法解决问题(在重新导入之前删除.classpath、.project和.settings)。