protected void installSpeedSearch() {
    final TreeSpeedSearch treeSpeedSearch =
        new TreeSpeedSearch(
            myTree,
            new Convertor<TreePath, String>() {
              @Override
              @Nullable
              public String convert(TreePath path) {
                final ElementNode lastPathComponent = (ElementNode) path.getLastPathComponent();
                if (lastPathComponent == null) return null;
                String text = lastPathComponent.getDelegate().getText();
                if (text != null) {
                  int i = text.indexOf(':');
                  if (i >= 0) {
                    text = text.substring(0, i);
                  }
                  i = text.indexOf('(');
                  if (i >= 0) {
                    text = text.substring(0, i);
                  }
                }
                return text;
              }
            });
    treeSpeedSearch.setComparator(getSpeedSearchComparator());

    treeSpeedSearch.addChangeListener(
        new PropertyChangeListener() {
          @Override
          public void propertyChange(PropertyChangeEvent evt) {
            myTree.repaint(); // to update match highlighting
          }
        });
  }