diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java index e35d45803640..e0135b694ef2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java @@ -27,6 +27,7 @@ import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.project.ProjectManagerAdapter; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.patterns.ElementPattern; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -309,17 +310,25 @@ public class CompletionServiceImpl extends CompletionService{ private final CompletionLocation myLocation; public PreferStartMatching(CompletionLocation location) { - super("startMatching"); + super("middleMatching"); myLocation = location; } @Override public Classifier createClassifier(Classifier next) { - return new ComparingClassifier(next, "startMatching") { + return new ComparingClassifier(next, "middleMatching") { @NotNull @Override public Comparable getWeight(LookupElement element) { - PrefixMatcher itemMatcher = myLocation.getCompletionParameters().getLookup().itemMatcher(element); + Lookup lookup = myLocation.getCompletionParameters().getLookup(); + PrefixMatcher itemMatcher = lookup.itemMatcher(element); + String prefix = itemMatcher.getPrefix(); + if (StringUtil.isEmpty(prefix)) { + String pattern = lookup.itemPattern(element); + if (!pattern.equals(prefix)) { + itemMatcher = itemMatcher.cloneWithPrefix(pattern); + } + } for (String ls : element.getAllLookupStrings()) { if (itemMatcher.isStartMatch(ls)) { return false;