mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
search everywhere: restore broken ability to search across all providers
This commit is contained in:
+10
-3
@@ -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<Object> result = collector.getResult();
|
||||
|
||||
@@ -94,23 +94,29 @@ public abstract class OptionsTopHitProvider implements OptionsSearchTopHitProvid
|
||||
|
||||
List<String> 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<String> parts,
|
||||
@NotNull String id,
|
||||
@NotNull Consumer<Object> 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<Object> 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<Object> 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<Object> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user