mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] optimizes multi-release .class files filter (IDEA-CR-21588)
This commit is contained in:
+15
-4
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user