find by name api

This commit is contained in:
Anna Kozlova
2005-02-07 22:28:07 +03:00
parent 8cb7a0d572
commit 0975129567
13 changed files with 118 additions and 46 deletions

View File

@@ -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{
}
}

View File

@@ -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);
}

View File

@@ -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() { }
}
}

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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))

View File

@@ -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);

View File

@@ -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<Pair<String, Integer>> myHistory;
private ArrayList<Pair<String, Integer>> 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<String> 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();

View File

@@ -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() {
}
}

View File

@@ -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));

View File

@@ -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<ChooseByNamePopup> CHOOSE_BY_NAME_POPUP_IN_PROJECT_KEY = new Key<ChooseByNamePopup>("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) {