如果我对某些东西进行重构重命名,它会尝试做一会儿,然后将其恢复为之前的名称。不显示任何错误或任何表明有问题的迹象。
我刚刚重新启动了 Eclipse,现在情况更糟了。之前,至少选择Refactor > Rename会将名称“装箱”并假装它允许您进行重构。现在,重新启动后,选择Refactor > Rename什么都不做。
Win7 64 位
Eclipse Indigo build 20110615-0604
如果我对某些东西进行重构重命名,它会尝试做一会儿,然后将其恢复为之前的名称。不显示任何错误或任何表明有问题的迹象。
我刚刚重新启动了 Eclipse,现在情况更糟了。之前,至少选择Refactor > Rename会将名称“装箱”并假装它允许您进行重构。现在,重新启动后,选择Refactor > Rename什么都不做。
Win7 64 位
Eclipse Indigo build 20110615-0604
尝试从 Eclipse 中删除项目(不要删除磁盘上的项目内容),然后重新加载它。
我想在这里为其他一些答案添加一些信息。
Archenoth 的回答指出,您可以通过在重命名操作上运行 Preview 获得更多信息。我花了一段时间才弄清楚如何进行预览:再次键入重命名键以获取对话框。有时预览没有给出错误信息(没有 ppoup 的快速重命名也没有),但在对话框中单击“确定”确实说明了更多信息。
MutantXenu通过进入工作区中的文件在日志中找到信息,但您也可以通过转到错误日志视图(来自 Cmd-3)在 Eclipse 中获取这些信息
当我遇到这个问题时,错误日志将我指向这个失败的断言:“搜索方法声明没有找到原始元素”,这导致了一些未解决的错误。(我正在运行开普勒,但问题显然难以复制,而且我没有看到它已解决的证据。请参阅此处和此处。)
您可以通过选择方法并使用 Cmd-G(或 Ctrl-G:搜索 > 声明 > 工作区)来查看您是否遇到此特定错误。Eclipse 无法找到您尝试重命名的方法,并且搜索结果为空。
我的案例表明错误可能与不同类中的同名方法有关。当使用一种方法出现问题时,它不会影响大多数其他方法。
刷新、Project->Clean 和重新启动 Eclipse 对我没有帮助。 凯文的回答对我有用:“尝试从 Eclipse 中删除项目(不要删除磁盘上的项目内容),然后重新加载它。”
虽然在极少数情况下直接在编辑器中重命名方法不起作用,然后 IDE 在按下返回键后恢复原始方法名称 - 一种“不可知模式”:-),但当我通过 Refactoring -> Change Methode Signature执行相同操作时,在右上角我更改了方法名称,然后我收到一条完整详细的错误消息:“执行重构时发生意外异常...原因:匿名 #1 in .... in lambda #1 ...在……工作副本……不存在。”
这表明,当要重命名的方法在 lambda 或匿名类的上下文中使用时,重命名方法会触发此失败。
要检查,注释掉 lambda 或匿名类中的出现,然后重构/重命名可以像我的情况一样按预期工作。
我在使用 Eclipse Helios 时遇到了这个问题。我查看了工作区的 .metadata 目录并打开了 .log 文件。它有很长的与该错误相关的引用链,但其中的相关部分是:
java.lang.NoClassDefFoundError: org/eclipse/jdt/core/IMethod
和
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) 在 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.internal.ui.refactoring.reorg.RenameLinkedMode 中的 org.eclipse.jdt.ui.refactoring.RenameSupport.perform(RenameSupport.java:197)。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) 在 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.爪哇:3660)341) 在 org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 在 org.eclipse.swt 的 org.eclipse.jface.text.link.LinkedModeUI$4.run(LinkedModeUI.java:1194)。 widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) 在 org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041) 在 org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660)341) 在 org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 在 org.eclipse.swt 的 org.eclipse.jface.text.link.LinkedModeUI$4.run(LinkedModeUI.java:1194)。 widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) 在 org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041) 在 org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660)
我去了Help > Install New Software > What is already installed,然后选择与 org.eclipse.swt 相关的所有内容并单击Uninstall。重新启动 Eclipse 后,问题消失了,我能够再次正常重构/重命名。
如果您的项目中有任何错误,重构将不起作用。
修复错误,或者只是注释掉被检测为错误的部分以运行重构。
这对我有用。
我也一直在为这个问题苦苦挣扎。当我查看 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 Tools 3.106.0.v20170503-0851 -> 安装新软件,很高兴地解决了这个问题。
尝试以下(对我有用):
使用 4.4 (Luna),我在大型重构后遇到了跨项目重构问题 - 删除 /.metadata/.plugins/org.eclipse.jdt.core 文件夹为我解决了这个问题
当我尝试重命名变量和方法名称时,我看到了与 OP 完全相同的问题。重新启动 Eclipse 后,Refactor->Rename 功能正常工作。
如果某些不太明显的事情导致重构失败,您可以通过尝试预览重构而不是尝试执行重构来查找问题。
正如 Dicky Moore 所提到的,您不能在项目中出现错误进行重构......但这些并不总是 Eclipse 标记的代码错误或构建路径问题。所以有时它看起来好像没有任何错误,但它仍然会失败。如上所述,“预览”将在错误对话框中显示这些问题,即使它们从未出现在其他地方。
从那里,您可以配置您的项目以修复错误(一个常见的问题是重构尝试解释它不应该考虑的输出文件夹,这可以通过在Build Path > Source
设置中排除文件夹来修复。)或卸载有问题的插件.
一个对我有用的快速解决方法:
有同样的问题:
我在 Windows 上运行它:
我通过以下方式“修复”了该行为:
项目中没有错误,挂起时日志中没有任何明显的内容,从工作区删除/重新导入项目也不起作用(并在重新导入之前删除 .classpath .project 和 .settings )。