From 2bbb71a614999faad07d8d6d640d27f1727ad28e Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 28 Feb 2019 17:42:18 +0100 Subject: [PATCH] search everywhere: restore broken ability to search across all providers --- .../gotoByName/GotoActionItemProvider.java | 13 ++++++-- .../ide/ui/OptionsTopHitProvider.java | 33 +++++++++++++------ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/GotoActionItemProvider.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/GotoActionItemProvider.java index bc09e5456639..f5432bb0bff7 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/GotoActionItemProvider.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/GotoActionItemProvider.java @@ -4,6 +4,7 @@ package com.intellij.ide.util.gotoByName; import com.intellij.ide.DataManager; import com.intellij.ide.SearchTopHitProvider; import com.intellij.ide.actions.ApplyIntentionAction; +import com.intellij.ide.ui.OptionsSearchTopHitProvider; import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.search.ActionFromOptionDescriptorProvider; import com.intellij.ide.ui.search.OptionDescription; @@ -101,11 +102,17 @@ public class GotoActionItemProvider implements ChooseByNameItemProvider { String commandAccelerator = SearchTopHitProvider.getTopHitAccelerator(); for (SearchTopHitProvider provider : SearchTopHitProvider.EP_NAME.getExtensions()) { //noinspection deprecation - if (provider instanceof OptionsTopHitProvider.CoveredByToggleActions) continue; - if (provider instanceof OptionsTopHitProvider && !StringUtil.startsWith(pattern, commandAccelerator)) { - String prefix = commandAccelerator + ((OptionsTopHitProvider)provider).getId() + " "; + if (provider instanceof OptionsTopHitProvider.CoveredByToggleActions) { + continue; + } + + if (provider instanceof OptionsSearchTopHitProvider && !StringUtil.startsWith(pattern, commandAccelerator)) { + String prefix = commandAccelerator + ((OptionsSearchTopHitProvider)provider).getId() + " "; provider.consumeTopHits(prefix + pattern, collector, project); } + else if (project != null && provider instanceof OptionsTopHitProvider.ProjectLevelProvidersAdapter) { + ((OptionsTopHitProvider.ProjectLevelProvidersAdapter)provider).consumeAllTopHits(pattern, collector, project); + } provider.consumeTopHits(pattern, collector, project); } Collection result = collector.getResult(); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/OptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/OptionsTopHitProvider.java index 29ccc082029b..f24555c1c87c 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/OptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/OptionsTopHitProvider.java @@ -94,23 +94,29 @@ public abstract class OptionsTopHitProvider implements OptionsSearchTopHitProvid List parts = StringUtil.split(pattern, " "); if (!parts.isEmpty()) { - doConsumeTopHits(provider, pattern, parts, collector, project); + doConsumeTopHits(provider, pattern, parts.get(0), collector, project); } } private static void doConsumeTopHits(@NotNull OptionsSearchTopHitProvider provider, @NotNull String pattern, - @NotNull List parts, + @NotNull String id, @NotNull Consumer collector, @Nullable Project project) { - String id = parts.get(0); if (provider.getId().startsWith(id) || pattern.startsWith(" ")) { pattern = pattern.startsWith(" ") ? pattern.trim() : pattern.substring(id.length()).trim().toLowerCase(Locale.ENGLISH); - final MinusculeMatcher matcher = NameUtil.buildMatcher("*" + pattern, NameUtil.MatchingCaseSensitivity.NONE); - for (OptionDescription option : getCachedOptions(provider, project)) { - if (matcher.matches(option.getOption())) { - collector.accept(option); - } + MinusculeMatcher matcher = NameUtil.buildMatcher("*" + pattern, NameUtil.MatchingCaseSensitivity.NONE); + consumeTopHitsForApplicableProvider(provider, matcher, collector, project); + } + } + + private static void consumeTopHitsForApplicableProvider(@NotNull OptionsSearchTopHitProvider provider, + @NotNull MinusculeMatcher matcher, + @NotNull Consumer collector, + @Nullable Project project) { + for (OptionDescription option : getCachedOptions(provider, project)) { + if (matcher.matches(option.getOption())) { + collector.accept(option); } } } @@ -179,7 +185,7 @@ public abstract class OptionsTopHitProvider implements OptionsSearchTopHitProvid // ours ProjectLevelProvider registered in ours projectOptionsTopHitProvider extension point, // not in common topHitProvider, so, this adapter is required to expose ours project level providers. - static final class ProjectLevelProvidersAdapter implements SearchTopHitProvider { + public static final class ProjectLevelProvidersAdapter implements SearchTopHitProvider { @Override public void consumeTopHits(@NotNull String pattern, @NotNull Consumer collector, @Nullable Project project) { if (project == null) { @@ -197,7 +203,14 @@ public abstract class OptionsTopHitProvider implements OptionsSearchTopHitProvid } for (OptionsSearchTopHitProvider.ProjectLevelProvider provider : PROJECT_LEVEL_EP.getExtensionList()) { - doConsumeTopHits(provider, pattern, parts, collector, project); + doConsumeTopHits(provider, pattern, parts.get(0), collector, project); + } + } + + public void consumeAllTopHits(@NotNull String pattern, @NotNull Consumer collector, @Nullable Project project) { + MinusculeMatcher matcher = NameUtil.buildMatcher("*" + pattern, NameUtil.MatchingCaseSensitivity.NONE); + for (OptionsSearchTopHitProvider.ProjectLevelProvider provider : PROJECT_LEVEL_EP.getExtensionList()) { + consumeTopHitsForApplicableProvider(provider, matcher, collector, project); } } }