KMA-432 Provide mechanism that inheritor searchers can use to avoid unnecessary work for participating queries

GitOrigin-RevId: 84cb945d4f6e979de56adcb50e3642bda80b9ab6
This commit is contained in:
Florian Kistner
2022-05-30 20:26:46 +02:00
committed by intellij-monorepo-bot
parent aebcdf66d6
commit 6b13ec47a5
3 changed files with 40 additions and 13 deletions

View File

@@ -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)));