mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
find by name api
This commit is contained in:
@@ -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{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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() { }
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user