From 0975129567b8e18a7daf3f200a9dd72a99d00d7b Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 7 Feb 2005 22:28:07 +0300 Subject: [PATCH] find by name api --- .../intellij/ide/util/TreeClassChooser.java | 17 +++++---- .../util/gotoByName/ChooseByNameFactory.java | 16 +++++++++ .../util/gotoByName/ChooseByNameModel.java | 0 .../ChooseByNamePopupComponent.java | 18 ++++++++++ .../intellij/ide/actions/GotoActionBase.java | 11 ++---- .../intellij/ide/actions/GotoClassAction.java | 14 ++------ .../intellij/ide/actions/GotoFileAction.java | 4 ++- .../ide/actions/GotoSymbolAction.java | 6 ++-- .../ide/util/TreeClassChooserDialog.java | 24 ++++++++++--- .../ide/util/gotoByName/ChooseByNameBase.java | 13 +++---- .../gotoByName/ChooseByNameFactoryImpl.java | 35 +++++++++++++++++++ .../util/gotoByName/ChooseByNamePanel.java | 2 +- .../util/gotoByName/ChooseByNamePopup.java | 4 +-- 13 files changed, 118 insertions(+), 46 deletions(-) create mode 100644 openapi/src/com/intellij/ide/util/gotoByName/ChooseByNameFactory.java rename {source => openapi/src}/com/intellij/ide/util/gotoByName/ChooseByNameModel.java (100%) create mode 100644 openapi/src/com/intellij/ide/util/gotoByName/ChooseByNamePopupComponent.java create mode 100644 source/com/intellij/ide/util/gotoByName/ChooseByNameFactoryImpl.java diff --git a/openapi/src/com/intellij/ide/util/TreeClassChooser.java b/openapi/src/com/intellij/ide/util/TreeClassChooser.java index 79feb76754eb..d9fa79e76208 100644 --- a/openapi/src/com/intellij/ide/util/TreeClassChooser.java +++ b/openapi/src/com/intellij/ide/util/TreeClassChooser.java @@ -4,6 +4,7 @@ import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.application.ModalityState; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiDirectory; @@ -14,23 +15,25 @@ import com.intellij.psi.PsiDirectory; */ public interface TreeClassChooser{ - public abstract PsiClass getSelectedClass(); + PsiClass getSelectedClass(); - public abstract void selectClass(final PsiClass aClass); + void selectClass(final PsiClass aClass); - public abstract void selectDirectory(final PsiDirectory directory); + void selectDirectory(final PsiDirectory directory); - public abstract void showDialog(); + void showDialog(); - public static interface ClassFilter { + void showPopup(); + + static interface ClassFilter { boolean isAccepted(PsiClass aClass); } - public static interface ClassFilterWithScope extends ClassFilter { + static interface ClassFilterWithScope extends ClassFilter { GlobalSearchScope getScope(); } - public static interface InheritanceClassFilter extends ClassFilter{ + static interface InheritanceClassFilter extends ClassFilter{ } } diff --git a/openapi/src/com/intellij/ide/util/gotoByName/ChooseByNameFactory.java b/openapi/src/com/intellij/ide/util/gotoByName/ChooseByNameFactory.java new file mode 100644 index 000000000000..f8dbae74b717 --- /dev/null +++ b/openapi/src/com/intellij/ide/util/gotoByName/ChooseByNameFactory.java @@ -0,0 +1,16 @@ +package com.intellij.ide.util.gotoByName; + +import com.intellij.openapi.components.ProjectComponent; +import com.intellij.openapi.project.Project; + +/** + * User: anna + * Date: Jan 26, 2005 + */ +public abstract class ChooseByNameFactory implements ProjectComponent{ + public static ChooseByNameFactory getInstance(Project project){ + return project.getComponent(ChooseByNameFactory.class); + } + + public abstract ChooseByNamePopupComponent createChooseByNamePopupComponent(final ChooseByNameModel model); +} diff --git a/source/com/intellij/ide/util/gotoByName/ChooseByNameModel.java b/openapi/src/com/intellij/ide/util/gotoByName/ChooseByNameModel.java similarity index 100% rename from source/com/intellij/ide/util/gotoByName/ChooseByNameModel.java rename to openapi/src/com/intellij/ide/util/gotoByName/ChooseByNameModel.java diff --git a/openapi/src/com/intellij/ide/util/gotoByName/ChooseByNamePopupComponent.java b/openapi/src/com/intellij/ide/util/gotoByName/ChooseByNamePopupComponent.java new file mode 100644 index 000000000000..50f948ad5cac --- /dev/null +++ b/openapi/src/com/intellij/ide/util/gotoByName/ChooseByNamePopupComponent.java @@ -0,0 +1,18 @@ +package com.intellij.ide.util.gotoByName; + +import com.intellij.openapi.application.ModalityState; + +/** + * User: anna + * Date: Jan 26, 2005 + */ +public interface ChooseByNamePopupComponent { + void invoke(Callback callback, ModalityState modalityState, boolean allowMultipleSelection); + + Object getChosenElement(); + + static abstract class Callback { + public abstract void elementChosen(Object element); + public void onClose() { } + } +} diff --git a/source/com/intellij/ide/actions/GotoActionBase.java b/source/com/intellij/ide/actions/GotoActionBase.java index 7618cd695bc1..4ec94b401365 100644 --- a/source/com/intellij/ide/actions/GotoActionBase.java +++ b/source/com/intellij/ide/actions/GotoActionBase.java @@ -2,17 +2,10 @@ package com.intellij.ide.actions; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.actionSystem.DataConstants; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.application.ModalityState; +import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.featureStatistics.FeatureUsageTracker; -import com.intellij.ide.util.gotoByName.ChooseByNamePopup; -import com.intellij.ide.util.gotoByName.GotoSymbolModel; -import com.intellij.ide.util.gotoByName.ChooseByNameBase; +import com.intellij.openapi.project.Project; /** * Author: msk diff --git a/source/com/intellij/ide/actions/GotoClassAction.java b/source/com/intellij/ide/actions/GotoClassAction.java index 8878f14886ed..0dd3ef23896e 100644 --- a/source/com/intellij/ide/actions/GotoClassAction.java +++ b/source/com/intellij/ide/actions/GotoClassAction.java @@ -1,24 +1,16 @@ package com.intellij.ide.actions; import com.intellij.featureStatistics.FeatureUsageTracker; -import com.intellij.ide.util.gotoByName.ChooseByNameBase; +import com.intellij.ide.util.gotoByName.ChooseByNamePopupComponent; import com.intellij.ide.util.gotoByName.ChooseByNamePopup; import com.intellij.ide.util.gotoByName.GotoClassModel2; +import com.intellij.ide.util.gotoByName.ChooseByNameBase; import com.intellij.navigation.NavigationItem; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataConstants; import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.command.CommandProcessor; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.FileEditorState; -import com.intellij.openapi.fileEditor.OpenFileDescriptor; -import com.intellij.openapi.fileEditor.impl.EditorHistoryManager; -import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiClass; import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiJavaFile; public class GotoClassAction extends GotoActionBase { public void gotoActionPerformed(AnActionEvent e) { @@ -28,7 +20,7 @@ public class GotoClassAction extends GotoActionBase { final ChooseByNamePopup popup = ChooseByNamePopup.createPopup(project, new GotoClassModel2(project)); - popup.invoke(new ChooseByNameBase.Callback() { + popup.invoke(new ChooseByNamePopupComponent.Callback() { public void onClose () { if (GotoClassAction.class.equals (myInAction)) myInAction = null; diff --git a/source/com/intellij/ide/actions/GotoFileAction.java b/source/com/intellij/ide/actions/GotoFileAction.java index 1a5c4276f2d1..17cde6b4d77f 100644 --- a/source/com/intellij/ide/actions/GotoFileAction.java +++ b/source/com/intellij/ide/actions/GotoFileAction.java @@ -1,10 +1,12 @@ package com.intellij.ide.actions; +import com.intellij.featureStatistics.FeatureUsageTrackerImpl; import com.intellij.featureStatistics.FeatureUsageTracker; import com.intellij.ide.util.gotoByName.ChooseByNameBase; import com.intellij.ide.util.gotoByName.ChooseByNamePopup; import com.intellij.ide.util.gotoByName.GotoFileModel; +import com.intellij.ide.util.gotoByName.ChooseByNamePopupComponent; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataConstants; import com.intellij.openapi.application.ApplicationManager; @@ -22,7 +24,7 @@ public class GotoFileAction extends GotoActionBase { FeatureUsageTracker.getInstance().triggerFeatureUsed("navigation.popup.file"); final Project project = (Project)e.getDataContext().getData(DataConstants.PROJECT); final ChooseByNamePopup popup = ChooseByNamePopup.createPopup(project, new GotoFileModel(project)); - popup.invoke(new ChooseByNameBase.Callback() { + popup.invoke(new ChooseByNamePopupComponent.Callback() { public void onClose () { if (GotoFileAction.class.equals (myInAction)) myInAction = null; diff --git a/source/com/intellij/ide/actions/GotoSymbolAction.java b/source/com/intellij/ide/actions/GotoSymbolAction.java index 9167666cd058..c6e8a1df660b 100644 --- a/source/com/intellij/ide/actions/GotoSymbolAction.java +++ b/source/com/intellij/ide/actions/GotoSymbolAction.java @@ -1,9 +1,11 @@ package com.intellij.ide.actions; +import com.intellij.featureStatistics.FeatureUsageTrackerImpl; import com.intellij.featureStatistics.FeatureUsageTracker; -import com.intellij.ide.util.gotoByName.ChooseByNameBase; +import com.intellij.ide.util.gotoByName.ChooseByNamePopupComponent; import com.intellij.ide.util.gotoByName.ChooseByNamePopup; import com.intellij.ide.util.gotoByName.GotoSymbolModel2; +import com.intellij.ide.util.gotoByName.ChooseByNameBase; import com.intellij.navigation.NavigationItem; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataConstants; @@ -20,7 +22,7 @@ public class GotoSymbolAction extends GotoActionBase { PsiDocumentManager.getInstance(project).commitAllDocuments(); final ChooseByNamePopup popup = ChooseByNamePopup.createPopup(project, new GotoSymbolModel2(project)); - popup.invoke(new ChooseByNameBase.Callback() { + popup.invoke(new ChooseByNamePopupComponent.Callback() { public void onClose () { if (GotoSymbolAction.class.equals (myInAction)) diff --git a/source/com/intellij/ide/util/TreeClassChooserDialog.java b/source/com/intellij/ide/util/TreeClassChooserDialog.java index 5808763c3e7c..c7d51d537195 100644 --- a/source/com/intellij/ide/util/TreeClassChooserDialog.java +++ b/source/com/intellij/ide/util/TreeClassChooserDialog.java @@ -6,11 +6,10 @@ import com.intellij.ide.projectView.impl.AbstractProjectTreeStructure; import com.intellij.ide.projectView.impl.ProjectAbstractTreeStructureBase; import com.intellij.ide.projectView.impl.ProjectTreeBuilder; import com.intellij.ide.projectView.impl.nodes.ClassTreeNode; -import com.intellij.ide.util.gotoByName.ChooseByNameBase; -import com.intellij.ide.util.gotoByName.ChooseByNamePanel; -import com.intellij.ide.util.gotoByName.GotoClassModel; +import com.intellij.ide.util.gotoByName.*; import com.intellij.ide.util.treeView.AlphaComparator; import com.intellij.ide.util.treeView.NodeRenderer; +import com.intellij.ide.actions.GotoClassAction; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.project.Project; @@ -25,6 +24,7 @@ import com.intellij.ui.TreeSpeedSearch; import com.intellij.util.containers.FilteringIterator; import com.intellij.util.ui.Tree; import com.intellij.util.ui.tree.TreeUtil; +import com.intellij.navigation.NavigationItem; import javax.swing.*; import javax.swing.event.ChangeEvent; @@ -215,7 +215,7 @@ public class TreeClassChooserDialog extends DialogWrapper implements TreeClassCh } } - protected void initUI(Callback callback, ModalityState modalityState, boolean allowMultipleSelection) { + protected void initUI(ChooseByNamePopupComponent.Callback callback, ModalityState modalityState, boolean allowMultipleSelection) { super.initUI(callback, modalityState, allowMultipleSelection); dummyPanel.add(myGotoByNamePanel.getPanel(), BorderLayout.CENTER); IdeFocusTraversalPolicy.getPreferredFocusedComponent(myGotoByNamePanel.getPanel()).requestFocus(); @@ -271,6 +271,20 @@ public class TreeClassChooserDialog extends DialogWrapper implements TreeClassCh show(); } + public void showPopup() { + ChooseByNamePopup popup = ChooseByNamePopup.createPopup(myProject, new MyGotoClassModel()); + popup.invoke(new ChooseByNamePopupComponent.Callback() { + public void onClose () { + + } + public void elementChosen(Object element) { + mySelectedClass = (PsiClass)element; + ((NavigationItem)element).navigate(true); + } + }, getModalityState(), true); + } + + private void selectElementInTree(final PsiElement element) { if (element == null) throw new IllegalArgumentException("aClass cannot be null"); @@ -350,7 +364,7 @@ public class TreeClassChooserDialog extends DialogWrapper implements TreeClassCh } } - private class MyCallback extends ChooseByNameBase.Callback { + private class MyCallback extends ChooseByNamePopupComponent.Callback { public void elementChosen(Object element) { mySelectedClass = (PsiClass)element; close(OK_EXIT_CODE); diff --git a/source/com/intellij/ide/util/gotoByName/ChooseByNameBase.java b/source/com/intellij/ide/util/gotoByName/ChooseByNameBase.java index 7b0145acb192..c82a49e77ae7 100644 --- a/source/com/intellij/ide/util/gotoByName/ChooseByNameBase.java +++ b/source/com/intellij/ide/util/gotoByName/ChooseByNameBase.java @@ -33,7 +33,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; -public abstract class ChooseByNameBase { +public abstract class ChooseByNameBase{ private static final Logger LOG = Logger.getInstance("#com.intellij.ide.util.gotoByName.ChooseByNameBase"); protected final Project myProject; @@ -55,7 +55,7 @@ public abstract class ChooseByNameBase { private ArrayList> myHistory; private ArrayList> myFuture; - protected Callback myActionListener; + protected ChooseByNamePopupComponent.Callback myActionListener; protected final Alarm myAlarm = new Alarm(); protected boolean myListIsUpToDate = false; @@ -79,10 +79,7 @@ public abstract class ChooseByNameBase { private static final Comparator UCS_COMPARATOR = new IgnoreCaseComparator(); - public static abstract class Callback { - public abstract void elementChosen(Object element); - public void onClose() { } - } + /** * @param initialText initial text which will be in the lookup text field @@ -94,7 +91,7 @@ public abstract class ChooseByNameBase { myExactPrefixLen = 0; } - public void invoke(final Callback callback, final ModalityState modalityState, boolean allowMultipleSelection) { + public void invoke(final ChooseByNamePopupComponent.Callback callback, final ModalityState modalityState, boolean allowMultipleSelection) { initUI(callback, modalityState, allowMultipleSelection); } @@ -163,7 +160,7 @@ public abstract class ChooseByNameBase { * @param modalityState - if not null rebuilds list in given {@link ModalityState} * @param allowMultipleSelection */ - protected void initUI(final Callback callback, final ModalityState modalityState, boolean allowMultipleSelection) { + protected void initUI(final ChooseByNamePopupComponent.Callback callback, final ModalityState modalityState, boolean allowMultipleSelection) { myActionListener = callback; //myTextFieldPanel = new JPanelProvider(new GridBagLayout()); myTextFieldPanel = new JPanelProvider(); diff --git a/source/com/intellij/ide/util/gotoByName/ChooseByNameFactoryImpl.java b/source/com/intellij/ide/util/gotoByName/ChooseByNameFactoryImpl.java new file mode 100644 index 000000000000..ea59aa09f9b0 --- /dev/null +++ b/source/com/intellij/ide/util/gotoByName/ChooseByNameFactoryImpl.java @@ -0,0 +1,35 @@ +package com.intellij.ide.util.gotoByName; + +import com.intellij.openapi.project.Project; + +/** + * User: anna + * Date: Jan 26, 2005 + */ +public class ChooseByNameFactoryImpl extends ChooseByNameFactory { + private Project myProject; + + public ChooseByNameFactoryImpl(final Project project) { + myProject = project; + } + + public ChooseByNamePopup createChooseByNamePopupComponent(final ChooseByNameModel model) { + return ChooseByNamePopup.createPopup(myProject, model); + } + + public void projectOpened() { + } + + public void projectClosed() { + } + + public String getComponentName() { + return "ChooseByNameFactoryImpl"; + } + + public void initComponent() { + } + + public void disposeComponent() { + } +} diff --git a/source/com/intellij/ide/util/gotoByName/ChooseByNamePanel.java b/source/com/intellij/ide/util/gotoByName/ChooseByNamePanel.java index eb1d1e8363b3..a914359d101b 100644 --- a/source/com/intellij/ide/util/gotoByName/ChooseByNamePanel.java +++ b/source/com/intellij/ide/util/gotoByName/ChooseByNamePanel.java @@ -13,7 +13,7 @@ public class ChooseByNamePanel extends ChooseByNameBase { super(project, model, initialText); } - protected void initUI(ChooseByNameBase.Callback callback, ModalityState modalityState, boolean allowMultipleSelection) { + protected void initUI(ChooseByNamePopupComponent.Callback callback, ModalityState modalityState, boolean allowMultipleSelection) { super.initUI(callback, modalityState, allowMultipleSelection); //myTextFieldPanel.setBorder(new EmptyBorder(0,0,0,0)); diff --git a/source/com/intellij/ide/util/gotoByName/ChooseByNamePopup.java b/source/com/intellij/ide/util/gotoByName/ChooseByNamePopup.java index c6f9a93fe752..a86a6d1db265 100644 --- a/source/com/intellij/ide/util/gotoByName/ChooseByNamePopup.java +++ b/source/com/intellij/ide/util/gotoByName/ChooseByNamePopup.java @@ -9,13 +9,13 @@ import com.intellij.openapi.wm.ex.LayoutFocusTraversalPolicyExt; import javax.swing.*; import java.awt.*; -public class ChooseByNamePopup extends ChooseByNameBase{ +public class ChooseByNamePopup extends ChooseByNameBase implements ChooseByNamePopupComponent{ private static final Key CHOOSE_BY_NAME_POPUP_IN_PROJECT_KEY = new Key("ChooseByNamePopup"); private ChooseByNamePopup(final Project project, final ChooseByNameModel model, final String initialText) { super(project, model, initialText); } - protected void initUI(final ChooseByNameBase.Callback callback, final ModalityState modalityState, boolean allowMultipleSelection) { + protected void initUI(final ChooseByNamePopupComponent.Callback callback, final ModalityState modalityState, boolean allowMultipleSelection) { super.initUI(callback, modalityState, allowMultipleSelection); //LaterInvocatorEx.enterModal(myTextFieldPanel); if (myInitialText != null) {