diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateTree.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateTree.java index b05dc49d4d4e..fee95607a0e7 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateTree.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateTree.java @@ -22,9 +22,11 @@ import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.util.JDOMUtil; +import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.CheckboxTree; import com.intellij.ui.CheckedTreeNode; +import com.intellij.ui.SpeedSearchComparator; import com.intellij.ui.TreeSpeedSearch; import com.intellij.util.JdomKt; import com.intellij.util.SystemProperties; @@ -36,6 +38,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.tree.DefaultMutableTreeNode; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; +import java.util.Collections; import java.util.Set; /** @@ -72,7 +75,7 @@ class LiveTemplateTree extends CheckboxTree implements DataProvider, CopyProvide template.getTemplateText(); } return ""; - }, true); + }, true).setComparator(new SubstringSpeedSearchComparator()); } @Nullable @@ -143,4 +146,18 @@ class LiveTemplateTree extends CheckboxTree implements DataProvider, CopyProvide catch (Exception ignore) { } } + + private static class SubstringSpeedSearchComparator extends SpeedSearchComparator { + @Override + public int matchingDegree(String pattern, String text) { + return matchingFragments(pattern, text) != null ? 1 : 0; + } + + @Nullable + @Override + public Iterable matchingFragments(@NotNull String pattern, @NotNull String text) { + int index = StringUtil.indexOfIgnoreCase(text, pattern, 0); + return index >= 0 ? Collections.singleton(TextRange.from(index, pattern.length())) : null; + } + } }