diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/ide/util')
5 files changed, 36 insertions, 10 deletions
diff --git a/platform/lang-impl/src/com/intellij/ide/util/PsiElementListCellRenderer.java b/platform/lang-impl/src/com/intellij/ide/util/PsiElementListCellRenderer.java index f51ec554485a..d0a0648285d6 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/PsiElementListCellRenderer.java +++ b/platform/lang-impl/src/com/intellij/ide/util/PsiElementListCellRenderer.java @@ -102,7 +102,7 @@ public abstract class PsiElementListCellRenderer<T extends PsiElement> extends J setPaintFocusBorder(hasFocus && UIUtil.isToUseDottedCellBorder() && myFocusBorderEnabled); if (value instanceof PsiElement) { T element = (T)value; - String name = getElementText(element); + String name = element.isValid() ? getElementText(element) : "INVALID"; PsiFile psiFile = element.isValid() ? element.getContainingFile() : null; boolean isProblemFile = false; diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java index 3e90f2310884..53d71d9794fa 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java @@ -54,6 +54,8 @@ import com.intellij.openapi.util.*; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.openapi.wm.ToolWindow; +import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.psi.PsiElement; @@ -518,23 +520,33 @@ public abstract class ChooseByNameBase { else { Component oppositeComponent = e.getOppositeComponent(); if (oppositeComponent == myCheckBox) { - myTextField.requestFocus(); + IdeFocusManager.getInstance(myProject).requestFocus(myTextField, true); return; } if (oppositeComponent != null && !(oppositeComponent instanceof JFrame) && myList.isShowing() && (oppositeComponent == myList || SwingUtilities.isDescendingFrom(myList, oppositeComponent))) { - myTextField.requestFocus();// Otherwise me may skip some KeyEvents + IdeFocusManager.getInstance(myProject).requestFocus(myTextField, true);// Otherwise me may skip some KeyEvents return; } + if (oppositeComponent != null) { + ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(myProject); + ToolWindow toolWindow = toolWindowManager.getToolWindow(toolWindowManager.getActiveToolWindowId()); + if (toolWindow != null) { + JComponent toolWindowComponent = toolWindow.getComponent(); + if (SwingUtilities.isDescendingFrom(oppositeComponent, toolWindowComponent)) { + return; // Allow toolwindows to gain focus (used by QuickDoc shown in a toolwindow) + } + } + } + EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue(); if (queue instanceof IdeEventQueue) { if (!((IdeEventQueue)queue).wasRootRecentlyClicked(oppositeComponent)) { Component root = SwingUtilities.getRoot(myTextField); if (root != null && root.isShowing()) { - root.requestFocus(); - myTextField.requestFocus(); + IdeFocusManager.getInstance(myProject).requestFocus(myTextField, true); return; } } @@ -641,7 +653,7 @@ public abstract class ChooseByNameBase { @Override public boolean onClick(@NotNull MouseEvent e, int clickCount) { if (!myTextField.hasFocus()) { - myTextField.requestFocus(); + IdeFocusManager.getInstance(myProject).requestFocus(myTextField, true); } if (clickCount == 2) { diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java index c40831d276de..c26bd353de50 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java @@ -62,6 +62,7 @@ public abstract class ContributorsBasedGotoByModel implements ChooseByNameModelE protected ContributorsBasedGotoByModel(@NotNull Project project, @NotNull ChooseByNameContributor[] contributors) { myProject = project; myContributors = contributors; + assert !Arrays.asList(contributors).contains(null); } @Override @@ -95,7 +96,7 @@ public abstract class ContributorsBasedGotoByModel implements ChooseByNameModelE ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator(); Processor<ChooseByNameContributor> processor = new ReadActionProcessor<ChooseByNameContributor>() { @Override - public boolean processInReadAction(ChooseByNameContributor contributor) { + public boolean processInReadAction(@NotNull ChooseByNameContributor contributor) { try { if (!myProject.isDisposed()) { long contributorStarted = System.currentTimeMillis(); @@ -185,13 +186,15 @@ public abstract class ContributorsBasedGotoByModel implements ChooseByNameModelE } @NotNull - public Object[] getElementsByName(final String name, final FindSymbolParameters parameters, @NotNull final ProgressIndicator canceled) { + public Object[] getElementsByName(@NotNull final String name, + @NotNull final FindSymbolParameters parameters, + @NotNull final ProgressIndicator canceled) { long elementByNameStarted = System.currentTimeMillis(); final List<NavigationItem> items = Collections.synchronizedList(new ArrayList<NavigationItem>()); Processor<ChooseByNameContributor> processor = new Processor<ChooseByNameContributor>() { @Override - public boolean process(ChooseByNameContributor contributor) { + public boolean process(@NotNull ChooseByNameContributor contributor) { if (myProject.isDisposed()) { return true; } diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java index aef7c9a17e74..8297a3db8e1f 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java @@ -71,6 +71,8 @@ public class ScopeChooserCombo extends ComboboxWithBrowseButton implements Dispo private NamedScopesHolder.ScopeListener myScopeListener; private NamedScopeManager myNamedScopeManager; private DependencyValidationManager myValidationManager; + private boolean myCurrentSelection = true; + private boolean myUsageView = true; public ScopeChooserCombo() { super(new IgnoringComboBox(){ @@ -118,6 +120,14 @@ public class ScopeChooserCombo extends ComboboxWithBrowseButton implements Dispo selectScope(preselect); } + public void setCurrentSelection(boolean currentSelection) { + myCurrentSelection = currentSelection; + } + + public void setUsageView(boolean usageView) { + myUsageView = usageView; + } + @Override public void dispose() { super.dispose(); @@ -220,7 +230,7 @@ public class ScopeChooserCombo extends ComboboxWithBrowseButton implements Dispo private void createPredefinedScopeDescriptors(DefaultComboBoxModel model) { @SuppressWarnings("deprecation") final DataContext context = DataManager.getInstance().getDataContext(); - for (SearchScope scope : getPredefinedScopes(myProject, context, mySuggestSearchInLibs, myPrevSearchFiles, true, true)) { + for (SearchScope scope : getPredefinedScopes(myProject, context, mySuggestSearchInLibs, myPrevSearchFiles, myCurrentSelection, myUsageView)) { model.addElement(new ScopeDescriptor(scope)); } for (ScopeDescriptorProvider provider : Extensions.getExtensions(ScopeDescriptorProvider.EP_NAME)) { diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeDescriptorProvider.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeDescriptorProvider.java index fb879abd2595..44baafa0b86e 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeDescriptorProvider.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeDescriptorProvider.java @@ -25,6 +25,7 @@ import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; public interface ScopeDescriptorProvider { + ScopeDescriptor[] EMPTY = new ScopeDescriptor[0]; ExtensionPointName<ScopeDescriptorProvider> EP_NAME = ExtensionPointName.create("com.intellij.scopeDescriptorProvider"); @NotNull |