web-dev-qa-db-ja.com

Eclipseで名前の変更をリファクタリングできません

何かにリファクタリングの名前変更を行うと、しばらくの間それを実行しようとしますが、その後、以前の名前に戻します。エラーや問題の兆候は表示されません。


Eclipseを再起動したところ、さらに悪化しました。以前は、少なくともリファクタリング>名前の変更を選択すると、名前が「ボックス化」され、リファクタリングを実行できるようになります。ここで、再起動後、リファクタリング>名前の変更を選択しても何も起こりません。

Win764ビット
EclipseIndigoビルド20110615-0604

20
Mike Dannyboy

Eclipseからプロジェクトを削除して(ディスク上のプロジェクトの内容を削除しないでください)、再ロードしてみてください。

5
Kevin

ここで他のいくつかの回答にいくつかの情報を追加したいと思いました。

Archenothの回答 名前の変更操作でプレビューを実行すると、より多くの情報を取得できると指摘しています。プレビューを取得する方法を理解するのに少し時間がかかりました。ダイアログを表示するには、名前変更キーストロークをもう一度入力します。プレビューでエラー情報が表示されない場合がありましたが(ppoupなしでクイック名前変更も表示されませんでした)、ダイアログで[OK]をクリックすると詳細が表示されました。

MutantXen ワークスペース内のファイルに移動してログで情報を見つけましたが、(Cmd-3から)エラーログビューに移動してEclipse内でこれらの情報にアクセスすることもできます。

この問題が発生したとき、エラーログはこの失敗したアサーションを示しました:「メソッド宣言の検索で元の要素が見つかりませんでした」これにより、いくつかの未解決のバグが発生しました。 (私はKeplerを実行していますが、問題を再現するのは明らかに困難であり、解決された証拠は見当たりません。 ここ および ここ を参照してください。)

メソッドを選択してCmd-G(またはCtrl-G:[検索]> [宣言]> [ワークスペース])を使用すると、この特定のバグが発生しているかどうかを確認できます。 Eclipseは、名前を変更しようとしているメソッドを見つけることができず、検索は空になります。

私の場合は、エラーが異なるクラスの同じ名前のメソッドに関係している可能性があることを示唆しています。 1つの方法で問題が発生している場合、他のほとんどの方法には影響しません。

更新、プロジェクト->クリーン、およびEclipseの再起動は私には役に立ちませんでした。 Kevinの答え 私のために働いた:「Eclipseからプロジェクトを削除してみて(ディスク上のプロジェクトの内容を削除しないでください)、それをリロードしてください。」

4
Joshua Goldberg

まれに、エディターでメソッドの名前を直接変更しても機能しない場合がありますが、IDEは、リターンキーを押した後に元のメソッド名を復元します-一種の「アグノスティックモード」:-)リファクタリングでも同じ-> メソッドシグネチャの変更、右上隅でメソッド名を変更すると、完全に詳細なエラーメッセージが表示されます:「リファクタリングの実行中に予期しない例外が発生しました...理由:anonymous#1 in .... in lambda#1 ... in ... Working Copy ...は存在しません。」

これは、メソッドの名前変更がこの失敗をトリガーすることを示しています名前を変更するメソッドがラムダまたは匿名クラスのコンテキストで使用される場合

確認するには、ラムダクラスまたは匿名クラスでの発生をコメントアウトします。リファクタリング/名前変更は、私の場合と同じように機能します。

3
Hartmut P.

プロジェクトにエラーがある場合、リファクタリングは機能しません。

エラーを修正するか、エラーとして検出されたセクションをコメントアウトして、リファクタリングを実行します。

これは私のために働いた。

1
Dicky Moore

EclipseHeliosでこの問題が発生しました。ワークスペースの.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.BusyIndi​​cator.showWhile(BusyIndi​​cator.Java:70)at org.Eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.Java:756)at org.Eclipse.ui.internal.WorkbenchWindow.run(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 org.Eclipse.jdt.internal.ui.refactoring.reorg.RenameLinkedMode.doRename(RenameLinkedMode.Java:361)のorg.Eclipse.jdt.ui.refactoring.RenameSupport.perform(RenameSupport.Java:197)(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)

ヘルプ> 新しいソフトウェアのインストール> すでにインストールされているものに移動し、org.Eclipse.swtに関連するすべてを選択して-をクリックしました。 アンインストール。 Eclipseを再起動した後、問題は解決し、通常どおりリファクタリング/名前変更を行うことができました。

1
MutantXenu

私もこの問題に苦しんでいます。 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ヘルプ->新しいソフトウェアをインストールして、問題をうまく解決しました。

1

私のために働いた簡単な回避策:

  • メソッドシグネチャに静的修飾子を追加します(すべての参照でジャストインタイムコンパイルを介してコンパイルエラーを「強制」します)
  • メソッド名をリファクタリングします(エラーは残ります)
  • 静的修飾子を削除します(メソッドシグネチャを変更して再コンパイルし、エラーはなくなりました...)
0
Alex

変数とメソッド名の両方の名前を変更しようとしたときに、OPとまったく同じ問題が発生していました。 Eclipseを再起動した後、リファクタリング->名前の変更機能が正しく機能しました。

0
jakethasnake919

4.4(Luna)では、大規模なリファクタリング後にプロジェクト間のリファクタリングの問題が発生しました-/。metadata/.plugins/org.Eclipse.jdt.coreフォルダーを削除すると、問題が修正されました

0
nickle

次のことを試してください(私のために働いたばかりです):

  1. プロジェクトを削除します
  2. 同じ名前の新しいJavaプロジェクトを作成します
0
Yoav Schneider

同じ問題がありました:

  • Javaクラスのプロパティ名を左クリックします
  • 右クリック
  • リファクタリング
  • 名前を変更
  • 名前を変更します
  • enterキーを押します
  • 緑のプログレスバーがフッターメニューに表示されますが、終了しません
  • 回復するには、Eclipseを強制終了する必要があります(終了してみることができますが、ワークベンチの状態を保存するとハングします)

私はこれをWindowsで実行しています:

  • バージョン:KeplerServiceリリース2
  • ビルドID:20140224-0627

私は次の方法で動作を「修正」しました。

  • ファイルに小さな変更を加える
  • ファイルを保存する
  • リファクタリングを再試行し、正常に機能しました(ただし、リファクタリングが完了するのを約5秒待つのに不快な遅延があります)

プロジェクトにエラーはなく、ハングしたときにログに明らかなものはなく、ワークスペースからのプロジェクトの削除/再インポートも機能しませんでした(再インポートする前に.classpath .projectと.settingsを削除しました)。

0
Moika Turns

あまり明白でないことがリファクタリングを失敗させる場合は、リファクタリングを実行するのではなく、プレビューすることで問題を探すことができます。

Dicky Mooreが述べたように、プロジェクトのエラーでリファクタリングすることはできません...しかし、これらは必ずしもEclipseがマークするコードエラーやビルドパスの問題であるとは限りません。そのため、エラーが発生したように見えず、失敗する場合があります。上記の「プレビュー」では、他の場所に表示されない場合でも、エラーダイアログにこれらの問題が表示されます。

そこから、エラーを修正するようにプロジェクトを構成できます(一般的なものは、リファクタリングが出力フォルダーを考慮に入れようとすることです。これは、Build Path > Source設定でフォルダーを除外することで修正できます。 )または問題のあるプラグインをアンインストールします。

0
Archenoth