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 2091111f8d71..00d806438553 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 @@ -96,6 +96,7 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider boolean previousElemSeparator = false; boolean wasElement = false; + List> patternsAndMatchers = getPatternsAndMatchers(qualifierPattern, base); for (String name : namesList) { indicator.checkCanceled(); if (name == ChooseByNameBase.NON_PREFIX_SEPARATOR) { @@ -109,7 +110,7 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider if (elements.length > 1) { sameNameElements.clear(); for (final Object element : elements) { - if (matchesQualifier(element, qualifierPattern, base)) { + if (matchesQualifier(element, base, patternsAndMatchers)) { sameNameElements.add(element); } } @@ -121,7 +122,7 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider wasElement = true; } } - else if (elements.length == 1 && matchesQualifier(elements[0], qualifierPattern, base)) { + else if (elements.length == 1 && matchesQualifier(elements[0], base, patternsAndMatchers)) { if (previousElemSeparator && !consumer.process(ChooseByNameBase.NON_PREFIX_SEPARATOR)) return; if (!consumer.process(elements[0])) return; previousElemSeparator = false; @@ -181,20 +182,12 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider } private static boolean matchesQualifier(final Object element, - @NotNull final String qualifierPattern, - @NotNull final ChooseByNameBase base) { + @NotNull final ChooseByNameBase base, + final List> patternsAndMatchers) { final String name = base.getModel().getFullName(element); if (name == null) return false; final List suspects = split(name, base); - final List> patternsAndMatchers = - ContainerUtil.map2List(split(qualifierPattern, base), new Function>() { - @NotNull - @Override - public Pair fun(String s) { - return Pair.create(getNamePattern(base, s), buildPatternMatcher(getNamePattern(base, s), NameUtil.MatchingCaseSensitivity.NONE)); - } - }); int matchPosition = 0; @@ -224,6 +217,16 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider return true; } + private static List> getPatternsAndMatchers(String qualifierPattern, final ChooseByNameBase base) { + return ContainerUtil.map2List(split(qualifierPattern, base), new Function>() { + @NotNull + @Override + public Pair fun(String s) { + return Pair.create(getNamePattern(base, s), buildPatternMatcher(getNamePattern(base, s), NameUtil.MatchingCaseSensitivity.NONE)); + } + }); + } + @NotNull @Override public List filterNames(@NotNull ChooseByNameBase base, @NotNull String[] names, @NotNull String pattern) {