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 f08345b2a740..f198bc2eef1e 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 @@ -6,6 +6,7 @@ import com.intellij.ide.util.gotoByName.ChooseByNameModel; import com.intellij.ide.util.gotoByName.ChooseByNamePopup; import com.intellij.ide.util.gotoByName.FilteringGotoByModel; import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.DumbService; @@ -41,9 +42,11 @@ public abstract class AbstractGotoSEContributor implements SearchEverywhereCo model.setFilterItems(filter.getSelectedElements()); ChooseByNamePopup popup = ChooseByNamePopup.createPopup(myProject, model, (PsiElement)null); ContributorSearchResult.Builder builder = ContributorSearchResult.builder(); - popup.getProvider().filterElements(popup, pattern, everywhere, progressIndicator, - o -> addFoundElement(o, model, builder, progressIndicator, elementsLimit) - ); + ApplicationManager.getApplication().runReadAction(() -> { + popup.getProvider().filterElements(popup, pattern, everywhere, progressIndicator, + o -> addFoundElement(o, model, builder, progressIndicator, elementsLimit) + ); + }); return builder.build(); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/RecentFilesSEContributor.java b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/RecentFilesSEContributor.java index ac7b938b48f1..de009d92017c 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/RecentFilesSEContributor.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/RecentFilesSEContributor.java @@ -2,6 +2,7 @@ package com.intellij.ide.actions.searcheverywhere; import com.google.common.collect.Lists; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.impl.EditorHistoryManager; import com.intellij.openapi.fileTypes.FileType; @@ -14,6 +15,7 @@ import com.intellij.psi.codeStyle.MinusculeMatcher; import com.intellij.psi.codeStyle.NameUtil; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -53,15 +55,21 @@ public class RecentFilesSEContributor extends FileSearchEverywhereContributor { List opened = Arrays.asList(FileEditorManager.getInstance(myProject).getSelectedFiles()); List history = Lists.reverse(EditorHistoryManager.getInstance(myProject).getFileList()); - PsiManager psiManager = PsiManager.getInstance(myProject); - Stream stream = history.stream(); - if (!StringUtil.isEmptyOrSpaces(pattern)) { - stream = stream.filter(file -> matcher.matches(file.getName())); - } - List res = stream.filter(vf -> !opened.contains(vf) && vf.isValid()) - .distinct() - .map(vf -> psiManager.findFile(vf)) - .collect(Collectors.toList()); + List res = new ArrayList<>(); + ApplicationManager.getApplication().runReadAction( + () -> { + PsiManager psiManager = PsiManager.getInstance(myProject); + Stream stream = history.stream(); + if (!StringUtil.isEmptyOrSpaces(pattern)) { + stream = stream.filter(file -> matcher.matches(file.getName())); + } + res.addAll(stream.filter(vf -> !opened.contains(vf) && vf.isValid()) + .distinct() + .map(vf -> psiManager.findFile(vf)) + .collect(Collectors.toList()) + ); + } + ); return res.size() > elementsLimit ? new ContributorSearchResult<>(res.subList(0, elementsLimit), 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 cdf8b9ea785c..f75891db4b33 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 @@ -638,36 +638,34 @@ public class SearchEverywhereUI extends BorderLayoutPanel implements Disposable, } private boolean addContributorItems(SearchEverywhereContributor contributor, int count, boolean clearBefore) { - boolean[] found = {false}; - ApplicationManager.getApplication().runReadAction(() -> { - ContributorSearchResult results = contributor.search(pattern, isUseNonProjectItems(), myContributorFilters.get(contributor.getSearchProviderId()), myProgressIndicator, count); - found[0] = !results.isEmpty(); + ContributorSearchResult results = + contributor.search(pattern, isUseNonProjectItems(), myContributorFilters.get(contributor.getSearchProviderId()), myProgressIndicator, count); + boolean found = !results.isEmpty(); - 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); - }); - - return found[0]; + return found; } protected void check() { @@ -944,11 +942,10 @@ public class SearchEverywhereUI extends BorderLayoutPanel implements Disposable, public void run(@NotNull ProgressIndicator indicator) { contributorsForAdditionalSearch.forEach(contributor -> { if (!progressIndicator.isCanceled()) { - ApplicationManager.getApplication().runReadAction(() -> { - //todo overflow #UX-1 - List foundElements = contributor.search(searchText, everywhere, myContributorFilters.get(contributor.getSearchProviderId()), progressIndicator); - fillUsages(foundElements, usages, targets); - }); + //todo overflow #UX-1 + List foundElements = + contributor.search(searchText, everywhere, myContributorFilters.get(contributor.getSearchProviderId()), progressIndicator); + fillUsages(foundElements, usages, targets); } }); }