diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaSourceFilterScope.java b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaSourceFilterScope.java index 5dc691c9661f..130ed1dee31e 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaSourceFilterScope.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaSourceFilterScope.java @@ -19,6 +19,7 @@ import com.intellij.ide.highlighter.JavaClassFileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.search.DelegatingGlobalSearchScope; import com.intellij.psi.search.GlobalSearchScope; @@ -44,7 +45,7 @@ public class JavaSourceFilterScope extends DelegatingGlobalSearchScope { } @Override - public boolean contains(@NotNull final VirtualFile file) { + public boolean contains(@NotNull VirtualFile file) { if (!super.contains(file)) { return false; } @@ -54,14 +55,24 @@ public class JavaSourceFilterScope extends DelegatingGlobalSearchScope { } if (JavaClassFileType.INSTANCE == file.getFileType()) { - return myIndex.isInLibraryClasses(file) && (myIncludeVersions || !isVersioned(file)); + return myIndex.isInLibraryClasses(file) && (myIncludeVersions || !isVersioned(file, myIndex)); } return myIndex.isInSourceContent(file) || myBaseScope.isForceSearchingInLibrarySources() && myIndex.isInLibrarySource(file); } - private static boolean isVersioned(VirtualFile file) { - return file.getPath().contains("/META-INF/versions/"); + private static boolean isVersioned(VirtualFile file, ProjectFileIndex index) { + VirtualFile root = index.getClassRootForFile(file); + while ((file = file.getParent()) != null && !file.equals(root)) { + if (Comparing.equal(file.getNameSequence(), "versions")) { + VirtualFile parent = file.getParent(); + if (parent != null && Comparing.equal(parent.getNameSequence(), "META-INF")) { + return true; + } + } + } + + return false; } } \ No newline at end of file