show first result and start background thread to check the rest when search for implementations

This commit is contained in:
Anna.Kozlova
2016-11-08 10:15:19 +01:00
parent 44744a74bd
commit 26f30df96d
6 changed files with 81 additions and 27 deletions
@@ -28,6 +28,7 @@ import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.actionSystem.Shortcut;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
@@ -267,12 +268,7 @@ public class MarkerType {
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> {
OverridingMethodsSearch.search(method).forEach(new PsiElementProcessorAdapter<>(collectProcessor));
if (isAbstract && collectProcessor.getCollection().size() < 2) {
final PsiClass aClass = ApplicationManager.getApplication().runReadAction(new Computable<PsiClass>() {
@Override
public PsiClass compute() {
return method.getContainingClass();
}
});
final PsiClass aClass = ReadAction.compute(() -> method.getContainingClass());
if (aClass != null) {
FunctionalExpressionSearch.search(aClass).forEach(new PsiElementProcessorAdapter<>(collectExprProcessor));
}
@@ -353,11 +349,11 @@ public class MarkerType {
final PsiElementProcessor.CollectElementsWithLimit<PsiClass> collectProcessor = new PsiElementProcessor.CollectElementsWithLimit<>(2,
new THashSet<>());
final PsiElementProcessor.CollectElementsWithLimit<PsiFunctionalExpression> collectExprProcessor =
new PsiElementProcessor.CollectElementsWithLimit<>(2,
new PsiElementProcessor.CollectElementsWithLimit<>(1,
new THashSet<>());
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> {
ClassInheritorsSearch.search(aClass).forEach(new PsiElementProcessorAdapter<>(collectProcessor));
if (collectProcessor.getCollection().size() < 2) {
if (collectProcessor.getCollection().size() < 1) {
FunctionalExpressionSearch.search(aClass).forEach(new PsiElementProcessorAdapter<>(collectExprProcessor));
}
}, SEARCHING_FOR_OVERRIDDEN_METHODS, true, aClass.getProject(), (JComponent)e.getComponent())) {
@@ -392,6 +388,16 @@ public class MarkerType {
: DaemonBundle.message("navigation.title.subclass", myClass.getName(), size, suffix);
}
@Override
public void onFinished() {
super.onFinished();
PsiElement oneElement = getTheOnlyOneElement();
if (oneElement instanceof NavigatablePsiElement) {
((NavigatablePsiElement)oneElement).navigate(true);
myPopup.cancel();
}
}
@Override
public void run(@NotNull final ProgressIndicator indicator) {
super.run(indicator);
@@ -441,6 +447,16 @@ public class MarkerType {
DaemonBundle.message("navigation.title.overrider.method", myMethod.getName(), size);
}
@Override
public void onFinished() {
super.onFinished();
PsiElement oneElement = getTheOnlyOneElement();
if (oneElement instanceof NavigatablePsiElement) {
((NavigatablePsiElement)oneElement).navigate(true);
myPopup.cancel();
}
}
@Override
public void run(@NotNull final ProgressIndicator indicator) {
super.run(indicator);