diff --git a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java index 7cd6659be3aa..16b30c387940 100644 --- a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java @@ -21,11 +21,13 @@ import com.intellij.codeInsight.completion.JavaCompletionUtil; import com.intellij.codeInsight.completion.PrefixMatcher; import com.intellij.lang.Language; import com.intellij.lang.StdLanguages; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; @@ -297,10 +299,13 @@ public class CodeInsightUtil { } return true; }); - } else { - Query baseQuery = ClassInheritorsSearch.search( - new ClassInheritorsSearch.SearchParameters(baseClass, scope, true, true, false, matcher::prefixMatches)); - Query query = new FilteredQuery<>(baseQuery, psiClass -> !(psiClass instanceof PsiTypeParameter)); + } + else { + Query baseQuery = ClassInheritorsSearch.search(baseClass, scope, true, true, false); + Query query = new FilteredQuery<>(baseQuery, psiClass -> { + String name = ApplicationManager.getApplication().runReadAction((Computable)psiClass::getName); + return !(psiClass instanceof PsiTypeParameter) && name != null && matcher.prefixMatches(name); + }); query.forEach(inheritorsProcessor); } } diff --git a/java/java-indexing-api/src/com/intellij/psi/search/searches/ClassInheritorsSearch.java b/java/java-indexing-api/src/com/intellij/psi/search/searches/ClassInheritorsSearch.java index 24120e292835..2c1e34be09d0 100644 --- a/java/java-indexing-api/src/com/intellij/psi/search/searches/ClassInheritorsSearch.java +++ b/java/java-indexing-api/src/com/intellij/psi/search/searches/ClassInheritorsSearch.java @@ -26,6 +26,7 @@ import com.intellij.psi.SmartPointerManager; import com.intellij.psi.SmartPsiElementPointer; import com.intellij.psi.search.SearchScope; import com.intellij.util.AbstractQuery; +import com.intellij.util.FilteredQuery; import com.intellij.util.Query; import com.intellij.util.QueryExecutor; import com.intellij.util.containers.ContainerUtil; @@ -135,8 +136,12 @@ public class ClassInheritorsSearch extends ExtensibleQueryFactory search(@NotNull SearchParameters parameters) { if (!parameters.isCheckDeep()) { - return AbstractQuery.wrapInReadAction(DirectClassInheritorsSearch.search(parameters.getClassToProcess(), parameters.getScope(), parameters.isIncludeAnonymous(), - parameters.isCheckInheritance())); + Query directQuery = DirectClassInheritorsSearch.search(parameters.getClassToProcess(), parameters.getScope(), parameters.isIncludeAnonymous()); + if (parameters.getNameCondition() != Conditions.alwaysTrue()) { + directQuery = new FilteredQuery<>(directQuery, psiClass -> parameters.getNameCondition() + .value(ApplicationManager.getApplication().runReadAction((Computable)psiClass::getName))); + } + return AbstractQuery.wrapInReadAction(directQuery); } return INSTANCE.createUniqueResultsQuery(parameters, ContainerUtil.canonicalStrategy(), psiClass -> ApplicationManager.getApplication().runReadAction((Computable>)() -> SmartPointerManager.getInstance(psiClass.getProject()).createSmartPsiElementPointer(psiClass))); @@ -145,7 +150,7 @@ public class ClassInheritorsSearch extends ExtensibleQueryFactory search(@NotNull final PsiClass aClass, @NotNull SearchScope scope, final boolean checkDeep, final boolean checkInheritance) { return search(aClass, scope, checkDeep, checkInheritance, true); @@ -153,7 +158,7 @@ public class ClassInheritorsSearch extends ExtensibleQueryFactory search(@NotNull final PsiClass aClass, @NotNull SearchScope scope, final boolean checkDeep) { - return search(aClass, scope, checkDeep, true); + return search(aClass, scope, checkDeep, true, true); } @NotNull