[^ann] show implemented methods popup faster (part of IDEA-155949)

This commit is contained in:
peter
2016-05-18 18:07:48 +02:00
parent 04355fa04f
commit 05ea6e7d8b
@@ -22,9 +22,9 @@ import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.searches.DefinitionsScopedSearch;
import com.intellij.psi.search.searches.FunctionalExpressionSearch;
import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.QueryExecutor;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -42,28 +42,24 @@ public class MethodImplementationsSearch implements QueryExecutor<PsiElement, De
public static boolean processImplementations(final PsiMethod psiMethod, final Processor<PsiElement> consumer,
final SearchScope searchScope) {
if (!FunctionalExpressionSearch.search(psiMethod, searchScope).forEach(expression -> {
return consumer.process(expression);
})) {
return false;
}
List<PsiMethod> methods = new ArrayList<PsiMethod>();
getOverridingMethods(psiMethod, methods, searchScope);
return ContainerUtil.process(methods, consumer);
return processOverridingMethods(psiMethod, searchScope, consumer::process) &&
FunctionalExpressionSearch.search(psiMethod, searchScope).forEach((Processor<PsiFunctionalExpression>)consumer::process);
}
@SuppressWarnings("unused")
public static void getOverridingMethods(PsiMethod method, List<PsiMethod> list, SearchScope scope) {
for (PsiMethod psiMethod : OverridingMethodsSearch.search(method, scope, true)) {
list.add(psiMethod);
}
processOverridingMethods(method, scope, new CommonProcessors.CollectProcessor<>(list));
}
private static boolean processOverridingMethods(PsiMethod method, SearchScope scope, Processor<PsiMethod> processor) {
return OverridingMethodsSearch.search(method, scope, true).forEach(processor);
}
@SuppressWarnings("UnusedDeclaration")
@Deprecated
public static PsiMethod[] getMethodImplementations(final PsiMethod method, SearchScope scope) {
List<PsiMethod> result = new ArrayList<PsiMethod>();
getOverridingMethods(method, result, scope);
processOverridingMethods(method, scope, new CommonProcessors.CollectProcessor<>(result));
return result.toArray(new PsiMethod[result.size()]);
}
}