diff --git a/platform/lang-api/src/com/intellij/ide/actions/searcheverywhere/ContributorSearchResult.java b/platform/lang-api/src/com/intellij/ide/actions/searcheverywhere/ContributorSearchResult.java index 4819e47d838f..3355b2d118c6 100644 --- a/platform/lang-api/src/com/intellij/ide/actions/searcheverywhere/ContributorSearchResult.java +++ b/platform/lang-api/src/com/intellij/ide/actions/searcheverywhere/ContributorSearchResult.java @@ -11,6 +11,10 @@ public class ContributorSearchResult { return new Builder<>(); } + public static ContributorSearchResult empty() { + return new ContributorSearchResult<>(Collections.emptyList(), false); + } + public ContributorSearchResult(List items, boolean hasMoreItems) { this.items = items; this.hasMoreItems = hasMoreItems; diff --git a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/AbstractGotoSEContributor.java b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/AbstractGotoSEContributor.java index 67833eadb814..6f183fa11b58 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/AbstractGotoSEContributor.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/AbstractGotoSEContributor.java @@ -8,6 +8,7 @@ import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; @@ -27,6 +28,10 @@ public abstract class AbstractGotoSEContributor implements SearchEverywhereContr @Override public ContributorSearchResult search(Project project, String pattern, boolean everywhere, ProgressIndicator progressIndicator, int elementsLimit) { + if (!isDumbModeSupported() && DumbService.getInstance(project).isDumb()) { + return ContributorSearchResult.empty(); + } + ChooseByNameModel model = createModel(project); ChooseByNamePopup popup = ChooseByNamePopup.createPopup(project, model, (PsiElement)null); ContributorSearchResult.Builder builder = ContributorSearchResult.builder(); @@ -84,4 +89,8 @@ public abstract class AbstractGotoSEContributor implements SearchEverywhereContr return null; } + + protected boolean isDumbModeSupported() { + return false; + } } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/FileSearchEverywhereContributor.java b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/FileSearchEverywhereContributor.java index 0e7bf5f567ed..ecdbda37be8f 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/FileSearchEverywhereContributor.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/FileSearchEverywhereContributor.java @@ -68,4 +68,9 @@ public class FileSearchEverywhereContributor extends AbstractGotoSEContributor { return super.getItemData(dataId, element); } + + @Override + protected boolean isDumbModeSupported() { + return true; + } } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereUI.java b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereUI.java index 9aee49b1cf3e..94f11b47077f 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereUI.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereUI.java @@ -488,6 +488,13 @@ public class SearchEverywhereUI extends BorderLayoutPanel implements Disposable, updateHint(selectedValue); } }); + + myProject.getMessageBus().connect(this).subscribe(DumbService.DUMB_MODE, new DumbService.DumbModeListener() { + @Override + public void exitDumbMode() { + ApplicationManager.getApplication().invokeLater(() -> rebuildList()); + } + }); } private void elementSelected(int i, int modifiers) { @@ -603,34 +610,32 @@ public class SearchEverywhereUI extends BorderLayoutPanel implements Disposable, } private void addContributorItems(SearchEverywhereContributor contributor, int count, boolean clearBefore) { - if (!DumbService.getInstance(project).isDumb()) { - ApplicationManager.getApplication().runReadAction(() -> { - ContributorSearchResult results = contributor.search(project, pattern, isUseNonProjectItems(), myProgressIndicator, count); + ApplicationManager.getApplication().runReadAction(() -> { + ContributorSearchResult results = contributor.search(project, pattern, isUseNonProjectItems(), myProgressIndicator, count); - if (clearBefore) { - listOperationsAlarm.cancelAllRequests(); + if (clearBefore) { + listOperationsAlarm.cancelAllRequests(); + } + + listOperationsAlarm.addRequest(() -> { + if (isCanceled()) { + return; } - listOperationsAlarm.addRequest(() -> { - if (isCanceled()) { - return; - } - - Dimension oldSize = getPreferredSize(); - if (clearBefore) { - myListModel.clear(); - } - List itemsToAdd = results.getItems().stream() - .filter(o -> !myListModel.contains(o)) - .collect(Collectors.toList()); - if (!itemsToAdd.isEmpty()) { - myListModel.addElements(itemsToAdd, contributor, results.hasMoreItems()); - ScrollingUtil.ensureSelectionExists(myResultsList); - } - firePropertyChange("preferredSize", oldSize, getPreferredSize()); - }, 0); - }); - } + Dimension oldSize = getPreferredSize(); + if (clearBefore) { + myListModel.clear(); + } + List itemsToAdd = results.getItems().stream() + .filter(o -> !myListModel.contains(o)) + .collect(Collectors.toList()); + if (!itemsToAdd.isEmpty()) { + myListModel.addElements(itemsToAdd, contributor, results.hasMoreItems()); + ScrollingUtil.ensureSelectionExists(myResultsList); + } + firePropertyChange("preferredSize", oldSize, getPreferredSize()); + }, 0); + }); } protected void check() {