簡體   English   中英

無法在 Eclipse 中重構重命名

[英]Can't refactor rename in Eclipse

如果我對某物進行重構重命名,它會嘗試做一會兒,但隨后會將其恢復為之前命名的名稱。 沒有顯示任何錯誤或任何錯誤跡象。


我剛剛重啟了 Eclipse,現在更糟了。 以前,至少選擇Refactor > Rename會“框住”名稱並假裝它讓您進行重構。 現在,重新啟動后,選擇Refactor > Rename沒有任何作用。

Win7 64位
Eclipse 靛藍構建 20110615-0604

如果您使用 Lombok(在我的例子中是1.18.22 )並且 Eclipse 錯誤日志中的錯誤消息顯示Unhandled event loop exception ,那么它可能是Lombok 問題- 同時已解決。 將 Lombok 升級到1.18.24或更高版本。

嘗試從Eclipse中刪除項目(不要刪除磁盤上的項目內容),然后重新加載它。

我想在這里為其他答案添加一些信息。

Archenoth的回答指出,您可以通過重命名操作運行預覽來獲取更多信息。 我花了一些時間來弄清楚如何進行預覽:再次鍵入重命名鍵擊以獲得對話框。 有時預覽沒有給出錯誤信息(並且沒有ppoup的快速重命名)但是在對話框中單擊確定確實說了更多。

MutantXenu通過進入工作空間中的文件在日志中找到信息,但您也可以通過轉到錯誤日志視圖(來自Cmd-3)在Eclipse中找到這些信息

當我遇到這個問題時,錯誤日志指向我這個失敗的斷言:“搜索方法聲明沒有找到原始元素”,這導致了一些未解決的錯誤。 (我正在運行開普勒,但問題顯然難以復制,我看不到它已經解決的證據。請看這里這里 。)

您可以通過選擇方法並使用Cmd-G(或Ctrl-G:搜索>聲明>工作區)來查看是否遇到此特定錯誤。 Eclipse無法找到您嘗試重命名的方法,搜索結果為空。

我的案例表明,錯誤可能與不同類中的同名方法有關。 當使用一種方法出現問題時,它不會影響大多數其他方法。

刷新,項目 - >清理,重新啟動Eclipse對我沒有幫助。 Kevin的回答對我有用:“嘗試從Eclipse中刪除項目(不要刪除磁盤上的項目內容),然后重新加載它。”

雖然直接在編輯器中重命名方法在極少數情況下不起作用,然后IDE按下返回鍵后恢復orignal方法名稱 - 一種“不可知模式”:-),當我通過重構 - > 更改Methode Signature時也這樣做,在右上角我更改方法名稱,然后我收到一個完全詳細的錯誤消息:“執行重構時出現意外異常...原因:在λ#1中的匿名#1 ...... in ...工作副本......不存在。“

這表明, 當在lambda或匿名類的上下文中使用要重命名的方法 ,重命名方法會觸發此失敗。

要檢查,注釋掉lambda或匿名類中的出現,重構/重命名可以像我預期的那樣工作。

我有Eclipse Helios的這個問題。 我查看了工作區的.metadata目錄並打開了.log文件。 它有一個很長的與錯誤相關的參考鏈,但相關部分是:

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

位於org.eclipse的org.eclipse.jface.windration.ModalContext.run(ModalContext.java:421)的java.lang.reflect.InvocationTargetException org.eclipse.windows.ApplicationWindow $ 1.run(ApplicationWindow.java:759) .swt.custom.BusyIndi​​cator.showWhile(BusyIndi​​cator.java:70)位於org.eclipse.wind.App.Window.run的Org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:756)(WorkbenchWindow.java) :2606)org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper.perform(RefactoringExecutionHelper.java:191)at org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper.perform(RefactoringExecutionHelper.java:151)at at Org.eclipse.jdt.ui.refactoring.RenameSupport.perform(RenameSupport.java:197)位於org.eclipse的org.eclipse.jdt.internal.ui.refactoring.reorg.RenameLinkedMode.doRename(RenameLinkedMode.java:361)。 org.eclipse.jface.text.link.LinkedModeModel.exit中的jdt.internal.ui.refactoring.reorg.RenameLinkedMode $ EditorSynchronizer.left(RenameLinkedMode.java:119) (LinkedModeModel.java:341)org.eclipse.jface.text.link.LinkedModeUI $ 4.run(LinkedModeUI.java:1194)org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)at org .eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)位於org.eclipse.swt.wts.Display.readAndDispatch上的org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041)的.java:3660)

我去了幫助 > 安裝新軟件 > 已安裝的內容 ,然后選擇了與org.eclipse.swt相關的所有內容,並單擊了卸載 重新啟動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,很高興解決了這個問題。

當我試圖重命名變量和方法名稱時,我看到與OP完全相同的問題。 重新啟動Eclipse后,Refactor-> Rename功能正常工作。

如果某些不太明顯的事情導致重構失敗,您可以通過嘗試預覽重構而不是嘗試執行它來查找問題。

正如Dicky Moore所提到的,你不能在項目中重構錯誤......但這些並不總是代碼錯誤或Eclipse標記的構建路徑問題。 所以有時它似乎沒有任何錯誤,它仍然會失敗。 如上所述,“預覽”將在錯誤對話框中顯示這些問題,即使它們從未出現在其他地方。

從那里,您可以配置您的項目來修復錯誤(一個常見的是重構嘗試考慮它不應該的輸出文件夾,可以通過排除Build Path > Source設置中的文件夾來修復。)或卸載有問題的插件。

使用4.4(Luna),我在大型重構后遇到了跨項目重構問題 - 刪除了/.metadata/.plugins/org.eclipse.jdt.core文件夾修復了這個問題對我來說

有同樣的問題:

  • 左鍵單擊java類中的屬性名稱
  • 右鍵點擊
  • 重構
  • 改名
  • 重命名
  • 按回車鍵
  • 頁腳菜單上出現綠色進度條但從未完成
  • 恢復我必須殺死eclipse(你可以嘗試退出但它會在保存工作台狀態時掛起)

我在Windows上運行它:

  • 版本:開普勒服務版本2
  • 構建ID:20140224-0627

我通過以下方式修復了這種行為:

  • 對文件進行小的更改
  • 保存文件
  • 重試了重構並且工作正常(盡管有一個令人不舒服的延遲等待重構完成大約五秒鍾)

項目中沒有錯誤,當日志掛起並且從工作區刪除/重新導入項目時也沒有任何明顯的錯誤(並且在重新導入之前刪除.classpath .project和.settings)。

嘗試以下(只為我工作):

  1. 刪除項目
  2. 創建一個具有相同名稱的新Java項目

一個對我有用的快速解決方法:

  • 將static修飾符添加到方法簽名中(通過及時編譯所有引用來“強制”編譯錯誤)
  • 重構方法名稱(錯誤仍然存​​在)
  • 刪除靜態修飾符(使用更改的方法簽名重新編譯,錯誤消失...)

我通過執行以下步驟解決了 Window --> 首選項 --> java --> 取消選中“在沒有對話框的編輯器中重命名”

我在嘗試重構 function 名稱時遇到了同樣的問題,以下步驟對我有用,但我無法驗證原因是否與原始問題相同。

腳步:

  1. 關閉項目
  2. 打開項目
  3. 右鍵單擊項目和 select 索引>>刷新所有文件
  4. 現在select首頁>>重建

重新啟動 Eclipse 對我沒有影響,我懷疑 Freshen All Files 完成了大部分工作。 希望這對某人有用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM