From 402bd30012f4b6a7a7d940cd38e3580b69e4a7c7 Mon Sep 17 00:00:00 2001 From: "Dmitry.Krasilschikov" Date: Tue, 29 Aug 2017 14:35:34 +0300 Subject: [PATCH] let ScopeOptimizer use restricted scope instead of scope to exclude --- .../src/com/intellij/psi/search/ScopeOptimizer.java | 11 +++++++++++ .../intellij/psi/search/SearchRequestCollector.java | 6 +++--- .../intellij/psi/impl/search/PsiSearchHelperImpl.java | 6 +++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/platform/indexing-api/src/com/intellij/psi/search/ScopeOptimizer.java b/platform/indexing-api/src/com/intellij/psi/search/ScopeOptimizer.java index b4452fa7db8d..90938422ade1 100644 --- a/platform/indexing-api/src/com/intellij/psi/search/ScopeOptimizer.java +++ b/platform/indexing-api/src/com/intellij/psi/search/ScopeOptimizer.java @@ -35,6 +35,17 @@ import org.jetbrains.annotations.Nullable; */ public interface ScopeOptimizer { + /** + * Please use {@link ScopeOptimizer#getScopeToRestrict(PsiElement)} instead + */ + @Deprecated @Nullable("is null when given optimizer can't provide a scope to exclude") GlobalSearchScope getScopeToExclude(@NotNull PsiElement element); + + @Nullable("is null when given optimizer can't provide a scope to restrict") + default SearchScope getScopeToRestrict(@NotNull PsiElement element) { + GlobalSearchScope scopeToExclude = getScopeToExclude(element); + + return scopeToExclude == null ? null : GlobalSearchScope.notScope(scopeToExclude); + } } diff --git a/platform/indexing-api/src/com/intellij/psi/search/SearchRequestCollector.java b/platform/indexing-api/src/com/intellij/psi/search/SearchRequestCollector.java index 7cf653893cc6..4243fa642f25 100644 --- a/platform/indexing-api/src/com/intellij/psi/search/SearchRequestCollector.java +++ b/platform/indexing-api/src/com/intellij/psi/search/SearchRequestCollector.java @@ -81,15 +81,15 @@ public class SearchRequestCollector { searchScope instanceof GlobalSearchScope && ((searchContext & UsageSearchContext.IN_CODE) != 0 || searchContext == UsageSearchContext.ANY)) { for (ScopeOptimizer optimizer : CODE_USAGE_SCOPE_OPTIMIZER_EP_NAME.getExtensions()) { - final GlobalSearchScope optimizedCodeUsageSearchScope = optimizer.getScopeToExclude(searchTarget); - if (optimizedCodeUsageSearchScope != null) { + final SearchScope restrictedCodeUsageSearchScope = optimizer.getScopeToRestrict(searchTarget); + if (restrictedCodeUsageSearchScope != null) { short exceptCodeSearchContext = searchContext == UsageSearchContext.ANY ? UsageSearchContext.IN_COMMENTS | UsageSearchContext.IN_STRINGS | UsageSearchContext.IN_FOREIGN_LANGUAGES | UsageSearchContext.IN_PLAIN_TEXT : (short)(searchContext ^ UsageSearchContext.IN_CODE); - GlobalSearchScope searchCodeUsageEffectiveScope = ((GlobalSearchScope)searchScope).intersectWith(GlobalSearchScope.notScope(optimizedCodeUsageSearchScope)); + SearchScope searchCodeUsageEffectiveScope = searchScope.intersectWith(restrictedCodeUsageSearchScope); requests = ContainerUtil.list(new PsiSearchRequest(searchCodeUsageEffectiveScope, word, UsageSearchContext.IN_CODE, caseSensitive, containerName, processor), new PsiSearchRequest(searchScope, word, exceptCodeSearchContext, caseSensitive, containerName, processor)); break; diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java index 4ef9dadfb307..6ecc2d1c8070 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java @@ -89,9 +89,9 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { } for (ScopeOptimizer optimizer : USE_SCOPE_OPTIMIZER_EP_NAME.getExtensions()) { ProgressManager.checkCanceled(); - final GlobalSearchScope scopeToExclude = optimizer.getScopeToExclude(element); - if (scopeToExclude != null) { - scope = scope.intersectWith(GlobalSearchScope.notScope(scopeToExclude)); + final SearchScope scopeToRestrict = optimizer.getScopeToRestrict(element); + if (scopeToRestrict != null) { + scope = scope.intersectWith(scopeToRestrict); } } return scope;