読者です 読者をやめる 読者になる 読者になる

この日記は私的なものであり、所属会社の見解ではありません。 GitHub: takahashikzn

"クラス・ファイル名の末尾は .class でなければなりません"を解消する

Eclipse

いつの間にかこんなエラー出るようになり(※Eclipse3.5)、Eclipseの『型を開く』が使えなくなってしまいました。
僕、この機能が使えないと死んでしまいます。


ちなみに、ご存知ない方へご説明。『型を開く』はソースファイルを検索する機能です。


( ´_ゝ`)フーン


と思ったそこのアナタ。
この機能を使わないなんて確実に人生をソンしてますよ!


コレを一度覚えてしまうと、いちいちパッケージエクスプローラから探してファイルを開く、
なんてメンドクサイこと、やってられなくなります。ええ。


ちなみに『リソースを開く』というのもありまして、こちらはソースファイルじゃなくて設定ファイル等を検索する機能です。
使い方は同じ。

さて、

エラー詳細はこんな感じ。検索用インデックスが壊れてしまっているようです。

java.lang.IllegalArgumentException: クラス・ファイル名の末尾は .class でなければなりません
	at org.eclipse.jdt.internal.core.PackageFragment.getClassFile(PackageFragment.java:182)
	at org.eclipse.jdt.internal.core.search.TypeNameMatchRequestorWrapper.createTypeFromJar(TypeNameMatchRequestorWrapper.java:146)
	at org.eclipse.jdt.internal.core.search.TypeNameMatchRequestorWrapper.acceptType(TypeNameMatchRequestorWrapper.java:108)
	at org.eclipse.jdt.internal.core.search.BasicSearchEngine$3.acceptIndexMatch(BasicSearchEngine.java:1111)
	at org.eclipse.jdt.core.search.SearchPattern.acceptMatch(SearchPattern.java:299)
	at org.eclipse.jdt.core.search.SearchPattern.findIndexMatches(SearchPattern.java:2124)
	at org.eclipse.jdt.internal.core.search.matching.MatchLocator.findIndexMatches(MatchLocator.java:264)
	at org.eclipse.jdt.internal.core.search.PatternSearchJob.search(PatternSearchJob.java:97)
	at org.eclipse.jdt.internal.core.search.PatternSearchJob.execute(PatternSearchJob.java:63)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:276)
	at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllTypeNames(BasicSearchEngine.java:1122)
	at org.eclipse.jdt.core.search.SearchEngine.searchAllTypeNames(SearchEngine.java:815)
	at org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog.fillContentProvider(FilteredTypesSelectionDialog.java:556)
	at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$FilterJob.filterContent(FilteredItemsSelectionDialog.java:2182)
	at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$FilterJob.internalRun(FilteredItemsSelectionDialog.java:2124)
	at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$FilterJob.doRun(FilteredItemsSelectionDialog.java:2096)
	at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$FilterJob.run(FilteredItemsSelectionDialog.java:2083)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


で、回復方法ですがこちらに載ってました。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=269820#c9


要するに、インデックスを手動で消せとのこと。

  1. Eclipseを終了する
  2. "/.metadata/.plugins/org.eclipse.jdt.core/*.index"を削除する
  3. "/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt"を削除する
  4. Eclipseを起動する

だそうです。
で、やってみるとうまくいきました。