From 778f5af949b92a00a063969ca4b4e15a80f5a358 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 26 Nov 2015 14:45:52 +0100 Subject: [PATCH] don't fill common prefix for patterns consisting of model-specific markup only (EA-71994 - assert: DefaultChooseByNameItemProvider.convertToMatchingPattern) --- .../ide/util/gotoByName/ChooseByNameBase.java | 5 +---- .../gotoByName/DefaultChooseByNameItemProvider.java | 13 +++++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java index 3541bf6ef61c..e1b4f25b66ab 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java @@ -1365,11 +1365,8 @@ public abstract class ChooseByNameBase { } private void fillInCommonPrefix(@NotNull final String pattern) { - if (StringUtil.isEmpty(pattern) && !canShowListForEmptyPattern()) { - return; - } - final List list = myProvider.filterNames(ChooseByNameBase.this, getNames(myCheckBox.isSelected()), pattern); + if (list.isEmpty()) return; if (isComplexPattern(pattern)) return; //TODO: support '*' final String oldText = getTrimmedText(); diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultChooseByNameItemProvider.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultChooseByNameItemProvider.java index 2c029b745ac6..56488e842254 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultChooseByNameItemProvider.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultChooseByNameItemProvider.java @@ -63,6 +63,8 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider final ChooseByNameModel model = base.getModel(); String matchingPattern = convertToMatchingPattern(base, namePattern); + if (matchingPattern == null) return true; + List namesList = new ArrayList(); final CollectConsumer collect = new SynchronizedCollectConsumer(namesList); @@ -296,8 +298,11 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider @NotNull @Override public List filterNames(@NotNull ChooseByNameBase base, @NotNull String[] names, @NotNull String pattern) { + pattern = convertToMatchingPattern(base, pattern); + if (pattern == null) return Collections.emptyList(); + final List filtered = new ArrayList(); - processNamesByPattern(base, names, convertToMatchingPattern(base, pattern), ProgressIndicatorProvider.getGlobalProgressIndicator(), new Consumer() { + processNamesByPattern(base, names, pattern, ProgressIndicatorProvider.getGlobalProgressIndicator(), new Consumer() { @Override public void consume(MatchResult result) { synchronized (filtered) { @@ -332,12 +337,12 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider } } - @NotNull + @Nullable private static String convertToMatchingPattern(@NotNull ChooseByNameBase base, @NotNull String pattern) { pattern = removeModelSpecificMarkup(base.getModel(), pattern); - if (!base.canShowListForEmptyPattern()) { - LOG.assertTrue(!pattern.isEmpty(), base); + if (!base.canShowListForEmptyPattern() && pattern.isEmpty()) { + return null; } return addSearchAnywherePatternDecorationIfNeeded(base, pattern);