From ce763a71b5c5bce0d98bc8f70cd44b90c7b99830 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 30 May 2025 15:45:04 +0200 Subject: [PATCH] [core-api] Extract GlobalSearchScopeUtil.includeContainingFile GitOrigin-RevId: 188ead3e7011e20da66cae92c848c75d801d690a --- .../searches/DirectClassInheritorsSearch.java | 12 ++---------- platform/core-api/api-dump-unreviewed.txt | 1 + .../psi/search/GlobalSearchScopeUtil.java | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/java/java-indexing-api/src/com/intellij/psi/search/searches/DirectClassInheritorsSearch.java b/java/java-indexing-api/src/com/intellij/psi/search/searches/DirectClassInheritorsSearch.java index 67ef534f02d4..54389af25edc 100644 --- a/java/java-indexing-api/src/com/intellij/psi/search/searches/DirectClassInheritorsSearch.java +++ b/java/java-indexing-api/src/com/intellij/psi/search/searches/DirectClassInheritorsSearch.java @@ -3,10 +3,9 @@ package com.intellij.psi.search.searches; import com.intellij.lang.Language; import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiFile; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.GlobalSearchScopeUtil; import com.intellij.psi.search.SearchScope; import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.Query; @@ -107,14 +106,7 @@ public final class DirectClassInheritorsSearch extends ExtensibleQueryFactory search(@NotNull PsiClass aClass) { GlobalSearchScope scope = GlobalSearchScope.allScope(PsiUtilCore.getProjectInReadAction(aClass)); - PsiFile file = aClass.getContainingFile(); - if (file != null) { - VirtualFile vFile = file.getVirtualFile(); - if (vFile != null && !scope.contains(vFile)) { - // include file scope to properly support scratch files - scope = scope.union(GlobalSearchScope.fileScope(file)); - } - } + scope = GlobalSearchScopeUtil.includeContainingFile(scope, aClass); return search(aClass, scope); } diff --git a/platform/core-api/api-dump-unreviewed.txt b/platform/core-api/api-dump-unreviewed.txt index 40e61469843f..380d15524533 100644 --- a/platform/core-api/api-dump-unreviewed.txt +++ b/platform/core-api/api-dump-unreviewed.txt @@ -3203,6 +3203,7 @@ f:com.intellij.psi.search.GlobalSearchScopeUtil - s:flattenIntersectionScope(com.intellij.psi.search.GlobalSearchScope):java.util.List - s:flattenUnionScope(com.intellij.psi.search.GlobalSearchScope):java.util.List - s:getLocalScopeFiles(com.intellij.psi.search.LocalSearchScope):java.util.Set +- s:includeContainingFile(com.intellij.psi.search.GlobalSearchScope,com.intellij.psi.PsiElement):com.intellij.psi.search.GlobalSearchScope - s:isIntersectionScope(com.intellij.psi.search.GlobalSearchScope):Z - s:toGlobalSearchScope(com.intellij.psi.search.SearchScope,com.intellij.openapi.project.Project):com.intellij.psi.search.GlobalSearchScope c:com.intellij.psi.search.LocalSearchScope diff --git a/platform/core-api/src/com/intellij/psi/search/GlobalSearchScopeUtil.java b/platform/core-api/src/com/intellij/psi/search/GlobalSearchScopeUtil.java index 3660860fc5c6..c5db6bf702a1 100644 --- a/platform/core-api/src/com/intellij/psi/search/GlobalSearchScopeUtil.java +++ b/platform/core-api/src/com/intellij/psi/search/GlobalSearchScopeUtil.java @@ -75,4 +75,23 @@ public final class GlobalSearchScopeUtil { result.add(scope); } } + + /** + * Modifies the scope if necessary to include the file of the given element. + * This is useful to properly support search in scratch files. + * + * @param scope scope to update + * @param element element whose file should be included in the scope + * @return the corrected scope. Returns the original scope if it already includes the file of the element. + */ + public static GlobalSearchScope includeContainingFile(@NotNull GlobalSearchScope scope, @NotNull PsiElement element) { + PsiFile file = element.getContainingFile(); + if (file != null) { + VirtualFile vFile = file.getVirtualFile(); + if (vFile != null && !scope.contains(vFile)) { + return scope.union(GlobalSearchScope.fileScope(file)); + } + } + return scope; + } }