diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java index a5f1721aafe3..0ecf8a67ecfa 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java @@ -68,7 +68,7 @@ public class FrameworksTree extends CheckboxTree { @Override protected void installSpeedSearch() { - new TreeSpeedSearch(this, false, path -> { + TreeSpeedSearch.installOn(this, false, path -> { Object node = path.getLastPathComponent(); if (node instanceof FrameworkSupportNodeBase) { return ((FrameworkSupportNodeBase)node).getTitle(); diff --git a/java/idea-ui/src/com/intellij/jarRepository/settings/DependencyExclusionEditor.java b/java/idea-ui/src/com/intellij/jarRepository/settings/DependencyExclusionEditor.java index a9401a4c9fb9..b9e6f7b5b74e 100644 --- a/java/idea-ui/src/com/intellij/jarRepository/settings/DependencyExclusionEditor.java +++ b/java/idea-ui/src/com/intellij/jarRepository/settings/DependencyExclusionEditor.java @@ -57,7 +57,7 @@ class DependencyExclusionEditor { }, myRootNode, policy) { @Override protected void installSpeedSearch() { - new TreeSpeedSearch(this, false, treePath -> { + TreeSpeedSearch.installOn(this, false, treePath -> { Object node = treePath.getLastPathComponent(); if (!(node instanceof CheckedTreeNode)) return ""; Object data = ((CheckedTreeNode)node).getUserObject(); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java index 864827c63b2f..6a6ea93f4dc0 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java @@ -58,7 +58,7 @@ public final class ProjectJdksConfigurable extends MasterDetailsComponent { @Override protected void initTree() { super.initTree(); - new TreeSpeedSearch(myTree, true, treePath -> ((MyNode)treePath.getLastPathComponent()).getDisplayName()); + TreeSpeedSearch.installOn(myTree, true, treePath -> ((MyNode)treePath.getLastPathComponent()).getDisplayName()); myTree.setRootVisible(false); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTree.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTree.java index 876594f2d019..99cfa141e630 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTree.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTree.java @@ -63,7 +63,7 @@ public class LayoutTree extends SimpleDnDAwareTree implements AdvancedDnDSource } return ""; }; - new TreeSpeedSearch(this, true, f); + TreeSpeedSearch.installOn(this, true, f); } private List> getNodesToDrag() { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java index e3769576b75f..c2694b4d3128 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java @@ -126,7 +126,7 @@ public abstract class BaseStructureConfigurable extends MasterDetailsComponent i myWasTreeInitialized = true; super.initTree(); - new TreeSpeedSearch(myTree, true, treePath -> getTextForSpeedSearch((MyNode)treePath.getLastPathComponent())); + TreeSpeedSearch.installOn(myTree, true, treePath -> getTextForSpeedSearch((MyNode)treePath.getLastPathComponent())); ToolTipManager.sharedInstance().registerComponent(myTree); myTree.setCellRenderer(new ProjectStructureElementRenderer(myContext)); } diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/typeMigration/ui/MigrationPanel.java b/java/java-impl-refactorings/src/com/intellij/refactoring/typeMigration/ui/MigrationPanel.java index 1c478240dfd0..624460195978 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/typeMigration/ui/MigrationPanel.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/typeMigration/ui/MigrationPanel.java @@ -240,7 +240,7 @@ public final class MigrationPanel extends JPanel implements Disposable { TreeUtil.expandAll(tree); SmartExpander.installOn(tree); EditSourceOnDoubleClickHandler.install(tree); - new TreeSpeedSearch(tree); + TreeUIHelper.getInstance().installTreeSpeedSearch(tree); PopupHandler.installPopupMenu(tree, createTreePopupActions(), "MigrationPanelPopup"); } diff --git a/java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java b/java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java index ea519516ec8e..07b1095f0c4f 100644 --- a/java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java +++ b/java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java @@ -204,7 +204,7 @@ public final class CyclicDependenciesPanel extends JPanel implements Disposable, TreeUtil.installActions(tree); SmartExpander.installOn(tree); EditSourceOnDoubleClickHandler.install(tree); - new TreeSpeedSearch(tree); + TreeUIHelper.getInstance().installTreeSpeedSearch(tree); PopupHandler.installPopupMenu(tree, createTreePopupActions(), "CyclicDependenciesPopup"); } diff --git a/java/java-impl/src/com/intellij/ide/util/PackageChooserDialog.java b/java/java-impl/src/com/intellij/ide/util/PackageChooserDialog.java index d7b1a857c8f3..5d007e1808d1 100644 --- a/java/java-impl/src/com/intellij/ide/util/PackageChooserDialog.java +++ b/java/java-impl/src/com/intellij/ide/util/PackageChooserDialog.java @@ -117,7 +117,7 @@ public class PackageChooserDialog extends PackageChooser { JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTree); scrollPane.setPreferredSize(JBUI.size(500, 300)); - new TreeSpeedSearch(myTree, false, path -> { + TreeSpeedSearch.installOn(myTree, false, path -> { DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent(); Object object = node.getUserObject(); if (object instanceof PsiPackage) return ((PsiPackage)object).getName(); diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java index ba63c3cc3ac7..6110c11f3ad0 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java @@ -146,7 +146,7 @@ public final class PushLog extends JPanel implements Disposable, DataProvider { @Override protected void installSpeedSearch() { - new TreeSpeedSearch(this, false, path -> { + TreeSpeedSearch.installOn(this, false, path -> { Object pathComponent = path.getLastPathComponent(); if (pathComponent instanceof RepositoryNode) { return ((RepositoryNode)pathComponent).getRepositoryName(); diff --git a/platform/execution-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java b/platform/execution-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java index 5e2246e87994..1c0fe461d16c 100644 --- a/platform/execution-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java +++ b/platform/execution-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java @@ -12,7 +12,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.NlsSafe; import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.TreeUIHelper; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.SmartList; import com.intellij.util.containers.CollectionFactory; @@ -64,7 +64,7 @@ public abstract class BaseExecuteBeforeRunDialog> ext tree.setRootVisible(false); tree.setShowsRootHandles(true); TreeUtil.installActions(tree); - new TreeSpeedSearch(tree); + TreeUIHelper.getInstance().installTreeSpeedSearch(tree); tree.addMouseListener(new MouseAdapter() { @Override diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/ExternalSystemTasksTree.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/ExternalSystemTasksTree.java index 77c2cb3d99f8..3a7b4800ed1a 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/ExternalSystemTasksTree.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/ExternalSystemTasksTree.java @@ -6,7 +6,7 @@ import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExe import com.intellij.openapi.externalSystem.model.execution.ExternalTaskExecutionInfo; import com.intellij.openapi.externalSystem.util.ExternalSystemUtil; import com.intellij.openapi.project.Project; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.TreeUIHelper; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.Alarm; import com.intellij.util.ui.tree.TreeModelAdapter; @@ -74,7 +74,7 @@ public class ExternalSystemTasksTree extends Tree implements Supplier mySelectionAlarm.cancelAndRequest()); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); EditSourceOnDoubleClickHandler.install(myTree); EditSourceOnEnterKeyHandler.install(myTree); PopupHandler.installPopupMenu(myTree, getPopupHandlerGroupId(), "ProblemsView.ToolWindow.TreePopup"); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/onSave/FormatOnSaveActionInfoBase.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/onSave/FormatOnSaveActionInfoBase.java index df6cfd8e1449..48b7601ee536 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/actions/onSave/FormatOnSaveActionInfoBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/onSave/FormatOnSaveActionInfoBase.java @@ -145,7 +145,7 @@ public abstract class FormatOnSaveActionInfoBase { + TreeSpeedSearch.installOn(this, false, path -> { final CheckedTreeNode node = (CheckedTreeNode)path.getLastPathComponent(); final Object userObject = node.getUserObject(); if (userObject instanceof FileType) { diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java index 430d76f61e30..98fb5c615283 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java @@ -101,7 +101,7 @@ public class InspectionTree extends Tree { EditSourceOnEnterKeyHandler.install(this); TreeUtil.installActions(this); PopupHandler.installPopupMenu(this, IdeActions.INSPECTION_TOOL_WINDOW_TREE_POPUP, ActionPlaces.CODE_INSPECTION); - new TreeSpeedSearch(this, false, o -> InspectionsConfigTreeComparator.getDisplayTextToSort(o.getLastPathComponent().toString())); + TreeSpeedSearch.installOn(this, false, o -> InspectionsConfigTreeComparator.getDisplayTextToSort(o.getLastPathComponent().toString())); } getModel().addTreeModelListener(new TreeModelAdapter() { diff --git a/platform/lang-impl/src/com/intellij/execution/services/ServiceViewTree.java b/platform/lang-impl/src/com/intellij/execution/services/ServiceViewTree.java index 2d2877512624..df1cd6b10f1c 100644 --- a/platform/lang-impl/src/com/intellij/execution/services/ServiceViewTree.java +++ b/platform/lang-impl/src/com/intellij/execution/services/ServiceViewTree.java @@ -5,10 +5,7 @@ import com.intellij.execution.services.ServiceModel.ServiceViewItem; import com.intellij.ide.DataManager; import com.intellij.navigation.ItemPresentation; import com.intellij.openapi.Disposable; -import com.intellij.ui.ComponentUtil; -import com.intellij.ui.DoubleClickListener; -import com.intellij.ui.LoadingNode; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.*; import com.intellij.ui.tree.AsyncTreeModel; import com.intellij.ui.treeStructure.Tree; import org.jetbrains.annotations.NotNull; @@ -48,7 +45,7 @@ class ServiceViewTree extends Tree { ComponentUtil.putClientProperty(this, ANIMATION_IN_RENDERER_ALLOWED, true); // listeners - new TreeSpeedSearch(this, true, DISPLAY_NAME_CONVERTER); + TreeSpeedSearch.installOn(this, true, DISPLAY_NAME_CONVERTER); ServiceViewTreeLinkMouseListener mouseListener = new ServiceViewTreeLinkMouseListener(this); mouseListener.installOn(this); new DoubleClickListener() { diff --git a/platform/lang-impl/src/com/intellij/ide/bookmark/ui/BookmarksView.kt b/platform/lang-impl/src/com/intellij/ide/bookmark/ui/BookmarksView.kt index b06f73d7a728..e78b059017a5 100644 --- a/platform/lang-impl/src/com/intellij/ide/bookmark/ui/BookmarksView.kt +++ b/platform/lang-impl/src/com/intellij/ide/bookmark/ui/BookmarksView.kt @@ -25,7 +25,7 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.ui.OnePixelSplitter import com.intellij.ui.PopupHandler import com.intellij.ui.ScrollPaneFactory.createScrollPane -import com.intellij.ui.TreeSpeedSearch +import com.intellij.ui.TreeUIHelper import com.intellij.ui.preview.DescriptorPreview import com.intellij.ui.tree.AsyncTreeModel import com.intellij.ui.tree.RestoreSelectionListener @@ -237,7 +237,7 @@ class BookmarksView(val project: Project, showToolbar: Boolean?) override fun focusGained(event: FocusEvent?) = selectionAlarm.cancelAndRequest() }) - TreeSpeedSearch(tree) + TreeUIHelper.getInstance().installTreeSpeedSearch(tree) TreeUtil.promiseSelectFirstLeaf(tree) tree.registerNavigateOnEnterAction { editSourceListeners.forEach { it.onEditSource() } } EditSourceOnDoubleClickHandler.install(tree) { editSourceListeners.forEach { it.onEditSource() } } diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateTabAsTree.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateTabAsTree.java index b9fbac5f6e13..b6e7db22bb0c 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateTabAsTree.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateTabAsTree.java @@ -6,7 +6,7 @@ import com.intellij.ide.fileTemplates.FileTemplate; import com.intellij.ide.fileTemplates.FileTemplateDescriptor; import com.intellij.ide.fileTemplates.FileTemplateGroupDescriptor; import com.intellij.openapi.util.NlsContexts; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.TreeUIHelper; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; @@ -43,7 +43,7 @@ abstract class FileTemplateTabAsTree extends FileTemplateTab { onTemplateSelected(); } }); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); } protected abstract FileTemplateNode initModel(); diff --git a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java index d1fc98ea9377..e275e1ee87ac 100644 --- a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java +++ b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java @@ -13,7 +13,7 @@ import com.intellij.psi.NavigatablePsiElement; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiUtilCore; import com.intellij.ui.AutoScrollToSourceHandler; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.TreeUIHelper; import com.intellij.ui.content.Content; import com.intellij.ui.content.tabs.PinToolwindowTabAction; import com.intellij.ui.tree.StructureTreeModel; @@ -262,7 +262,7 @@ public abstract class HierarchyBrowserBase extends SimpleToolWindowPanel impleme tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); tree.setToggleClickCount(-1); tree.setCellRenderer(new HierarchyNodeRenderer()); - new TreeSpeedSearch(tree); + TreeUIHelper.getInstance().installTreeSpeedSearch(tree); TreeUtil.installActions(tree); myAutoScrollToSourceHandler.install(tree); } diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/AbstractProjectViewPaneWithAsyncSupport.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/AbstractProjectViewPaneWithAsyncSupport.java index b0bf598eb047..d9fd62a7921c 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/AbstractProjectViewPaneWithAsyncSupport.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/AbstractProjectViewPaneWithAsyncSupport.java @@ -21,6 +21,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.TreeUIHelper; import com.intellij.ui.stripe.ErrorStripe; import com.intellij.ui.stripe.ErrorStripePainter; import com.intellij.ui.stripe.TreeUpdater; @@ -160,7 +161,7 @@ public abstract class AbstractProjectViewPaneWithAsyncSupport extends AbstractPr ToolTipManager.sharedInstance().registerComponent(myTree); TreeUtil.installActions(myTree); - new MySpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); myTree.addKeyListener(new PsiCopyPasteManager.EscapeHandler()); CustomizationUtil.installPopupHandler(myTree, IdeActions.GROUP_PROJECT_VIEW_POPUP, ActionPlaces.PROJECT_VIEW_POPUP); diff --git a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeViewPane.java b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeViewPane.java index 0399dd0ca9e5..07cfb1307b87 100644 --- a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeViewPane.java +++ b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeViewPane.java @@ -27,7 +27,7 @@ import com.intellij.psi.search.scope.packageSet.NamedScope; import com.intellij.psi.search.scope.packageSet.NamedScopeManager; import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.TreeUIHelper; import com.intellij.ui.stripe.ErrorStripePainter; import com.intellij.ui.stripe.TreeUpdater; import com.intellij.ui.tree.AsyncTreeModel; @@ -182,7 +182,7 @@ public final class ScopeViewPane extends AbstractProjectViewPane { EditSourceOnDoubleClickHandler.install(myTree); EditSourceOnEnterKeyHandler.install(myTree); CustomizationUtil.installPopupHandler(myTree, IdeActions.GROUP_SCOPE_VIEW_POPUP, ActionPlaces.SCOPE_VIEW_POPUP); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); enableDnD(); myTree.getEmptyText() .setText(IdeBundle.message("scope.view.empty.text")) diff --git a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java index a596af2c9ea2..65ea2a1d0e0b 100644 --- a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java +++ b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java @@ -228,7 +228,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre TreeUtil.installActions(getTree()); - new TreeSpeedSearch(getTree(), false, treePath -> { + TreeSpeedSearch.installOn(getTree(), false, treePath -> { Object userObject = TreeUtil.getLastUserObject(treePath); return userObject != null ? FileStructurePopup.getSpeedSearchText(userObject) : null; }); diff --git a/platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java b/platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java index 183fb8ff88d3..5b9a21c42102 100644 --- a/platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java @@ -177,7 +177,7 @@ public abstract class TodoPanel extends SimpleToolWindowPanel implements Occuren myTree.setCellRenderer(new TodoCompositeRenderer()); EditSourceOnDoubleClickHandler.install(myTree); EditSourceOnEnterKeyHandler.install(myTree); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); DefaultActionGroup group = new DefaultActionGroup(); group.add(ActionManager.getInstance().getAction(IdeActions.ACTION_EDIT_SOURCE)); diff --git a/platform/lang-impl/src/com/intellij/ide/util/AbstractTreeClassChooserDialog.java b/platform/lang-impl/src/com/intellij/ide/util/AbstractTreeClassChooserDialog.java index 0556811d0fb0..3f69cca74801 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/AbstractTreeClassChooserDialog.java +++ b/platform/lang-impl/src/com/intellij/ide/util/AbstractTreeClassChooserDialog.java @@ -174,7 +174,7 @@ public abstract class AbstractTreeClassChooserDialog myTree.addTreeSelectionListener(__ -> handleSelectionChanged()); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); myTabbedPane = new TabbedPaneWrapper(getDisposable()); diff --git a/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooserModuleTreeView.java b/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooserModuleTreeView.java index e67a15c1ca31..9cf1ef238b43 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooserModuleTreeView.java +++ b/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooserModuleTreeView.java @@ -77,7 +77,7 @@ public class DirectoryChooserModuleTreeView implements DirectoryChooserView { myTree.setRootVisible(false); myTree.setShowsRootHandles(true); myTree.setCellRenderer(new MyTreeCellRenderer()); - new TreeSpeedSearch(myTree, true, o -> { + TreeSpeedSearch.installOn(myTree, true, o -> { final Object userObject = ((DefaultMutableTreeNode)o.getLastPathComponent()).getUserObject(); if (userObject instanceof Module) { return ((Module)userObject).getName(); diff --git a/platform/lang-impl/src/com/intellij/ide/util/TreeFileChooserDialog.java b/platform/lang-impl/src/com/intellij/ide/util/TreeFileChooserDialog.java index fee637207bdb..488ed6749773 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/TreeFileChooserDialog.java +++ b/platform/lang-impl/src/com/intellij/ide/util/TreeFileChooserDialog.java @@ -29,10 +29,7 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.search.FileTypeIndex; import com.intellij.psi.search.FilenameIndex; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.ui.DoubleClickListener; -import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.TabbedPaneWrapper; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.*; import com.intellij.ui.tree.AsyncTreeModel; import com.intellij.ui.tree.StructureTreeModel; import com.intellij.ui.treeStructure.Tree; @@ -168,7 +165,7 @@ public final class TreeFileChooserDialog extends DialogWrapper implements TreeFi } ); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); myTabbedPane = new TabbedPaneWrapper(getDisposable()); diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserConfigurable.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserConfigurable.java index ccba01c4b5f3..9f9f9daea03d 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserConfigurable.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserConfigurable.java @@ -240,7 +240,7 @@ public class ScopeChooserConfigurable extends MasterDetailsComponent implements }); super.initTree(); myTree.setShowsRootHandles(false); - new TreeSpeedSearch(myTree, true, treePath -> ((MyNode)treePath.getLastPathComponent()).getDisplayName()); + TreeSpeedSearch.installOn(myTree, true, treePath -> ((MyNode)treePath.getLastPathComponent()).getDisplayName()); myTree.getEmptyText().setText(IdeBundle.message("scopes.no.scoped")); } diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java index a79a90000cd3..620dff87374f 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java @@ -504,7 +504,7 @@ public final class ScopeEditorPanel implements Disposable { TreeUtil.installActions(tree); SmartExpander.installOn(tree); - new TreeSpeedSearch(tree); + TreeUIHelper.getInstance().installTreeSpeedSearch(tree); tree.addTreeWillExpandListener(new TreeWillExpandListener() { @Override public void treeWillExpand(TreeExpansionEvent event) { diff --git a/platform/lang-impl/src/com/intellij/moduleDependencies/ModulesDependenciesPanel.java b/platform/lang-impl/src/com/intellij/moduleDependencies/ModulesDependenciesPanel.java index 0cbedad8a608..98c569d2129c 100644 --- a/platform/lang-impl/src/com/intellij/moduleDependencies/ModulesDependenciesPanel.java +++ b/platform/lang-impl/src/com/intellij/moduleDependencies/ModulesDependenciesPanel.java @@ -213,7 +213,7 @@ public class ModulesDependenciesPanel extends JPanel implements Disposable { TreeUtil.installActions(tree); - new TreeSpeedSearch(tree, true, o -> o.getLastPathComponent().toString()); + TreeSpeedSearch.installOn(tree, true, o -> o.getLastPathComponent().toString()); DefaultActionGroup group = new DefaultActionGroup(); CommonActionsManager commonActionManager = CommonActionsManager.getInstance(); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryTreeEditor.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryTreeEditor.java index 2a19e3478486..08d979c6b99b 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryTreeEditor.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryTreeEditor.java @@ -27,7 +27,7 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.JBColor; import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.TreeUIHelper; import com.intellij.ui.components.JBLabel; import com.intellij.ui.scale.JBUIScale; import com.intellij.ui.treeStructure.Tree; @@ -41,7 +41,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.DocumentEvent; -import javax.swing.tree.*; +import javax.swing.tree.TreeCellRenderer; import java.awt.*; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; @@ -72,7 +72,7 @@ public class ContentEntryTreeEditor { myEditingActionsGroup = new DefaultActionGroup(); TreeUtil.installActions(myTree); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); JPanel excludePatternsPanel = new JPanel(new GridBagLayout()); excludePatternsPanel.setBorder(JBUI.Borders.empty(5)); diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java index 9fe254a2f105..49a4cf84b313 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java @@ -332,7 +332,7 @@ public final class DependenciesPanel extends JPanel implements Disposable, DataP TreeUtil.installActions(tree); SmartExpander.installOn(tree); EditSourceOnDoubleClickHandler.install(tree); - new TreeSpeedSearch(tree); + TreeUIHelper.getInstance().installTreeSpeedSearch(tree); PopupHandler.installPopupMenu(tree, createTreePopupActions(isRightTree), "DependenciesPopup"); } diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java index 0cce47b11f69..e6314fdd3b60 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java @@ -607,7 +607,7 @@ public class SingleInspectionProfilePanel extends JPanel { } }); - new TreeSpeedSearch(tree, false, o -> { + TreeSpeedSearch.installOn(tree, false, o -> { final InspectionConfigTreeNode node = (InspectionConfigTreeNode)o.getLastPathComponent(); return InspectionsConfigTreeComparator.getDisplayTextToSort(node.getText()); }); diff --git a/platform/lang-impl/src/com/intellij/slicer/SlicePanel.java b/platform/lang-impl/src/com/intellij/slicer/SlicePanel.java index c950e43c4b52..a68a4471a00a 100644 --- a/platform/lang-impl/src/com/intellij/slicer/SlicePanel.java +++ b/platform/lang-impl/src/com/intellij/slicer/SlicePanel.java @@ -216,7 +216,7 @@ public abstract class SlicePanel extends JPanel implements DataProvider, Disposa tree.setSelectionPath(new TreePath(root.getPath())); EditSourceOnDoubleClickHandler.install(tree); - new TreeSpeedSearch(tree); + TreeUIHelper.getInstance().installTreeSpeedSearch(tree); TreeUtil.installActions(tree); ToolTipManager.sharedInstance().registerComponent(tree); diff --git a/platform/platform-impl/src/com/intellij/application/options/colors/ColorOptionsTree.java b/platform/platform-impl/src/com/intellij/application/options/colors/ColorOptionsTree.java index 2d8a127e1fcb..5aae970bfed7 100644 --- a/platform/platform-impl/src/com/intellij/application/options/colors/ColorOptionsTree.java +++ b/platform/platform-impl/src/com/intellij/application/options/colors/ColorOptionsTree.java @@ -38,7 +38,7 @@ public class ColorOptionsTree extends Tree { setRootVisible(false); getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); myCategoryName = categoryName; - new TreeSpeedSearch(this, true, TreeSpeedSearch.NODE_PRESENTATION_FUNCTION); + TreeSpeedSearch.installOn(this, true, TreeSpeedSearch.NODE_PRESENTATION_FUNCTION); } public void fillOptions(@NotNull ColorAndFontOptions options) { diff --git a/platform/platform-impl/src/com/intellij/internal/inspector/components/HierarchyTree.java b/platform/platform-impl/src/com/intellij/internal/inspector/components/HierarchyTree.java index 153a2337da3b..c1086753714d 100644 --- a/platform/platform-impl/src/com/intellij/internal/inspector/components/HierarchyTree.java +++ b/platform/platform-impl/src/com/intellij/internal/inspector/components/HierarchyTree.java @@ -47,7 +47,7 @@ public abstract class HierarchyTree extends JTree implements TreeSelectionListen setModel(buildModel(c)); setCellRenderer(new ComponentTreeCellRenderer(c)); getSelectionModel().addTreeSelectionListener(this); - new TreeSpeedSearch(this); + TreeUIHelper.getInstance().installTreeSpeedSearch(this); if (c instanceof JComponent && ClientProperty.get(c, UiInspectorAction.CLICK_INFO) != null) { SwingUtilities.invokeLater(() -> getSelectionModel().setSelectionPath(getPathForRow(getLeadSelectionRow() + 1))); } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java index 7fe8ac348a5f..44e527736a3a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java @@ -93,10 +93,10 @@ public class FileSystemTreeImpl implements FileSystemTree { }); if (speedSearchConverter != null) { - new TreeSpeedSearch(myTree, false, speedSearchConverter.asFunction()); + TreeSpeedSearch.installOn(myTree, false, speedSearchConverter.asFunction()); } else { - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); } TreeUtil.installActions(myTree); diff --git a/platform/platform-impl/src/com/intellij/ui/CheckboxTree.java b/platform/platform-impl/src/com/intellij/ui/CheckboxTree.java index 2ed547ff7280..7ce9e4292340 100644 --- a/platform/platform-impl/src/com/intellij/ui/CheckboxTree.java +++ b/platform/platform-impl/src/com/intellij/ui/CheckboxTree.java @@ -47,6 +47,6 @@ public class CheckboxTree extends CheckboxTreeBase { } protected void installSpeedSearch() { - new TreeSpeedSearch(this); + TreeUIHelper.getInstance().installTreeSpeedSearch(this); } } diff --git a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java index 15854b6ce58b..b34a0d00496c 100644 --- a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java +++ b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java @@ -81,9 +81,25 @@ public abstract class SpeedSearchBase extends SpeedSear private Disposable myListenerDisposable; + /** + * @param sig parameter is used to avoid clash with the deprecated constructor + */ + protected SpeedSearchBase(Comp component, @SuppressWarnings("unused") Void sig) { + myComponent = component; + } + + /** + * @deprecated Please use non-deprecated constructor with combination with "setup listeners" method + * to get the behaviour of this constructor + */ + @Deprecated public SpeedSearchBase(@NotNull Comp component) { myComponent = component; + setupListeners(); + } + + protected void setupListeners() { myComponent.addComponentListener(new ComponentAdapter() { @Override public void componentHidden(ComponentEvent event) { @@ -153,7 +169,7 @@ public abstract class SpeedSearchBase extends SpeedSear } }.registerCustomShortcutSet(CustomShortcutSet.fromString(SystemInfo.isMac ? "meta BACK_SPACE" : "control BACK_SPACE"), myComponent); - installSupplyTo(component); + installSupplyTo(myComponent); } protected boolean isStickySearch() { diff --git a/platform/platform-impl/src/com/intellij/ui/TreeSpeedSearch.java b/platform/platform-impl/src/com/intellij/ui/TreeSpeedSearch.java index 6da7715f99f4..d28839ab200b 100644 --- a/platform/platform-impl/src/com/intellij/ui/TreeSpeedSearch.java +++ b/platform/platform-impl/src/com/intellij/ui/TreeSpeedSearch.java @@ -52,11 +52,70 @@ public class TreeSpeedSearch extends SpeedSearchBase { return descriptor != null ? descriptor.toString() : TO_STRING.apply(path); }; + /** + * @param sig parameter is used to avoid clash with the deprecated constructor + */ + protected TreeSpeedSearch(@NotNull JTree tree, + boolean canExpand, + Void sig, + @NotNull Function presentableStringFunction) { + super(tree, sig); + setComparator(new SpeedSearchComparator(false, true)); + myPresentableStringFunction = presentableStringFunction; + myCanExpand = canExpand; + } + /** + * Prefer {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} as it located in the API module + */ + public static @NotNull TreeSpeedSearch installOn(@NotNull JTree tree, + boolean canExpand, + @NotNull Function presentableStringFunction) { + TreeSpeedSearch search = new TreeSpeedSearch(tree, canExpand, null, presentableStringFunction); + search.setupListeners(); + return search; + } + + /** + * Prefer {@link TreeUIHelper#installTreeSpeedSearch(JTree)} as it located in the API module + */ + public static @NotNull TreeSpeedSearch installOn(@NotNull JTree tree) { + return installOn(tree, false, TO_STRING); + } + + @Override + public void setupListeners() { + super.setupListeners(); + + new MySelectAllAction(myComponent, this).registerCustomShortcutSet(myComponent, null); + } + + /** + * @deprecated Use {@link TreeUIHelper#installTreeSpeedSearch(JTree)} + * or the static method {@link TreeSpeedSearch#installOn(JTree)} to install a speed search on tree. + * The {@link TreeUIHelper#installTreeSpeedSearch(JTree)} is preferable over the static call as it located in the API module + *

+ * For inheritance use the non-deprecated constructor. + *

+ * Also, note that non-deprecated constructor is side effect free, and you should call for {@link TreeSpeedSearch#setupListeners()} + * method to enable speed search + */ + @Deprecated public TreeSpeedSearch(JTree tree) { this(tree, false, TO_STRING); } + /** + * @deprecated Use {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} + * or the static method {@link TreeSpeedSearch#installOn(JTree, boolean, Function)} to install a speed search on tree. + * The {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} is preferable over the static call as it located in the API module + *

+ * For inheritance use the non-deprecated constructor. + *

+ * Also, note that non-deprecated constructor is side effect free, and you should call for {@link TreeSpeedSearch#setupListeners()} + * method to enable speed search + */ + @Deprecated public TreeSpeedSearch(@NotNull JTree tree, boolean canExpand, @NotNull Function presentableStringFunction) { super(tree); setComparator(new SpeedSearchComparator(false, true)); @@ -66,9 +125,15 @@ public class TreeSpeedSearch extends SpeedSearchBase { new MySelectAllAction(tree, this).registerCustomShortcutSet(tree, null); } - /** - * @deprecated use the constructor with Function. + * @deprecated Use {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} + * or the static method {@link TreeSpeedSearch#installOn(JTree, boolean, Function)} to install a speed search on tree. + * The {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} is preferable over the static call as it located in the API module + *

+ * For inheritance use the non-deprecated constructor. + *

+ * Also, note that non-deprecated constructor is side effect free, and you should call for {@link TreeSpeedSearch#setupListeners()} + * method to enable speed search */ @Deprecated public TreeSpeedSearch(JTree tree, Convertor toString) { @@ -76,7 +141,14 @@ public class TreeSpeedSearch extends SpeedSearchBase { } /** - * @deprecated use the constructor with Function. + * @deprecated Use {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} + * or the static method {@link TreeSpeedSearch#installOn(JTree, boolean, Function)} to install a speed search on tree. + * The {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} is preferable over the static call as it located in the API module + *

+ * For inheritance use the non-deprecated constructor. + *

+ * Also, note that non-deprecated constructor is side effect free, and you should call for {@link TreeSpeedSearch#setupListeners()} + * method to enable speed search */ @Deprecated public TreeSpeedSearch(Tree tree, Convertor toString) { @@ -84,7 +156,14 @@ public class TreeSpeedSearch extends SpeedSearchBase { } /** - * @deprecated use the constructor with Function. + * @deprecated Use {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} + * or the static method {@link TreeSpeedSearch#installOn(JTree, boolean, Function)} to install a speed search on tree. + * The {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} is preferable over the static call as it located in the API module + *

+ * For inheritance use the non-deprecated constructor. + *

+ * Also, note that non-deprecated constructor is side effect free, and you should call for {@link TreeSpeedSearch#setupListeners()} + * method to enable speed search */ @Deprecated public TreeSpeedSearch(Tree tree, Convertor toString, boolean canExpand) { @@ -92,7 +171,14 @@ public class TreeSpeedSearch extends SpeedSearchBase { } /** - * @deprecated use the constructor with Function. + * @deprecated Use {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} + * or the static method {@link TreeSpeedSearch#installOn(JTree, boolean, Function)} to install a speed search on tree. + * The {@link TreeUIHelper#installTreeSpeedSearch(JTree, Convertor, boolean)} is preferable over the static call as it located in the API module + *

+ * For inheritance use the non-deprecated constructor. + *

+ * Also, note that non-deprecated constructor is side effect free, and you should call for {@link TreeSpeedSearch#setupListeners()} + * method to enable speed search */ @Deprecated public TreeSpeedSearch(JTree tree, Convertor toString, boolean canExpand) { diff --git a/platform/platform-impl/src/com/intellij/ui/TreeUIHelperImpl.java b/platform/platform-impl/src/com/intellij/ui/TreeUIHelperImpl.java index c58dcdec8c70..b8409f423295 100644 --- a/platform/platform-impl/src/com/intellij/ui/TreeUIHelperImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/TreeUIHelperImpl.java @@ -31,7 +31,7 @@ final class TreeUIHelperImpl extends TreeUIHelper { @Override public void installTreeSpeedSearch(JTree tree, Convertor convertor, boolean canExpand) { - new TreeSpeedSearch(tree, canExpand, convertor.asFunction()); + TreeSpeedSearch.installOn(tree, canExpand, convertor.asFunction()); } @Override diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/RemoteServerListConfigurable.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/RemoteServerListConfigurable.java index 1fe6658956a6..3694a3f2f099 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/RemoteServerListConfigurable.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/RemoteServerListConfigurable.java @@ -144,7 +144,7 @@ public class RemoteServerListConfigurable extends MasterDetailsComponent impleme @Override protected void initTree() { super.initTree(); - new TreeSpeedSearch(myTree, true, treePath -> ((MyNode)treePath.getLastPathComponent()).getDisplayName()); + TreeSpeedSearch.installOn(myTree, true, treePath -> ((MyNode)treePath.getLastPathComponent()).getDisplayName()); } @Override diff --git a/platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java b/platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java index ef28ceeda990..bc45d8457374 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java @@ -186,7 +186,7 @@ public abstract class TestTreeView extends Tree implements DataProvider, CopyPro EditSourceOnDoubleClickHandler.install(this); EditSourceOnEnterKeyHandler.install(this); boolean canExpand = Registry.is("tests.view.node.expanding.search"); - new TreeSpeedSearch(this, canExpand, path -> { + TreeSpeedSearch.installOn(this, canExpand, path -> { final AbstractTestProxy testProxy = getSelectedTest(path); if (testProxy == null) return null; return getPresentableName(testProxy); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangesViewManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangesViewManager.java index 19ae7f311d7c..77855245435e 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangesViewManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangesViewManager.java @@ -44,10 +44,7 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.ToolWindow; import com.intellij.pom.Navigatable; import com.intellij.pom.NavigatableAdapter; -import com.intellij.ui.PopupHandler; -import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.SimpleTextAttributes; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.*; import com.intellij.ui.awt.RelativeRectangle; import com.intellij.ui.content.Content; import com.intellij.util.Consumer; @@ -367,7 +364,7 @@ public class ShelvedChangesViewManager implements Disposable { private ShelfTree(@NotNull Project project) { super(project, false, false, false); - new TreeSpeedSearch(this, true, ChangesBrowserNode.TO_TEXT_CONVERTER.asFunction()); + TreeSpeedSearch.installOn(this, true, ChangesBrowserNode.TO_TEXT_CONVERTER.asFunction()); setKeepTreeState(true); setDoubleClickHandler(e -> showShelvedChangesDiff()); setEnterKeyHandler(e -> showShelvedChangesDiff()); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesTree.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesTree.java index f1ddc7c024ff..d4cd898d190c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesTree.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesTree.java @@ -116,7 +116,7 @@ public abstract class ChangesTree extends Tree implements DataProvider { setShowsRootHandles(true); setOpaque(false); if (withSpeedSearch) { - new TreeSpeedSearch(this, false, ChangesBrowserNode.TO_TEXT_CONVERTER.asFunction()); + TreeSpeedSearch.installOn(this, false, ChangesBrowserNode.TO_TEXT_CONVERTER.asFunction()); } final ChangesBrowserNodeRenderer nodeRenderer = new ChangesBrowserNodeRenderer(myProject, this::isShowFlatten, highlightProblems); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java index 5b4782bffb9c..70ecb83e77cb 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java @@ -165,7 +165,7 @@ public class UpdateInfoTree extends PanelWithActionsAndCloseButton { myTree.setCellRenderer(new UpdateTreeCellRenderer()); TreeUtil.installActions(myTree); - new TreeSpeedSearch(myTree, true, path -> { + TreeSpeedSearch.installOn(myTree, true, path -> { Object last = path.getLastPathComponent(); if (last instanceof AbstractTreeNode) { return ((AbstractTreeNode)last).getText(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/tree/BreakpointsCheckboxTree.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/tree/BreakpointsCheckboxTree.java index 243056d84b71..bd7a29d77c6c 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/tree/BreakpointsCheckboxTree.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/tree/BreakpointsCheckboxTree.java @@ -58,7 +58,7 @@ public class BreakpointsCheckboxTree extends CheckboxTree { @Override protected void installSpeedSearch() { - new TreeSpeedSearch(this, true, path -> { + TreeSpeedSearch.installOn(this, true, path -> { Object node = path.getLastPathComponent(); if (node instanceof BreakpointItemNode) { return ((BreakpointItemNode)node).getBreakpointItem().speedSearchText(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java index f5308d90bdca..c5aa5d011b74 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java @@ -250,7 +250,7 @@ public class XDebuggerTree extends DnDAwareTree implements DataProvider, Disposa new XDebuggerTreeSpeedSearch(this, SPEED_SEARCH_CONVERTER); } else { - new TreeSpeedSearch(this, false, SPEED_SEARCH_CONVERTER.asFunction()); + TreeSpeedSearch.installOn(this, false, SPEED_SEARCH_CONVERTER.asFunction()); } } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java b/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java index 9c7aa3d780a2..4e8951ac5e1f 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java @@ -136,7 +136,7 @@ public class AntExplorer extends SimpleToolWindowPanel implements DataProvider, }); TreeUtil.installActions(myTree); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); myTree.addMouseListener(new PopupHandler() { @Override public void invokePopup(final Component comp, final int x, final int y) { diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java index def787ead145..7351c64541a7 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java @@ -91,7 +91,7 @@ public class TargetChooserDialog extends DialogWrapper { tree.setRootVisible(false); tree.setShowsRootHandles(true); TreeUtil.installActions(tree); - new TreeSpeedSearch(tree, false, path -> { + TreeSpeedSearch.installOn(tree, false, path -> { final Object userObject = ((DefaultMutableTreeNode)path.getLastPathComponent()).getUserObject(); if (userObject instanceof AntTargetNodeDescriptor) { final AntBuildTarget target = ((AntTargetNodeDescriptor)userObject).getAntTarget(); diff --git a/plugins/copyright/src/com/maddyhome/idea/copyright/ui/CopyrightProfilesPanel.java b/plugins/copyright/src/com/maddyhome/idea/copyright/ui/CopyrightProfilesPanel.java index 9f76b41c42bf..a0f2714adff6 100644 --- a/plugins/copyright/src/com/maddyhome/idea/copyright/ui/CopyrightProfilesPanel.java +++ b/plugins/copyright/src/com/maddyhome/idea/copyright/ui/CopyrightProfilesPanel.java @@ -58,7 +58,7 @@ final class CopyrightProfilesPanel extends MasterDetailsComponent implements Sea @Override protected void initTree() { super.initTree(); - new TreeSpeedSearch(myTree, true, treePath -> { + TreeSpeedSearch.installOn(myTree, true, treePath -> { MasterDetailsComponent.MyNode obj = (MyNode)treePath.getLastPathComponent(); return obj == null ? null : obj.getDisplayName(); }); diff --git a/plugins/coverage-common/src/com/intellij/coverage/actions/CoverageSuiteChooserDialog.java b/plugins/coverage-common/src/com/intellij/coverage/actions/CoverageSuiteChooserDialog.java index 112075d05d75..61d0b4957558 100644 --- a/plugins/coverage-common/src/com/intellij/coverage/actions/CoverageSuiteChooserDialog.java +++ b/plugins/coverage-common/src/com/intellij/coverage/actions/CoverageSuiteChooserDialog.java @@ -52,7 +52,7 @@ public class CoverageSuiteChooserDialog extends DialogWrapper { mySuitesTree = new CheckboxTree(new SuitesRenderer(), myRootNode) { @Override protected void installSpeedSearch() { - new TreeSpeedSearch(this, false, path -> { + TreeSpeedSearch.installOn(this, false, path -> { final DefaultMutableTreeNode component = (DefaultMutableTreeNode)path.getLastPathComponent(); final Object userObject = component.getUserObject(); if (userObject instanceof CoverageSuite) { diff --git a/plugins/intellij.dev.psiViewer/src/PsiViewerDialog.java b/plugins/intellij.dev.psiViewer/src/PsiViewerDialog.java index e8f894d0eaf0..bc9902622bde 100644 --- a/plugins/intellij.dev.psiViewer/src/PsiViewerDialog.java +++ b/plugins/intellij.dev.psiViewer/src/PsiViewerDialog.java @@ -425,7 +425,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider { tree.updateUI(); ToolTipManager.sharedInstance().registerComponent(tree); TreeUtil.installActions(tree); - new TreeSpeedSearch(tree); + TreeUIHelper.getInstance().installTreeSpeedSearch(tree); } @Override diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenSelectProjectPopup.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenSelectProjectPopup.java index 5c122c085794..d1bd80d229e0 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenSelectProjectPopup.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenSelectProjectPopup.java @@ -100,7 +100,7 @@ public final class MavenSelectProjectPopup { } }); - new TreeSpeedSearch(projectTree, false, o -> { + TreeSpeedSearch.installOn(projectTree, false, o -> { Object lastPathComponent = o.getLastPathComponent(); if (!(lastPathComponent instanceof DefaultMutableTreeNode)) return null; diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/associations/impl/AssociationsEditor.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/associations/impl/AssociationsEditor.java index a8eee440b623..31d1de51ee2d 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/associations/impl/AssociationsEditor.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/associations/impl/AssociationsEditor.java @@ -67,7 +67,7 @@ final class AssociationsEditor implements Disposable { myTree.setModel(new AsyncTreeModel(myModel, this)); myTree.setCellRenderer(new MyNodeRenderer(myManager)); - new TreeSpeedSearch(myTree); + TreeUIHelper.getInstance().installTreeSpeedSearch(myTree); if (!project.isDefault()) { SwingUtilities.invokeLater(() -> ApplicationManager.getApplication().invokeLater(() -> { diff --git a/xml/impl/src/com/intellij/xml/config/ConfigFilesTreeBuilder.java b/xml/impl/src/com/intellij/xml/config/ConfigFilesTreeBuilder.java index f01f20de60d3..62b013352774 100644 --- a/xml/impl/src/com/intellij/xml/config/ConfigFilesTreeBuilder.java +++ b/xml/impl/src/com/intellij/xml/config/ConfigFilesTreeBuilder.java @@ -187,7 +187,7 @@ public class ConfigFilesTreeBuilder { } public static void installSearch(JTree tree) { - new TreeSpeedSearch(tree, false, treePath -> { + TreeSpeedSearch.installOn(tree, false, treePath -> { final Object object = ((DefaultMutableTreeNode)treePath.getLastPathComponent()).getUserObject(); if (object instanceof Module) { return ((Module)object).getName();