Class file name must end with .class exception in Java Search

26,221

Solution 1

Two more general-purpose mechanisms for fixing some of Eclipse's idiosyncrasies:

  • Close and open the project
  • Delete the project (but not from disk!) and reimport it as an existing project

Failing that, bugs.eclipse.org might provide the answer.

If the workspace is caching something broken, you may be able to delete it by poking around in workspace/.metadata/.plugins. Most of that stuff is fairly transient (though backup and watch for deleted preferences).

Solution 2

Comment #9 to bug 269820 explains how to delete the search index, which appears to be the solution to a corrupt index whose symptoms are the dreaded

An internal error occurred during: "Items filtering".
Class file name must end with .class

message box.

How to delete the search index:

  1. Close Eclipse
  2. Delete <workspace>/.metadata/.plugins/org.eclipse.jdt.core/*.index
  3. Delete <workspace>/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt
  4. Start Eclipse again

Solution 3

Closing the projects didn't do the trick for me. I started eclipse with the -clean flag and that worked for some reason.

Solution 4

Just

  • Close project
  • Clear manually output folder(s)
  • Open project

(Eclipse 3.5 SR2, Build id: 20100218-1602)

Share:
26,221
Matt Sheppard
Author by

Matt Sheppard

Software engineer in Canberra, Australia

Updated on July 05, 2022

Comments

  • Matt Sheppard
    Matt Sheppard almost 2 years

    I was hoping someone could help me out with a problem I'm having using the java search function in Eclipse on a particular project.

    When using the java search on one particular project, I get an error message saying Class file name must end with .class (see stack trace below). This does not seem to be happening on all projects, just one particular one, so perhaps there's something I should try to get rebuilt?

    I have already tried Project -> Clean... and Closing Eclipse, deleting all the built class files and restarting Eclipse to no avail.

    The only reference I've been able to find on Google for the problem is at http://www.crazysquirrel.com/computing/java/eclipse/error-during-java-search.jspx, but unfortunately his solution (closing, deleting class files, restarting) did not work for me.

    If anyone can suggest something to try, or there's any more info I can gather which might help track it's down, I'd greatly appreciate the pointers.

    Version: 3.4.0
    Build id: I20080617-2000
    

    Also just found this thread - http://www.myeclipseide.com/PNphpBB2-viewtopic-t-20067.html - which indicates the same problem may occur when the project name contains a period. Unfortunately, that's not the case in my setup, so I'm still stuck.

    Caused by: java.lang.IllegalArgumentException: Class file name must end with .class
    at org.eclipse.jdt.internal.core.PackageFragment.getClassFile(PackageFragment.java:182)
    at org.eclipse.jdt.internal.core.util.HandleFactory.createOpenable(HandleFactory.java:109)
    at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1177)
    at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches(JavaSearchParticipant.java:94)
    at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:223)
    at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:506)
    at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:551)
    at org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.internalSearch(RefactoringSearchEngine.java:142)
    at org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.search(RefactoringSearchEngine.java:129)
    at org.eclipse.jdt.internal.corext.refactoring.rename.RenameTypeProcessor.initializeReferences(RenameTypeProcessor.java:594)
    at org.eclipse.jdt.internal.corext.refactoring.rename.RenameTypeProcessor.doCheckFinalConditions(RenameTypeProcessor.java:522)
    at org.eclipse.jdt.internal.corext.refactoring.rename.JavaRenameProcessor.checkFinalConditions(JavaRenameProcessor.java:45)
    at org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.checkFinalConditions(ProcessorBasedRefactoring.java:225)
    at org.eclipse.ltk.core.refactoring.Refactoring.checkAllConditions(Refactoring.java:160)
    at org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper$Operation.run(RefactoringExecutionHelper.java:77)
    at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:39)
    at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:709)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800)
    at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:4650)
    at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:92)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
    

    Thanks McDowell, closing and opening the project seems to have fixed it (at least for now).

  • Jon Strayer
    Jon Strayer almost 15 years
    Minor typo. 2. Delete <workspace>.metadata.plugins\org.eclipse.jdt.core*.index
  • cimnine
    cimnine over 14 years
    This worked for me too. Found it here: u.nu/3aqy3 But it's the same procedure. ~Chris
  • Zsolt Török
    Zsolt Török almost 14 years
    Close & open worked for me, too. Previously I tried Project | Clean... on the whole workspace, but that didn't fix the problem. I'm wondering what project close & open does in addition to cleaning that project.
  • Roel Spilker
    Roel Spilker almost 14 years
    Closing and reopening my projects didn't help me :-( It seems like closing and reopening helps for some, but if it doesn't, you need to follow the advice by Olivier Dagenais
  • Uğur Güneri
    Uğur Güneri over 9 years
    clean option explanation: "if set to "true", any cached data used by the OSGi framework and eclipse runtime will be wiped clean. This will clean the caches used to store bundle dependency resolution and eclipse extension registry data. Using this option will force eclipse to reinitialize these caches."