简体   繁体   中英

Can't refactor rename in Eclipse

If I do a refactor rename on something, it tries to do it for a moment but then just reverts it right back to what it was named before. No errors or any indication that something is wrong is shown.


I just restarted Eclipse and now it's even worse. Before, at least selecting Refactor > Rename would "box" the name and pretend it's letting you do a refactor. Now, after restart, selecting Refactor > Rename does nothing.

Win7 64 bit
Eclipse Indigo build 20110615-0604

If you use Lombok ( 1.18.22 in my case) and the error message in Eclipse Error Logs says Unhandled event loop exception , then it might be a Lombok issue - which in the mean time has been resolved. Upgrade Lombok to 1.18.24 or above.

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

I wanted to add some information to some other answers here.

Archenoth's answer points out you can get more information from running Preview on the rename operation. It took me a while to figure out how to get to preview: type the rename keystroke a second time to get the dialog. Sometimes Preview didn't give the error information (and neither did the quick rename without the ppoup) but clicking OK in the dialog did say more.

MutantXenu found information in the logs by going into files in the workspace, but you can also get to these within Eclipse by going to the Error Log view (from Cmd-3)

When I had this problem, the error log pointed me to this failed assertion: "Search for method declaration did not find original element" which led to some unresolved bugs. (I'm running Kepler, but the problem is apparently hard to replicate and I don't see evidence it's resolved. See here and here .)

You can see if you're experiencing this specific bug by selecting the method and using Cmd-G (or Ctrl-G: Search > Declarations > Workspace). Eclipse is unable to find the method you're trying to rename and the search comes up empty.

My case suggests it's possible the error might have to do with identically-named methods in different classes. When the problem is occuring with one method, it doesn't affect most others.

Refresh, Project->Clean, and restarting Eclipse were not helpful to me. Kevin's answer worked for me: "Try to delete the project from Eclipse (don't delete project contents on disk) and then reload it."

While renaming methods directly in the editor does not work in very rare cases and then the IDE restores the orignal method name after pressing return key - kind of "agnostic mode" :-), when I do the same via Refactoring -> Change Methode Signature , in the upper right corner I change the method name, then I receive a fully detailed error message: "An unexpected exception occured while performing the refactoring... Reason: anonymous #1 in .... in lambda #1 ... in ... Working Copy ... does not exist."

This indicates, that renaming methods triggers this failure, when the method to be renamed is used in the context of an lambda or anonymous class .

To check, comment out the occurence in the lambda or anonymous class, the refactoring/renaming could then work as expected as it did in my case.

I had this problem with Eclipse Helios. I looked in the .metadata directory of the workspace and opened the .log file. It had a pretty long chain of references relating to the error, but the pertinent parts of that were:

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

and

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)

I went to Help > Install New Software > What is already installed , and then selected everything relating to org.eclipse.swt and clicked on Uninstall . After restarting Eclipse, the problem went away and I was able to refactor / rename normally again.

The refactor will not work if there are any errors in your project.

Fix the errors, or just comment out the section being detected as an error in order to run the refactor.

This worked for me.

I've been struggling this issue too. When I looked on Error Log View of Eclipse, I noticed that each time I tried to rename a variable or method, I was getting this kind of exception:

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)

I noticed it all starts from SWT libraries. Tried to update SWT, but for some reasons I wasn't able even to find SWT installed. So I simply installed SWT Tools 3.106.0.v20170503-0851 via Help -> Install new Software, what happily solved the issue.

I was seeing the exact same issue as the OP when I was trying to rename both variables, and method names. After I restarted Eclipse, the Refactor->Rename functionality worked correctly.

If something not overly obvious makes a refactor fail, you can look for problems by attempting to preview the refactor rather than trying to execute it.

As Dicky Moore mentioned, you cannot refactor with errors in your project... But these aren't always code errors or build path issues that Eclipse marks. So sometimes it doesn't appear as though you have any errors and it will still fail. "Preview", as mentioned above will show these problems in an error dialog, even if they never show up elsewhere.

From there, you can configure your project to fix the errors (A common one is that the refactor tries to account for an output folder that it shouldn't, which can be fixed by excluding the folder in your Build Path > Source settings.) or uninstall problematic plugins.

使用4.4(Luna),我在大型重构后遇到了跨项目重构问题 - 删除了/.metadata/.plugins/org.eclipse.jdt.core文件夹修复了这个问题对我来说

Had same issue:

  • left click on property name in java class
  • right click
  • refactor
  • rename
  • do the rename
  • press enter
  • green progress bar appears on footer menu but never finishes
  • to recover i have to kill eclipse (you can try exiting but it will hang when saving workbench state)

I'm running this on windows:

  • Version: Kepler Service Release 2
  • Build id: 20140224-0627

I 'fixed' the behaviour by:

  • making a small change to the file
  • saving the file
  • retried the refactor and it worked fine (although there is an uncomfortable delay waiting for the refactor to complete circa five seconds)

There were no errors in the project, nothing obvious in the logs when it hangs and deleting/reimporting the project from the workspace did not work either (and deleting .classpath .project and .settings before re-importing).

Try the following (just worked for me):

  1. Delete the project
  2. Create a new java project with the same name

A quick workaround which worked for me:

  • Add the static modifier to your method signature ("forces" compilation error through just in time compilation on all references)
  • Refactor the method name (the errors remain)
  • Remove the static modifier (recompiles with changed method signature, errors gone...)

I solved by doing below steps Window --> preferences --> java --> uncheck "rename in editor without dialog"

I experienced this same issue when trying to refactor a function name, the following steps worked for me but I cannot verify the cause is the same as the original question.

Steps:

  1. Close Project
  2. Open Project
  3. Right Click the Project and select Index>>Freshen All Files
  4. Now select Index>>Rebuild

Restarting Eclipse had no impact on me, I suspect Freshen All Files did most of the work. Hopefully this works for someone!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM