diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java index 9da62fb6f49a..5874759ab63d 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java @@ -48,7 +48,8 @@ public abstract class JBPopupFactory { return ServiceManager.getService(JBPopupFactory.class); } - public PopupChooserBuilder createListPopupBuilder(JList list) { + @NotNull + public PopupChooserBuilder createListPopupBuilder(@NotNull JList list) { return new PopupChooserBuilder(list); } @@ -60,6 +61,7 @@ public abstract class JBPopupFactory { * @param defaultOptionIndex the index of the option which is selected by default. * @return the popup instance. */ + @NotNull public abstract ListPopup createConfirmation(String title, Runnable onYes, int defaultOptionIndex); /** @@ -72,6 +74,7 @@ public abstract class JBPopupFactory { * @param defaultOptionIndex the index of the option which is selected by default. * @return the popup instance. */ + @NotNull public abstract ListPopup createConfirmation(String title, String yesText, String noText, Runnable onYes, int defaultOptionIndex); /** @@ -85,9 +88,16 @@ public abstract class JBPopupFactory { * @param defaultOptionIndex the index of the option which is selected by default. * @return the popup instance. */ - public abstract ListPopup createConfirmation(String title, String yesText, String noText, Runnable onYes, Runnable onNo, int defaultOptionIndex); + @NotNull + public abstract ListPopup createConfirmation(String title, + String yesText, + String noText, + Runnable onYes, + Runnable onNo, + int defaultOptionIndex); - public abstract ListPopupStep createActionsStep(ActionGroup actionGroup, + @NotNull + public abstract ListPopupStep createActionsStep(@NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean showDisabledActions, @@ -95,7 +105,8 @@ public abstract class JBPopupFactory { Component component, boolean honorActionMnemonics); - public abstract ListPopupStep createActionsStep(ActionGroup actionGroup, + @NotNull + public abstract ListPopupStep createActionsStep(@NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean showDisabledActions, @@ -104,7 +115,8 @@ public abstract class JBPopupFactory { boolean honorActionMnemonics, int defaultOptionIndex, final boolean autoSelectionEnabled); - public abstract RelativePoint guessBestPopupLocation(JComponent component); + @NotNull + public abstract RelativePoint guessBestPopupLocation(@NotNull JComponent component); public boolean isChildPopupFocused(@Nullable Component parent) { return getChildFocusedPopup(parent) != null; @@ -155,8 +167,9 @@ public abstract class JBPopupFactory { * @param showDisabledActions if true, disabled actions are shown as disabled; if false, disabled actions are not shown * @return the popup instance. */ + @NotNull public abstract ListPopup createActionGroupPopup(@Nullable String title, - ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, ActionSelectionAid selectionAidMethod, boolean showDisabledActions); @@ -172,8 +185,9 @@ public abstract class JBPopupFactory { * @param actionPlace action place for ActionManager to use when creating the popup * @return the popup instance. */ + @NotNull public abstract ListPopup createActionGroupPopup(String title, - ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, ActionSelectionAid selectionAidMethod, boolean showDisabledActions, @Nullable final String actionPlace); @@ -191,16 +205,18 @@ public abstract class JBPopupFactory { * is displayed) * @return the popup instance. */ + @NotNull public abstract ListPopup createActionGroupPopup(String title, - ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, ActionSelectionAid selectionAidMethod, boolean showDisabledActions, @Nullable Runnable disposeCallback, int maxRowCount); + @NotNull public abstract ListPopup createActionGroupPopup(String title, - ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean showDisabledActions, @@ -212,7 +228,8 @@ public abstract class JBPopupFactory { /** * @deprecated use {@link #createListPopup(ListPopupStep)} instead (step must be a ListPopupStep in any case) */ - public abstract ListPopup createWizardStep(PopupStep step); + @NotNull + public abstract ListPopup createWizardStep(@NotNull PopupStep step); /** * Creates a custom list popup with the specified step. @@ -220,12 +237,16 @@ public abstract class JBPopupFactory { * @param step the custom step for the list popup. * @return the popup instance. */ - public abstract ListPopup createListPopup(ListPopupStep step); + @NotNull + public abstract ListPopup createListPopup(@NotNull ListPopupStep step); - public abstract TreePopup createTree(JBPopup parent, TreePopupStep step, Object parentValue); - public abstract TreePopup createTree(TreePopupStep step); + @NotNull + public abstract TreePopup createTree(JBPopup parent, @NotNull TreePopupStep step, Object parentValue); + @NotNull + public abstract TreePopup createTree(@NotNull TreePopupStep step); - public abstract ComponentPopupBuilder createComponentPopupBuilder(JComponent content, @Nullable JComponent preferableFocusComponent); + @NotNull + public abstract ComponentPopupBuilder createComponentPopupBuilder(@NotNull JComponent content, @Nullable JComponent preferableFocusComponent); /** * Returns the location where a popup with the specified data context is displayed. @@ -237,6 +258,7 @@ public abstract class JBPopupFactory { * - current selected node for tree
* - current selected row for list
*/ + @NotNull public abstract RelativePoint guessBestPopupLocation(@NotNull DataContext dataContext); /** @@ -245,30 +267,36 @@ public abstract class JBPopupFactory { * @param editor the editor over which the popup is shown. * @return location as close as possible to the action origin. */ - public abstract RelativePoint guessBestPopupLocation(Editor editor); + @NotNull + public abstract RelativePoint guessBestPopupLocation(@NotNull Editor editor); /** * @param editor the editor over which the popup is shown. * @return true if popup location is located in visible area * false if center would be suggested instead */ - public abstract boolean isBestPopupLocationVisible(Editor editor); + public abstract boolean isBestPopupLocationVisible(@NotNull Editor editor); public abstract Point getCenterOf(JComponent container, JComponent content); - @Nullable + @NotNull public abstract List getChildPopups(@NotNull Component parent); public abstract boolean isPopupActive(); + @NotNull public abstract BalloonBuilder createBalloonBuilder(@NotNull JComponent content); + @NotNull public abstract BalloonBuilder createDialogBalloonBuilder(@NotNull JComponent content, String title); + @NotNull public abstract BalloonBuilder createHtmlTextBalloonBuilder(@NotNull String htmlContent, @Nullable Icon icon, Color fillColor, @Nullable HyperlinkListener listener); + @NotNull public abstract BalloonBuilder createHtmlTextBalloonBuilder(@NotNull String htmlContent, MessageType messageType, @Nullable HyperlinkListener listener); + @NotNull public abstract JBPopup createMessage(String text); @Nullable diff --git a/platform/platform-impl/src/com/intellij/ui/popup/ComponentPopupBuilderImpl.java b/platform/platform-impl/src/com/intellij/ui/popup/ComponentPopupBuilderImpl.java index 6d27208999cd..5aefe15540ed 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/ComponentPopupBuilderImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/ComponentPopupBuilderImpl.java @@ -82,75 +82,86 @@ public class ComponentPopupBuilderImpl implements ComponentPopupBuilder { private List> myKeyboardActions = Collections.emptyList(); private Component mySettingsButtons; private boolean myMayBeParent; - private int myAdAlignment = SwingUtilities.LEFT; + private int myAdAlignment = SwingConstants.LEFT; private BooleanFunction myKeyEventHandler; - public ComponentPopupBuilderImpl(final JComponent component, + public ComponentPopupBuilderImpl(@NotNull JComponent component, final JComponent preferredFocusedComponent) { myComponent = component; myPreferredFocusedComponent = preferredFocusedComponent; } + @Override @NotNull public ComponentPopupBuilder setMayBeParent(boolean mayBeParent) { myMayBeParent = mayBeParent; return this; } + @Override @NotNull public ComponentPopupBuilder setTitle(String title) { myTitle = title; return this; } + @Override @NotNull public ComponentPopupBuilder setResizable(final boolean resizable) { myResizable = resizable; return this; } + @Override @NotNull public ComponentPopupBuilder setMovable(final boolean movable) { myMovable = movable; return this; } + @Override @NotNull public ComponentPopupBuilder setCancelOnClickOutside(final boolean cancel) { myCancelOnClickOutside = cancel; return this; } + @Override @NotNull public ComponentPopupBuilder setCancelOnMouseOutCallback(final MouseChecker shouldCancel) { myCancelOnMouseOutCallback = shouldCancel; return this; } + @Override @NotNull public ComponentPopupBuilder addListener(final JBPopupListener listener) { myListeners.add(listener); return this; } + @Override @NotNull public ComponentPopupBuilder setRequestFocus(final boolean requestFocus) { myRequestFocus = requestFocus; return this; } + @Override @NotNull public ComponentPopupBuilder setFocusable(final boolean focusable) { myFocusable = focusable; return this; } + @Override @NotNull public ComponentPopupBuilder setForceHeavyweight(final boolean forceHeavyweight) { myForceHeavyweight = forceHeavyweight; return this; } + @Override @NotNull public ComponentPopupBuilder setDimensionServiceKey(final Project project, final String dimensionServiceKey, final boolean useForXYLocation) { myDimensionServiceKey = dimensionServiceKey; @@ -159,41 +170,48 @@ public class ComponentPopupBuilderImpl implements ComponentPopupBuilder { return this; } + @Override @NotNull public ComponentPopupBuilder setCancelCallback(final Computable shouldProceed) { myCallback = shouldProceed; return this; } + @Override @NotNull public ComponentPopupBuilder setCancelButton(@NotNull final IconButton cancelButton) { myCancelButton = cancelButton; return this; } + @Override @NotNull public ComponentPopupBuilder setCommandButton(@NotNull ActiveComponent button) { myCommandButton = button; return this; } + @Override @NotNull public ComponentPopupBuilder setCouldPin(@Nullable final Processor callback) { myPinCallback = callback; return this; } + @Override @NotNull public ComponentPopupBuilder setKeyboardActions(@NotNull List> keyboardActions) { myKeyboardActions = keyboardActions; return this; } + @Override @NotNull public ComponentPopupBuilder setSettingButtons(@NotNull Component button) { mySettingsButtons = button; return this; } + @Override @NotNull public ComponentPopupBuilder setCancelOnOtherWindowOpen(final boolean cancelOnWindow) { myCancelOnWindow = cancelOnWindow; @@ -213,12 +231,14 @@ public class ComponentPopupBuilderImpl implements ComponentPopupBuilder { return this; } + @Override @NotNull public ComponentPopupBuilder setProject(Project project) { myProject = project; return this; } + @Override @NotNull public JBPopup createPopup() { final AbstractPopup popup = new AbstractPopup().init(myProject, myComponent, myPreferredFocusedComponent, myRequestFocus, myFocusable, myForceHeavyweight, @@ -237,36 +257,42 @@ public class ComponentPopupBuilderImpl implements ComponentPopupBuilder { return popup; } + @Override @NotNull public ComponentPopupBuilder setRequestFocusCondition(Project project, Condition condition) { myRequestFocus = condition.value(project); return this; } + @Override @NotNull public ComponentPopupBuilder setTitleIcon(@NotNull final ActiveIcon icon) { myTitleIcon = icon; return this; } + @Override @NotNull public ComponentPopupBuilder setCancelKeyEnabled(final boolean enabled) { myCancelKeyEnabled = enabled; return this; } + @Override @NotNull public ComponentPopupBuilder setLocateByContent(final boolean byContent) { myLocateByContent = byContent; return this; } + @Override @NotNull public ComponentPopupBuilder setLocateWithinScreenBounds(final boolean within) { myPlacewithinScreen = within; return this; } + @Override @NotNull public ComponentPopupBuilder setMinSize(final Dimension minSize) { myMinSize = minSize; @@ -279,18 +305,21 @@ public class ComponentPopupBuilderImpl implements ComponentPopupBuilder { return this; } + @Override @NotNull public ComponentPopupBuilder setAlpha(final float alpha) { myAlpha = alpha; return this; } + @Override @NotNull public ComponentPopupBuilder setBelongsToGlobalPopupStack(final boolean isInStack) { myInStack = isInStack; return this; } + @Override @NotNull public ComponentPopupBuilder addUserData(final Object object) { if (myUserData == null) { @@ -300,21 +329,24 @@ public class ComponentPopupBuilderImpl implements ComponentPopupBuilder { return this; } + @Override @NotNull public ComponentPopupBuilder setModalContext(final boolean modal) { myModalContext = modal; return this; } + @Override @NotNull public ComponentPopupBuilder setFocusOwners(@NotNull final Component[] focusOwners) { myFocusOwners = focusOwners; return this; } + @Override @NotNull public ComponentPopupBuilder setAdText(@Nullable final String text) { - return setAdText(text, SwingUtilities.LEFT); + return setAdText(text, SwingConstants.LEFT); } @NotNull diff --git a/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java b/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java index a0fc305a0c14..e14d86855235 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java @@ -81,14 +81,20 @@ public class PopupFactoryImpl extends JBPopupFactory { private final Map> myStorage = new WeakHashMap>(); + @NotNull + @Override public ListPopup createConfirmation(String title, final Runnable onYes, int defaultOptionIndex) { return createConfirmation(title, CommonBundle.getYesButtonText(), CommonBundle.getNoButtonText(), onYes, defaultOptionIndex); } + @NotNull + @Override public ListPopup createConfirmation(String title, final String yesText, String noText, final Runnable onYes, int defaultOptionIndex) { return createConfirmation(title, yesText, noText, onYes, EmptyRunnable.getInstance(), defaultOptionIndex); } + @NotNull + @Override public JBPopup createMessage(String text) { return createListPopup(new BaseListPopupStep(null, new String[]{text})); } @@ -110,6 +116,8 @@ public class PopupFactoryImpl extends JBPopupFactory { return null; } + @NotNull + @Override public ListPopup createConfirmation(String title, final String yesText, String noText, @@ -119,6 +127,7 @@ public class PopupFactoryImpl extends JBPopupFactory { { final BaseListPopupStep step = new BaseListPopupStep(title, new String[]{yesText, noText}) { + @Override public PopupStep onChosen(String selectedValue, final boolean finalChoice) { if (selectedValue.equals(yesText)) { onYes.run(); @@ -129,10 +138,12 @@ public class PopupFactoryImpl extends JBPopupFactory { return FINAL_CHOICE; } + @Override public void canceled() { onNo.run(); } + @Override public boolean isMnemonicsNavigationEnabled() { return true; } @@ -145,7 +156,7 @@ public class PopupFactoryImpl extends JBPopupFactory { private static ListPopup createActionGroupPopup(final String title, - final ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean useAlphaAsNumbers, @@ -170,7 +181,7 @@ public class PopupFactoryImpl extends JBPopupFactory { } private static ListPopup createActionGroupPopup(final String title, - final ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean useAlphaAsNumbers, @@ -188,7 +199,7 @@ public class PopupFactoryImpl extends JBPopupFactory { private final Runnable myDisposeCallback; private final Component myComponent; - public ActionGroupPopup(final String title, final ActionGroup actionGroup, @NotNull DataContext dataContext, + public ActionGroupPopup(final String title, @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean useAlphaAsNumbers, boolean showDisabledActions, boolean honorActionMnemonics, final Runnable disposeCallback, final int maxRowCount, final Condition preselectActionCondition, @Nullable final String actionPlace) { @@ -199,6 +210,7 @@ public class PopupFactoryImpl extends JBPopupFactory { myComponent = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext); addListSelectionListener(new ListSelectionListener() { + @Override public void valueChanged(ListSelectionEvent e) { final JList list = (JList)e.getSource(); final ActionItem actionItem = (ActionItem)list.getSelectedValue(); @@ -214,7 +226,7 @@ public class PopupFactoryImpl extends JBPopupFactory { }); } - private static ListPopupStep createStep(String title, ActionGroup actionGroup, @NotNull DataContext dataContext, + private static ListPopupStep createStep(String title, @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean useAlphaAsNumbers, boolean showDisabledActions, boolean honorActionMnemonics, Condition preselectActionCondition, @Nullable String actionPlace) { @@ -242,8 +254,10 @@ public class PopupFactoryImpl extends JBPopupFactory { } } + @NotNull + @Override public ListPopup createActionGroupPopup(final String title, - final ActionGroup actionGroup, + @NotNull final ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean showDisabledActions, @@ -255,8 +269,10 @@ public class PopupFactoryImpl extends JBPopupFactory { disposeCallback, maxRowCount, preselectActionCondition, null); } + @NotNull + @Override public ListPopup createActionGroupPopup(String title, - ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, ActionSelectionAid selectionAidMethod, boolean showDisabledActions) { @@ -268,8 +284,10 @@ public class PopupFactoryImpl extends JBPopupFactory { null, -1); } + @NotNull + @Override public ListPopup createActionGroupPopup(String title, - ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, ActionSelectionAid selectionAidMethod, boolean showDisabledActions, @@ -282,8 +300,10 @@ public class PopupFactoryImpl extends JBPopupFactory { null, -1, null, actionPlace); } + @NotNull + @Override public ListPopup createActionGroupPopup(String title, - ActionGroup actionGroup, + @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, ActionSelectionAid selectionAidMethod, boolean showDisabledActions, @@ -298,7 +318,9 @@ public class PopupFactoryImpl extends JBPopupFactory { maxRowCount); } - public ListPopupStep createActionsStep(final ActionGroup actionGroup, + @NotNull + @Override + public ListPopupStep createActionsStep(@NotNull final ActionGroup actionGroup, @NotNull DataContext dataContext, final boolean showNumbers, final boolean showDisabledActions, @@ -308,7 +330,7 @@ public class PopupFactoryImpl extends JBPopupFactory { return createActionsStep(actionGroup, dataContext, showNumbers, showDisabledActions, title, component, honorActionMnemonics, 0, false); } - private static ListPopupStep createActionsStep(ActionGroup actionGroup, @NotNull DataContext dataContext, + private static ListPopupStep createActionsStep(@NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean useAlphaAsNumbers, boolean showDisabledActions, String title, Component component, boolean honorActionMnemonics, final int defaultOptionIndex, final boolean autoSelectionEnabled) { @@ -325,7 +347,7 @@ public class PopupFactoryImpl extends JBPopupFactory { }, autoSelectionEnabled, showDisabledActions); } - private static List makeActionItemsFromActionGroup(ActionGroup actionGroup, + private static List makeActionItemsFromActionGroup(@NotNull ActionGroup actionGroup, DataContext dataContext, boolean showNumbers, boolean useAlphaAsNumbers, @@ -337,7 +359,7 @@ public class PopupFactoryImpl extends JBPopupFactory { return builder.getItems(); } - private static ListPopupStep createActionsStep(ActionGroup actionGroup, @NotNull DataContext dataContext, + private static ListPopupStep createActionsStep(@NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean useAlphaAsNumbers, boolean showDisabledActions, String title, Component component, boolean honorActionMnemonics, Condition preselectActionCondition, boolean autoSelectionEnabled) { @@ -347,7 +369,9 @@ public class PopupFactoryImpl extends JBPopupFactory { autoSelectionEnabled, showDisabledActions); } - public ListPopupStep createActionsStep(ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean showDisabledActions, + @NotNull + @Override + public ListPopupStep createActionsStep(@NotNull ActionGroup actionGroup, @NotNull DataContext dataContext, boolean showNumbers, boolean showDisabledActions, String title, Component component, boolean honorActionMnemonics, int defaultOptionIndex, final boolean autoSelectionEnabled) { return createActionsStep(actionGroup, dataContext, showNumbers, true, showDisabledActions, title, component, honorActionMnemonics, @@ -362,27 +386,39 @@ public class PopupFactoryImpl extends JBPopupFactory { return false; } - public ListPopup createWizardStep(PopupStep step) { + @NotNull + @Override + public ListPopup createWizardStep(@NotNull PopupStep step) { return new ListPopupImpl((ListPopupStep) step); } - public ListPopup createListPopup(ListPopupStep step) { + @NotNull + @Override + public ListPopup createListPopup(@NotNull ListPopupStep step) { return new ListPopupImpl(step); } - public TreePopup createTree(JBPopup parent, TreePopupStep aStep, Object parentValue) { + @NotNull + @Override + public TreePopup createTree(JBPopup parent, @NotNull TreePopupStep aStep, Object parentValue) { return new TreePopupImpl(parent, aStep, parentValue); } - public TreePopup createTree(TreePopupStep aStep) { + @NotNull + @Override + public TreePopup createTree(@NotNull TreePopupStep aStep) { return new TreePopupImpl(aStep); } - public ComponentPopupBuilder createComponentPopupBuilder(JComponent content, JComponent prefferableFocusComponent) { + @NotNull + @Override + public ComponentPopupBuilder createComponentPopupBuilder(@NotNull JComponent content, JComponent prefferableFocusComponent) { return new ComponentPopupBuilderImpl(content, prefferableFocusComponent); } + @NotNull + @Override public RelativePoint guessBestPopupLocation(@NotNull DataContext dataContext) { KeyboardFocusManager focusManager=KeyboardFocusManager.getCurrentKeyboardFocusManager(); Component component = focusManager.getFocusOwner(); @@ -411,7 +447,9 @@ public class PopupFactoryImpl extends JBPopupFactory { } } - public RelativePoint guessBestPopupLocation(final JComponent component) { + @NotNull + @Override + public RelativePoint guessBestPopupLocation(@NotNull final JComponent component) { Point popupMenuPoint = null; final Rectangle visibleRect = component.getVisibleRect(); if (component instanceof JList) { // JList @@ -476,11 +514,13 @@ public class PopupFactoryImpl extends JBPopupFactory { } @Override - public boolean isBestPopupLocationVisible(Editor editor) { + public boolean isBestPopupLocationVisible(@NotNull Editor editor) { return getVisibleBestPopupLocation(editor) != null; } - public RelativePoint guessBestPopupLocation(Editor editor) { + @NotNull + @Override + public RelativePoint guessBestPopupLocation(@NotNull Editor editor) { Point p = getVisibleBestPopupLocation(editor); if (p == null) { final Rectangle visibleArea = editor.getScrollingModel().getVisibleArea(); @@ -490,7 +530,7 @@ public class PopupFactoryImpl extends JBPopupFactory { } @Nullable - private static Point getVisibleBestPopupLocation(Editor editor) { + private static Point getVisibleBestPopupLocation(@NotNull Editor editor) { VisualPosition visualPosition = editor.getUserData(ANCHOR_POPUP_POSITION); if (visualPosition == null) { @@ -509,6 +549,7 @@ public class PopupFactoryImpl extends JBPopupFactory { return visibleArea.contains(p) ? p : null; } + @Override public Point getCenterOf(JComponent container, JComponent content) { return AbstractPopup.getCenterOf(container, content); } @@ -593,15 +634,18 @@ public class PopupFactoryImpl extends JBPopupFactory { return defaultOptionIndex; } + @Override @NotNull public List getValues() { return myItems; } + @Override public boolean isSelectable(final ActionItem value) { return value.isEnabled(); } + @Override public int getMnemonicPos(final ActionItem value) { final String text = getTextFor(value); int i = text.indexOf(UIUtil.MNEMONIC); @@ -614,27 +658,33 @@ public class PopupFactoryImpl extends JBPopupFactory { return i; } + @Override public Icon getIconFor(final ActionItem aValue) { return aValue.getIcon(); } + @Override @NotNull public String getTextFor(final ActionItem value) { return value.getText(); } + @Override public ListSeparator getSeparatorAbove(final ActionItem value) { return value.isPrependWithSeparator() ? new ListSeparator(value.getSeparatorText()) : null; } + @Override public int getDefaultOptionIndex() { return myDefaultOptionIndex; } + @Override public String getTitle() { return myTitle; } + @Override public PopupStep onChosen(final ActionItem actionChoice, final boolean finalChoice) { if (!actionChoice.isEnabled()) return FINAL_CHOICE; final AnAction action = actionChoice.getAction(); @@ -648,6 +698,7 @@ public class PopupFactoryImpl extends JBPopupFactory { } else { myFinalRunnable = new Runnable() { + @Override public void run() { action.actionPerformed( new AnActionEvent(null, dataContext, ActionPlaces.UNKNOWN, action.getTemplatePresentation().clone(), @@ -658,47 +709,58 @@ public class PopupFactoryImpl extends JBPopupFactory { } } + @Override public Runnable getFinalRunnable() { return myFinalRunnable; } + @Override public boolean hasSubstep(final ActionItem selectedValue) { return selectedValue != null && selectedValue.isEnabled() && selectedValue.getAction() instanceof ActionGroup; } + @Override public void canceled() { } + @Override public boolean isMnemonicsNavigationEnabled() { return myEnableMnemonics; } + @Override public MnemonicNavigationFilter getMnemonicNavigationFilter() { return this; } + @Override public boolean canBeHidden(final ActionItem value) { return true; } + @Override public String getIndexedString(final ActionItem value) { return getTextFor(value); } + @Override public boolean isSpeedSearchEnabled() { return true; } + @Override public boolean isAutoSelectionEnabled() { return myAutoSelectionEnabled; } + @Override public SpeedSearchFilter getSpeedSearchFilter() { return this; } } - @Nullable + @Override + @NotNull public List getChildPopups(@NotNull final Component component) { return FocusTrackback.getChildPopups(component); } @@ -748,7 +810,7 @@ public class PopupFactoryImpl extends JBPopupFactory { return myListModel; } - public void buildGroup(ActionGroup actionGroup) { + public void buildGroup(@NotNull ActionGroup actionGroup) { calcMaxIconSize(actionGroup); myEmptyIcon = myMaxIconHeight != -1 && myMaxIconWidth != -1 ? new EmptyIcon(myMaxIconWidth, myMaxIconHeight) : null; @@ -786,7 +848,7 @@ public class PopupFactoryImpl extends JBPopupFactory { } } - private void appendActionsFromGroup(final ActionGroup actionGroup) { + private void appendActionsFromGroup(@NotNull ActionGroup actionGroup) { AnAction[] actions = actionGroup.getChildren(new AnActionEvent(null, myDataContext, myActionPlace, getPresentation(actionGroup), ActionManager.getInstance(), 0)); for (AnAction action : actions) { @@ -891,10 +953,13 @@ public class PopupFactoryImpl extends JBPopupFactory { } } + @NotNull + @Override public BalloonBuilder createBalloonBuilder(@NotNull final JComponent content) { return new BalloonPopupBuilderImpl(myStorage, content); } + @NotNull @Override public BalloonBuilder createDialogBalloonBuilder(@NotNull JComponent content, String title) { final BalloonPopupBuilderImpl builder = new BalloonPopupBuilderImpl(myStorage, content); @@ -916,6 +981,8 @@ public class PopupFactoryImpl extends JBPopupFactory { return builder; } + @NotNull + @Override public BalloonBuilder createHtmlTextBalloonBuilder(@NotNull final String htmlContent, @Nullable final Icon icon, final Color fillColor, @Nullable final HyperlinkListener listener) { @@ -956,6 +1023,7 @@ public class PopupFactoryImpl extends JBPopupFactory { return builder; } + @NotNull @Override public BalloonBuilder createHtmlTextBalloonBuilder(@NotNull String htmlContent, MessageType messageType, diff --git a/platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java index a04deacf9396..e53ab61a63ce 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java @@ -34,6 +34,7 @@ import com.intellij.util.ui.UIUtil; import org.intellij.lang.annotations.JdkConstants; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; @@ -55,7 +56,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene private final Timer myAutoSelectionTimer = UIUtil.createNamedTimer("Wizard autoselection",AUTO_POPUP_DELAY, this); - private MnemonicsSearch myMnemonicsSearch; + private final MnemonicsSearch myMnemonicsSearch; private Object myParentValue; private Point myLastOwnerPoint; @@ -65,11 +66,11 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene private final ActionMap myActionMap = new ActionMap(); private final InputMap myInputMap = new InputMap(); - public WizardPopup(PopupStep aStep) { + public WizardPopup(@NotNull PopupStep aStep) { this(null, aStep); } - public WizardPopup(JBPopup aParent, PopupStep aStep) { + public WizardPopup(@Nullable JBPopup aParent, @NotNull PopupStep aStep) { myParent = (WizardPopup) aParent; myStep = aStep; @@ -90,10 +91,11 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene final Project project = PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext()); init(project, scrollPane, getPreferredFocusableComponent(), true, true, true, true, null, false, aStep.getTitle(), null, true, null, false, null, null, null, false, null, true, false, true, null, 0f, - null, true, false, new Component[0], null, SwingUtilities.LEFT, true, Collections.>emptyList(), null, null, false, true, + null, true, false, new Component[0], null, SwingConstants.LEFT, true, Collections.>emptyList(), null, null, false, true, true, null); registerAction("disposeAll", KeyEvent.VK_ESCAPE, InputEvent.SHIFT_MASK, new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { if (mySpeedSearch.isHoldingFilter()) { mySpeedSearch.reset(); @@ -105,6 +107,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene }); AbstractAction goBackAction = new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { goBack(); } @@ -113,6 +116,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene registerAction("goBack3", KeyEvent.VK_ESCAPE, 0, goBackAction); myMnemonicsSearch = new MnemonicsSearch(this) { + @Override protected void select(Object value) { onSelectByMnemonic(value); } @@ -144,6 +148,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene protected abstract JComponent createContent(); + @Override public void dispose() { super.dispose(); @@ -167,6 +172,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene } } + @Override public void show(final Component owner, final int aScreenX, final int aScreenY, final boolean considerForcedXY) { LOG.assertTrue (!isDisposed()); @@ -193,6 +199,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene super.show(owner, targetBounds.x, targetBounds.y, true); } + @Override protected void afterShow() { super.afterShow(); registerAutoMove(); @@ -231,6 +238,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene protected abstract JComponent getPreferredFocusableComponent(); + @Override public void cancel(InputEvent e) { super.cancel(e); disposeChildren(); @@ -273,6 +281,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene myParentValue = parentValue; } + @Override @NotNull protected MyContentPanel createContentPanel(final boolean resizable, final PopupBorder border, final boolean isToDrawMacCorner) { return new MyContainer(resizable, border, isToDrawMacCorner); @@ -286,6 +295,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene setFocusCycleRoot(true); } + @Override public Dimension getPreferredSize() { final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); Point p = null; @@ -375,6 +385,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene } } + @Override public final void actionPerformed(ActionEvent e) { myAutoSelectionTimer.stop(); if (getStep().isAutoSelectionEnabled()) { @@ -399,6 +410,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene } + @Override public boolean shouldBeShowing(Object value) { if (!myStep.isSpeedSearchEnabled()) return true; SpeedSearchFilter filter = myStep.getSpeedSearchFilter(); @@ -425,11 +437,13 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene private class MyComponentAdapter extends ComponentAdapter { + @Override public void componentMoved(final ComponentEvent e) { processParentWindowMoved(); } } + @Override public final void setFinalRunnable(Runnable runnable) { if (getParent() == null) { super.setFinalRunnable(runnable); diff --git a/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupImpl.java b/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupImpl.java index 060d96648a28..35e4a62af26c 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupImpl.java @@ -32,6 +32,7 @@ import com.intellij.ui.components.JBList; import com.intellij.ui.popup.ClosableByLeftArrow; import com.intellij.ui.popup.WizardPopup; import com.intellij.util.ui.UIUtil; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.border.EmptyBorder; @@ -53,22 +54,22 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { private int myMaxRowCount = 20; private boolean myAutoHandleBeforeShow; - public ListPopupImpl(ListPopupStep aStep, int maxRowCount) { + public ListPopupImpl(@NotNull ListPopupStep aStep, int maxRowCount) { super(aStep); if (maxRowCount != -1){ myMaxRowCount = maxRowCount; } } - public ListPopupImpl(ListPopupStep aStep) { + public ListPopupImpl(@NotNull ListPopupStep aStep) { this(aStep, -1); } - public ListPopupImpl(WizardPopup aParent, ListPopupStep aStep, Object parentValue) { + public ListPopupImpl(WizardPopup aParent, @NotNull ListPopupStep aStep, Object parentValue) { this(aParent, aStep, parentValue, -1); } - public ListPopupImpl(WizardPopup aParent, ListPopupStep aStep, Object parentValue, int maxRowCount) { + public ListPopupImpl(WizardPopup aParent, @NotNull ListPopupStep aStep, Object parentValue, int maxRowCount) { super(aParent, aStep); setParentValue(parentValue); if (maxRowCount != -1){ @@ -80,6 +81,7 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { return myListModel; } + @Override protected boolean beforeShow() { myList.addMouseMotionListener(myMouseMotionListener); myList.addMouseListener(myMouseListener); @@ -95,6 +97,7 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { return shouldShow; } + @Override protected void afterShow() { tryToAutoSelect(false); } @@ -202,6 +205,7 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { return myList; } + @Override protected JComponent createContent() { myMouseMotionListener = new MyMouseMotionListener(); myMouseListener = new MyMouseListener(); @@ -225,18 +229,21 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { myList.getActionMap().get("selectPreviousColumn").setEnabled(false); registerAction("handleSelection1", KeyEvent.VK_ENTER, 0, new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { handleSelect(true); } }); registerAction("handleSelection2", KeyEvent.VK_RIGHT, 0, new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { handleSelect(false); } }); registerAction("goBack2", KeyEvent.VK_LEFT, 0, new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { if (isClosableByLeftArrow()) { goBack(); @@ -258,10 +265,12 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { return getParent() != null || myStep instanceof ClosableByLeftArrow; } + @Override protected ActionMap getActionMap() { return myList.getActionMap(); } + @Override protected InputMap getInputMap() { return myList.getInputMap(); } @@ -270,10 +279,12 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { return new PopupListElementRenderer(this); } + @Override public ListPopupStep getListStep() { return (ListPopupStep) myStep; } + @Override public void dispose() { myList.removeMouseMotionListener(myMouseMotionListener); myList.removeMouseListener(myMouseListener); @@ -288,11 +299,13 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { return myList.getCellBounds(i, i); } + @Override public void disposeChildren() { setIndexForShowingChild(-1); super.disposeChildren(); } + @Override protected void onAutoSelectionTimer() { if (myList.getModel().getSize() > 0 && !myList.isSelectionEmpty() ) { handleSelect(false); @@ -303,10 +316,12 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { } } + @Override public void handleSelect(boolean handleFinalChoices) { _handleSelect(handleFinalChoices, null); } + @Override public void handleSelect(boolean handleFinalChoices, InputEvent e) { _handleSelect(handleFinalChoices, e); } @@ -397,6 +412,7 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { private class MyMouseMotionListener extends MouseMotionAdapter { private int myLastSelectedIndex = -2; + @Override public void mouseMoved(MouseEvent e) { Point point = e.getPoint(); int index = myList.locationToIndex(point); @@ -445,6 +461,7 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { return bounds != null && point.getX() > bounds.width + bounds.getX() - AllIcons.Icons.Ide.NextStep.getIconWidth(); } + @Override protected void process(KeyEvent aEvent) { myList.processKeyEvent(aEvent); } @@ -462,10 +479,12 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { super(myListModel); } + @Override public Dimension getPreferredScrollableViewportSize() { return new Dimension(super.getPreferredScrollableViewportSize().width, getPreferredSize().height); } + @Override public void processKeyEvent(KeyEvent e) { e.setSource(this); super.processKeyEvent(e); @@ -479,6 +498,7 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { super.processMouseEvent(e); } + @Override public Object getData(String dataId) { if (PlatformDataKeys.SELECTED_ITEM.is(dataId)){ return myList.getSelectedValue(); @@ -490,6 +510,7 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { } } + @Override protected void onSpeedSearchPatternChanged() { myListModel.refilter(); if (myListModel.getSize() > 0) { @@ -506,6 +527,7 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { } } + @Override protected void onSelectByMnemonic(Object value) { if (myListModel.isVisible(value)) { myList.setSelectedValue(value, true); @@ -514,20 +536,24 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { } } + @Override protected JComponent getPreferredFocusableComponent() { return myList; } + @Override protected void onChildSelectedFor(Object value) { if (myList.getSelectedValue() != value) { myList.setSelectedValue(value, false); } } + @Override public void setHandleAutoSelectionBeforeShow(final boolean autoHandle) { myAutoHandleBeforeShow = autoHandle; } + @Override public boolean isModalContext() { return true; } diff --git a/platform/platform-impl/src/com/intellij/ui/popup/tree/TreePopupImpl.java b/platform/platform-impl/src/com/intellij/ui/popup/tree/TreePopupImpl.java index 7bcf3575ca8c..59435cf89fcc 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/tree/TreePopupImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/tree/TreePopupImpl.java @@ -30,6 +30,7 @@ import com.intellij.ui.treeStructure.filtered.FilteringTreeBuilder; import com.intellij.ui.treeStructure.filtered.FilteringTreeStructure; import com.intellij.util.Range; import com.intellij.util.ui.tree.TreeUtil; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; @@ -54,15 +55,16 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { private TreePath myPendingChildPath; private FilteringTreeBuilder myBuilder; - public TreePopupImpl(JBPopup parent, TreePopupStep aStep, Object parentValue) { + public TreePopupImpl(JBPopup parent, @NotNull TreePopupStep aStep, Object parentValue) { super(parent, aStep); setParentValue(parentValue); } - public TreePopupImpl(TreePopupStep aStep) { + public TreePopupImpl(@NotNull TreePopupStep aStep) { this(null, aStep, null); } + @Override protected JComponent createContent() { myWizardTree = new MyTree(); myWizardTree.getAccessibleContext().setAccessibleName("WizardTree"); @@ -83,6 +85,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { } myWizardTree.addKeyListener(new KeyAdapter() { + @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_SPACE) { toggleExpansion(myWizardTree.getAnchorSelectionPath()); @@ -100,12 +103,14 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { myMouseListener = new MyMouseListener(); registerAction("select", KeyEvent.VK_ENTER, 0, new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { handleSelect(true, null); } }); registerAction("toggleExpansion", KeyEvent.VK_SPACE, 0, new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { toggleExpansion(myWizardTree.getSelectionPath()); } @@ -113,6 +118,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { final Action oldExpandAction = getActionMap().get("selectChild"); getActionMap().put("selectChild", new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { final TreePath path = myWizardTree.getSelectionPath(); if (path != null && 0 == myWizardTree.getModel().getChildCount(path.getLastPathComponent())) { @@ -125,6 +131,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { final Action oldCollapseAction = getActionMap().get("selectParent"); getActionMap().put("selectParent", new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { final TreePath path = myWizardTree.getSelectionPath(); if (shouldHidePopup(path)) { @@ -148,10 +155,12 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { return path.getPathCount() == 2; } + @Override protected ActionMap getActionMap() { return myWizardTree.getActionMap(); } + @Override protected InputMap getInputMap() { return myWizardTree.getInputMap(); } @@ -161,6 +170,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { myWizardTree.addMouseListener(myMouseListener); } + @Override public void dispose() { mySavedExpanded.clear(); final Enumeration expanded = myWizardTree.getExpandedDescendants(new TreePath(myWizardTree.getModel().getRoot())); @@ -176,6 +186,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { super.dispose(); } + @Override protected boolean beforeShow() { addListeners(); @@ -191,6 +202,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { return super.beforeShow(); } + @Override protected void afterShow() { selectFirstSelectableItem(); } @@ -237,6 +249,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { } private class MyMouseMotionListener extends MouseMotionAdapter { + @Override public void mouseMoved(MouseEvent e) { final TreePath path = getPath(e); if (path != null) { @@ -262,6 +275,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { private class MyMouseListener extends MouseAdapter { + @Override public void mousePressed(MouseEvent e) { final TreePath path = getPath(e); if (path == null) { @@ -284,6 +298,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { } } + @Override public void mouseReleased(MouseEvent e) { } @@ -346,6 +361,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { private class MyRenderer extends SimpleNodeRenderer { + @Override public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { final boolean shouldPaintSelected = (getTreeStep().isSelectable(value, extractUserObject(value)) && selected) || (getTreeStep().isSelectable(value, extractUserObject(value)) && hasFocus); final boolean shouldPaintFocus = @@ -360,6 +376,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { return box != null && box.isWithin(mouseX); } + @Override protected void process(KeyEvent aEvent) { myWizardTree.processKeyEvent(aEvent); } @@ -373,6 +390,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { } private class MyTree extends SimpleTree { + @Override public void processKeyEvent(KeyEvent e) { e.setSource(this); super.processKeyEvent(e); @@ -384,6 +402,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { return new Dimension(pref.width + 10, pref.height); } + @Override protected void paintChildren(Graphics g) { super.paintChildren(g); @@ -412,18 +431,22 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { return getTreeStep().getProject(); } + @Override protected void onAutoSelectionTimer() { handleSelect(false, null); } + @Override protected JComponent getPreferredFocusableComponent() { return myWizardTree; } + @Override protected void onSpeedSearchPatternChanged() { myBuilder.refilter(); } + @Override protected void onChildSelectedFor(Object value) { TreePath path = (TreePath) value; if (myWizardTree.getSelectionPath() != path) { @@ -431,6 +454,7 @@ public class TreePopupImpl extends WizardPopup implements TreePopup { } } + @Override public boolean isModalContext() { return true; }