From 7abe089a7c3839873505e023355d79730349a634 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 30 Dec 2011 16:32:46 +0100 Subject: [PATCH] support camel case in speed search --- .../options/ProcessedModulesTable.java | 3 +- .../debugger/ui/impl/watch/DebuggerTree.java | 4 +- .../find/actions/ShowUsagesAction.java | 7 +- .../ide/util/FileStructureDialog.java | 11 ++-- .../intellij/ide/util/FileStructurePopup.java | 3 +- .../com/intellij/ide/util/MemberChooser.java | 2 +- .../openapi/util/registry/RegistryUi.java | 2 +- .../intellij/ide/util/ElementsChooser.java | 2 +- .../src/com/intellij/ui/SpeedSearchBase.java | 29 --------- .../intellij/ui/SpeedSearchComparator.java | 64 +++++++++++++++++++ .../maven/wizards/MavenModuleWizardStep.java | 2 +- 11 files changed, 80 insertions(+), 49 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/ui/SpeedSearchComparator.java diff --git a/java/compiler/impl/src/com/intellij/compiler/options/ProcessedModulesTable.java b/java/compiler/impl/src/com/intellij/compiler/options/ProcessedModulesTable.java index 2f9b75f8fa41..718901122c57 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/ProcessedModulesTable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/ProcessedModulesTable.java @@ -23,6 +23,7 @@ import com.intellij.openapi.roots.ui.configuration.ChooseModulesDialog; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.ui.SpeedSearchBase; +import com.intellij.ui.SpeedSearchComparator; import com.intellij.ui.TableUtil; import com.intellij.ui.ToolbarDecorator; import com.intellij.ui.table.JBTable; @@ -109,7 +110,7 @@ public class ProcessedModulesTable extends JPanel { } } }; - speedSearch.setComparator(new SpeedSearchBase.SpeedSearchComparator(false)); + speedSearch.setComparator(new SpeedSearchComparator(false)); } public void refresh() { diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java index 4f41c04d6b9a..9f26238aefda 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java @@ -52,7 +52,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.ui.SpeedSearchBase; +import com.intellij.ui.SpeedSearchComparator; import com.intellij.ui.TreeSpeedSearch; import com.sun.jdi.*; @@ -119,7 +119,7 @@ public abstract class DebuggerTree extends DebuggerTreeBase implements DataProvi myProject = project; final TreeSpeedSearch search = new TreeSpeedSearch(this); - search.setComparator(new SpeedSearchBase.SpeedSearchComparator(false)); + search.setComparator(new SpeedSearchComparator(false)); } protected NodeManagerImpl createNodeManager(Project project) { diff --git a/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java b/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java index 50f2ec168c7a..fa52ac698e9b 100644 --- a/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java +++ b/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java @@ -49,10 +49,7 @@ import com.intellij.psi.SmartPsiElementPointer; import com.intellij.psi.search.ProjectScope; import com.intellij.psi.search.PsiElementProcessor; import com.intellij.psi.search.SearchScope; -import com.intellij.ui.InplaceButton; -import com.intellij.ui.JBTableWithHintProvider; -import com.intellij.ui.SpeedSearchBase; -import com.intellij.ui.TableScrollingUtil; +import com.intellij.ui.*; import com.intellij.ui.awt.RelativePoint; import com.intellij.usageView.UsageViewBundle; import com.intellij.usages.*; @@ -414,7 +411,7 @@ public class ShowUsagesAction extends AnAction implements PopupAction { table.getSelectionModel().setSelectionInterval(viewRow, viewRow); } }; - speedSearch.setComparator(new SpeedSearchBase.SpeedSearchComparator(false)); + speedSearch.setComparator(new SpeedSearchComparator(false)); PopupChooserBuilder builder = new PopupChooserBuilder(table); if (title != null) { diff --git a/platform/lang-impl/src/com/intellij/ide/util/FileStructureDialog.java b/platform/lang-impl/src/com/intellij/ide/util/FileStructureDialog.java index 011b27c7dd04..cda16464def2 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/FileStructureDialog.java +++ b/platform/lang-impl/src/com/intellij/ide/util/FileStructureDialog.java @@ -48,10 +48,7 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiUtilBase; -import com.intellij.ui.IdeBorderFactory; -import com.intellij.ui.ListScrollingUtil; -import com.intellij.ui.SideBorder; -import com.intellij.ui.SpeedSearchBase; +import com.intellij.ui.*; import com.intellij.ui.docking.DockManager; import com.intellij.ui.speedSearch.SpeedSearchSupply; import com.intellij.util.ArrayUtil; @@ -448,7 +445,7 @@ public class FileStructureDialog extends DialogWrapper { } ArrayList filteredElements = new ArrayList(childElements.length); - SpeedSearchBase.SpeedSearchComparator speedSearchComparator = createSpeedSearchComparator(); + SpeedSearchComparator speedSearchComparator = createSpeedSearchComparator(); for (Object child : childElements) { if (child instanceof AbstractTreeNode) { @@ -474,8 +471,8 @@ public class FileStructureDialog extends DialogWrapper { } } - private static SpeedSearchBase.SpeedSearchComparator createSpeedSearchComparator() { - return new SpeedSearchBase.SpeedSearchComparator(false); + private static SpeedSearchComparator createSpeedSearchComparator() { + return new SpeedSearchComparator(false); } private class MyTreeActionsOwner implements TreeActionsOwner { diff --git a/platform/lang-impl/src/com/intellij/ide/util/FileStructurePopup.java b/platform/lang-impl/src/com/intellij/ide/util/FileStructurePopup.java index 0088d95a9688..aedb07ef1903 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/FileStructurePopup.java +++ b/platform/lang-impl/src/com/intellij/ide/util/FileStructurePopup.java @@ -44,6 +44,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SpeedSearchBase; +import com.intellij.ui.SpeedSearchComparator; import com.intellij.ui.TreeSpeedSearch; import com.intellij.ui.popup.AbstractPopup; import com.intellij.ui.speedSearch.ElementFilter; @@ -143,7 +144,7 @@ public class FileStructurePopup implements Disposable { return myPopup.getContent().getVisibleRect(); } }; - mySpeedSearch.setComparator(new SpeedSearchBase.SpeedSearchComparator(false)); + mySpeedSearch.setComparator(new SpeedSearchComparator(false, true)); myAbstractTreeBuilder = new FilteringTreeBuilder(project, myTree, new FileStructurePopupFilter(), myTreeStructure, null) { @Override diff --git a/platform/lang-impl/src/com/intellij/ide/util/MemberChooser.java b/platform/lang-impl/src/com/intellij/ide/util/MemberChooser.java index f80c1e82d03a..6c2cf697d2a3 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/MemberChooser.java +++ b/platform/lang-impl/src/com/intellij/ide/util/MemberChooser.java @@ -328,7 +328,7 @@ public class MemberChooser extends DialogWrapper implemen return delegate.getText(); } }); - treeSpeedSearch.setComparator(new SpeedSearchBase.SpeedSearchComparator(false)); + treeSpeedSearch.setComparator(new SpeedSearchComparator(false)); treeSpeedSearch.addChangeListener(new PropertyChangeListener() { @Override diff --git a/platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java b/platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java index 6cd0a255b729..820a2aa14de1 100644 --- a/platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java +++ b/platform/lang-impl/src/com/intellij/openapi/util/registry/RegistryUi.java @@ -128,7 +128,7 @@ public class RegistryUi implements Disposable { tb.setTargetComponent(myTable); myContent.add(tb.getComponent(), BorderLayout.NORTH); - new TableSpeedSearch(myTable).setComparator(new SpeedSearchBase.SpeedSearchComparator(false)); + new TableSpeedSearch(myTable).setComparator(new SpeedSearchComparator(false)); } diff --git a/platform/platform-impl/src/com/intellij/ide/util/ElementsChooser.java b/platform/platform-impl/src/com/intellij/ide/util/ElementsChooser.java index f09178bc2fe9..99bde93d4ba9 100644 --- a/platform/platform-impl/src/com/intellij/ide/util/ElementsChooser.java +++ b/platform/platform-impl/src/com/intellij/ide/util/ElementsChooser.java @@ -134,7 +134,7 @@ public class ElementsChooser extends JPanel implements ComponentWithEmptyText } } }; - speedSearch.setComparator(new SpeedSearchBase.SpeedSearchComparator(false)); + speedSearch.setComparator(new SpeedSearchComparator(false)); setElements(elements, marked); installActions(myTable); } diff --git a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java index a6087b77996e..2d58ce840c68 100644 --- a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java +++ b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java @@ -27,7 +27,6 @@ import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.openapi.wm.ex.ToolWindowManagerAdapter; import com.intellij.openapi.wm.ex.ToolWindowManagerEx; import com.intellij.openapi.wm.ex.ToolWindowManagerListener; -import com.intellij.psi.codeStyle.NameUtil; import com.intellij.ui.speedSearch.SpeedSearchSupply; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; @@ -163,34 +162,6 @@ public abstract class SpeedSearchBase extends SpeedSear myComparator = comparator; } - public static class SpeedSearchComparator { - private NameUtil.MinusculeMatcher myMinusculeMatcher; - private String myRecentSearchText; - private boolean myShouldMatchFromTheBeginning; - - public SpeedSearchComparator() { - this(true); - } - - public SpeedSearchComparator(boolean shouldMatchFromTheBeginning) { - myShouldMatchFromTheBeginning = shouldMatchFromTheBeginning; - } - - @Nullable - public Iterable matchingFragments(String pattern, String text) { - if (myRecentSearchText == null || !myRecentSearchText.equals(pattern)) { - myRecentSearchText = pattern; - myMinusculeMatcher = new NameUtil.MinusculeMatcher(myShouldMatchFromTheBeginning ? pattern : "*" + pattern, NameUtil.MatchingCaseSensitivity.NONE); - } - return myMinusculeMatcher.matchingFragments(text); - } - - - public String getRecentSearchText() { - return myRecentSearchText; - } - } - @Nullable private Object findNextElement(String s) { final String _s = s.trim(); diff --git a/platform/platform-impl/src/com/intellij/ui/SpeedSearchComparator.java b/platform/platform-impl/src/com/intellij/ui/SpeedSearchComparator.java new file mode 100644 index 000000000000..0ce4b25bc2b4 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ui/SpeedSearchComparator.java @@ -0,0 +1,64 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.ui; + +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.codeStyle.NameUtil; +import org.jetbrains.annotations.Nullable; + +/** +* @author Konstantin Bulenkov +*/ +public class SpeedSearchComparator { + private NameUtil.MinusculeMatcher myMinusculeMatcher; + private String myRecentSearchText; + private boolean myShouldMatchFromTheBeginning; + private boolean myShouldMatchCamelCase; + + public SpeedSearchComparator() { + this(true); + } + + public SpeedSearchComparator(boolean shouldMatchFromTheBeginning) { + this(shouldMatchFromTheBeginning, false); + } + + public SpeedSearchComparator(boolean shouldMatchFromTheBeginning, boolean shouldMatchCamelCase) { + myShouldMatchFromTheBeginning = shouldMatchFromTheBeginning; + myShouldMatchCamelCase = shouldMatchCamelCase; + } + + @Nullable + public Iterable matchingFragments(String pattern, String text) { + if (myRecentSearchText == null || !myRecentSearchText.equals(pattern)) { + myRecentSearchText = pattern; + if (myShouldMatchCamelCase) { + pattern = StringUtil.join(NameUtil.nameToWords(pattern), "*"); + } + if (!myShouldMatchFromTheBeginning && !pattern.startsWith("*")) { + pattern = "*" + pattern; + } + myMinusculeMatcher = new NameUtil.MinusculeMatcher(pattern, NameUtil.MatchingCaseSensitivity.NONE); + } + return myMinusculeMatcher.matchingFragments(text); + } + + + public String getRecentSearchText() { + return myRecentSearchText; + } +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleWizardStep.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleWizardStep.java index 2cc11707e3bc..f9eb6e511e53 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleWizardStep.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleWizardStep.java @@ -157,7 +157,7 @@ public class MavenModuleWizardStep extends ModuleWizardStep { MavenArchetype info = getArchetypeInfoFromPathComponent(path.getLastPathComponent()); return info.groupId + ":" + info.artifactId + ":" + info.version; } - }).setComparator(new SpeedSearchBase.SpeedSearchComparator(false)); + }).setComparator(new SpeedSearchComparator(false)); myArchetypeDescriptionField.setEditable(false); myArchetypeDescriptionField.setBackground(UIUtil.getPanelBackground());