mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 04:51:24 +07:00
KMA-432 Provide mechanism that inheritor searchers can use to avoid unnecessary work for participating queries
GitOrigin-RevId: 84cb945d4f6e979de56adcb50e3642bda80b9ab6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
aebcdf66d6
commit
6b13ec47a5
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.psi.search.searches;
|
||||
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
@@ -14,6 +15,7 @@ import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.*;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public final class ClassInheritorsSearch extends ExtensibleQueryFactory<PsiClass, ClassInheritorsSearch.SearchParameters> {
|
||||
@@ -87,6 +89,11 @@ public final class ClassInheritorsSearch extends ExtensibleQueryFactory<PsiClass
|
||||
return myIncludeAnonymous;
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
public boolean shouldSearchInLanguage(@NotNull Language language) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "'"+myClass.getQualifiedName()+
|
||||
@@ -140,7 +147,14 @@ public final class ClassInheritorsSearch extends ExtensibleQueryFactory<PsiClass
|
||||
@NotNull
|
||||
public static Query<PsiClass> search(@NotNull SearchParameters parameters) {
|
||||
if (!parameters.isCheckDeep()) {
|
||||
Query<PsiClass> directQuery = DirectClassInheritorsSearch.search(parameters.getClassToProcess(), parameters.getScope(), parameters.isIncludeAnonymous());
|
||||
Query<PsiClass> directQuery = DirectClassInheritorsSearch
|
||||
.search(new DirectClassInheritorsSearch.SearchParameters(parameters.getClassToProcess(), parameters.getScope(),
|
||||
parameters.isIncludeAnonymous(), true) {
|
||||
@Override
|
||||
public boolean shouldSearchInLanguage(@NotNull Language language) {
|
||||
return parameters.shouldSearchInLanguage(language);
|
||||
}
|
||||
});
|
||||
if (parameters.getNameCondition() != Conditions.<String>alwaysTrue()) {
|
||||
directQuery = new FilteredQuery<>(directQuery, psiClass -> parameters.getNameCondition()
|
||||
.value(ReadAction.compute(psiClass::getName)));
|
||||
|
||||
Reference in New Issue
Block a user