diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java index b98d630fce76..4534495aca08 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java @@ -30,6 +30,7 @@ import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.keymap.Keymap; import com.intellij.openapi.keymap.KeymapManager; +import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; @@ -476,14 +477,13 @@ public class OverrideImplementUtil extends OverrideImplementExploreUtil { final boolean toImplement, @NotNull MemberChooser chooser) { final JComponent preferredFocusedComponent = chooser.getPreferredFocusedComponent(); - final Keymap keymap = KeymapManager.getInstance().getActiveKeymap(); @NonNls final String s = toImplement ? "OverrideMethods" : "ImplementMethods"; - final Shortcut[] shortcuts = keymap.getShortcuts(s); + final Shortcut shortcut = KeymapUtil.getPrimaryShortcut(s); - if (shortcuts.length > 0 && shortcuts[0] instanceof KeyboardShortcut) { + if (shortcut instanceof KeyboardShortcut) { preferredFocusedComponent.getInputMap().put( - ((KeyboardShortcut)shortcuts[0]).getFirstKeyStroke(), s + ((KeyboardShortcut)shortcut).getFirstKeyStroke(), s ); preferredFocusedComponent.getActionMap().put( diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java index 1c973e57b7aa..c8b476f9a9ac 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java @@ -396,17 +396,16 @@ public class JavaVariableInplaceIntroducer extends AbstractJavaInplaceIntroducer final PsiType type, final boolean hasTypeSuggestion) { final VariablesProcessor processor = ReassignVariableUtil.findVariablesOfType(declaration, type); - final Keymap keymap = KeymapManager.getInstance().getActiveKeymap(); if (processor.size() > 0) { - final Shortcut[] shortcuts = keymap.getShortcuts("IntroduceVariable"); - if (shortcuts.length > 0) { - return "Press " + KeymapUtil.getShortcutText(shortcuts[0]) + " to reassign existing variable"; + final Shortcut shortcut = KeymapUtil.getPrimaryShortcut("IntroduceVariable"); + if (shortcut != null) { + return "Press " + KeymapUtil.getShortcutText(shortcut) + " to reassign existing variable"; } } if (hasTypeSuggestion) { - final Shortcut[] shortcuts = keymap.getShortcuts("PreviousTemplateVariable"); - if (shortcuts.length > 0) { - return "Press " + KeymapUtil.getShortcutText(shortcuts[0]) + " to change type"; + final Shortcut shortcut = KeymapUtil.getPrimaryShortcut("PreviousTemplateVariable"); + if (shortcut != null) { + return "Press " + KeymapUtil.getShortcutText(shortcut) + " to change type"; } } return null; diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalSystemShortcutsManager.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalSystemShortcutsManager.java index d39944482bc8..790c58ace6e9 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalSystemShortcutsManager.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalSystemShortcutsManager.java @@ -76,8 +76,7 @@ public class ExternalSystemShortcutsManager implements Disposable { } public boolean hasShortcuts(@NotNull String actionId) { - Keymap activeKeymap = KeymapManager.getInstance().getActiveKeymap(); - return activeKeymap.getShortcuts(actionId).length > 0; + return KeymapUtil.getPrimaryShortcut(actionId) != null; } private Shortcut @NotNull [] getShortcuts(@Nullable String projectPath, @Nullable String taskName) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonEditorPopup.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonEditorPopup.java index 7ad8d0137072..21a58cdd3cb6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonEditorPopup.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonEditorPopup.java @@ -46,9 +46,8 @@ public class DaemonEditorPopup extends PopupHandler { ActionManager actionManager = ActionManager.getInstance(); DefaultActionGroup actionGroup = new DefaultActionGroup(); - Keymap keymap = KeymapManager.getInstance().getActiveKeymap(); - Shortcut[] shortcuts = keymap.getShortcuts("GotoNextError"); - String shortcutText = shortcuts.length > 0 ? " (" + KeymapUtil.getShortcutText(shortcuts[0]) + ")" : ""; + Shortcut shortcut = KeymapUtil.getPrimaryShortcut("GotoNextError"); + String shortcutText = shortcut != null ? " (" + KeymapUtil.getShortcutText(shortcut) + ")" : ""; DefaultActionGroup gotoGroup = new DefaultActionGroup("'Next Error' Action" + shortcutText + " Goes Through", true); gotoGroup.add(new ToggleAction(EditorBundle.message("errors.panel.go.to.errors.first.radio")) { @Override diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java index 5f5947de5224..925f400f4221 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java @@ -614,10 +614,9 @@ public abstract class InplaceRefactoring { } protected void showDialogAdvertisement(final String actionId) { - final Keymap keymap = KeymapManager.getInstance().getActiveKeymap(); - final Shortcut[] shortcuts = keymap.getShortcuts(actionId); - if (shortcuts.length > 0) { - setAdvertisementText("Press " + KeymapUtil.getShortcutText(shortcuts[0]) + " to show dialog with more options"); + final Shortcut shortcut = KeymapUtil.getPrimaryShortcut(actionId); + if (shortcut != null) { + setAdvertisementText("Press " + KeymapUtil.getShortcutText(shortcut) + " to show dialog with more options"); } } diff --git a/platform/lang-impl/src/com/intellij/testIntegration/GotoTestOrCodeHandler.java b/platform/lang-impl/src/com/intellij/testIntegration/GotoTestOrCodeHandler.java index 111fb48ebef6..4b9c9b5ab0d4 100644 --- a/platform/lang-impl/src/com/intellij/testIntegration/GotoTestOrCodeHandler.java +++ b/platform/lang-impl/src/com/intellij/testIntegration/GotoTestOrCodeHandler.java @@ -132,10 +132,9 @@ public class GotoTestOrCodeHandler extends GotoTargetHandler { @Override protected String getAdText(PsiElement source, int length) { if (length > 0 && !TestFinderHelper.isTest(source)) { - final Keymap keymap = KeymapManager.getInstance().getActiveKeymap(); - final Shortcut[] shortcuts = keymap.getShortcuts(DefaultRunExecutor.getRunExecutorInstance().getContextActionId()); - if (shortcuts.length > 0) { - return ("Press " + KeymapUtil.getShortcutText(shortcuts[0]) + " to run selected tests"); + final Shortcut shortcut = KeymapUtil.getPrimaryShortcut(DefaultRunExecutor.getRunExecutorInstance().getContextActionId()); + if (shortcut != null) { + return ("Press " + KeymapUtil.getShortcutText(shortcut) + " to run selected tests"); } } return null; diff --git a/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java b/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java index d6d65c9b72f8..29a30113907f 100644 --- a/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java @@ -203,6 +203,17 @@ public class KeymapUtil { return new CustomShortcutSet(keymapManager.getActiveKeymap().getShortcuts(actionId)); } + /** + * @param actionId action to find the shortcut for + * @return first keyboard shortcut that activates given action in active keymap; null if not found + */ + @Nullable + public static Shortcut getPrimaryShortcut(@Nullable String actionId) { + KeymapManager keymapManager = KeymapManager.getInstance(); + if (keymapManager == null || actionId == null) return null; + return ArrayUtil.getFirstElement(keymapManager.getActiveKeymap().getShortcuts(actionId)); + } + @NotNull public static String getFirstKeyboardShortcutText(@NotNull String actionId) { for (Shortcut shortcut : getActiveKeymapShortcuts(actionId).getShortcuts()) { diff --git a/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntTargetNodeDescriptor.java b/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntTargetNodeDescriptor.java index ea2fe8f7495c..3966e7b77c74 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntTargetNodeDescriptor.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntTargetNodeDescriptor.java @@ -110,10 +110,9 @@ final class AntTargetNodeDescriptor extends AntNodeDescriptor { } public static boolean addShortcutText(String actionId, CompositeAppearance appearance) { - Keymap activeKeymap = KeymapManager.getInstance().getActiveKeymap(); - Shortcut[] shortcuts = activeKeymap.getShortcuts(actionId); - if (shortcuts != null && shortcuts.length > 0) { - appearance.getEnding().addText(" (" + KeymapUtil.getShortcutText(shortcuts[0]) + ")", SimpleTextAttributes.GRAY_ATTRIBUTES); + Shortcut shortcut = KeymapUtil.getPrimaryShortcut(actionId); + if (shortcut != null) { + appearance.getEnding().addText(" (" + KeymapUtil.getShortcutText(shortcut) + ")", SimpleTextAttributes.GRAY_ATTRIBUTES); return true; } else return false; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/variable/GrInplaceVariableIntroducer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/variable/GrInplaceVariableIntroducer.java index 2bdb3207087b..de9f12d229b2 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/variable/GrInplaceVariableIntroducer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/variable/GrInplaceVariableIntroducer.java @@ -61,10 +61,9 @@ public abstract class GrInplaceVariableIntroducer extends GrAbstractInplaceIntro @Nullable private static String getAdvertisementText() { - final Keymap keymap = KeymapManager.getInstance().getActiveKeymap(); - final Shortcut[] shortcuts = keymap.getShortcuts("PreviousTemplateVariable"); - if (shortcuts.length > 0) { - return "Press " + KeymapUtil.getShortcutText(shortcuts[0]) + " to change type"; + final Shortcut shortcut = KeymapUtil.getPrimaryShortcut("PreviousTemplateVariable"); + if (shortcut != null) { + return "Press " + KeymapUtil.getShortcutText(shortcut) + " to change type"; } return null; } diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.kt b/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.kt index 09ddc68b2d0a..417db394e909 100644 --- a/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.kt +++ b/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.kt @@ -99,14 +99,13 @@ internal class BaseOpenInBrowserAction(private val browser: WebBrowser) : DumbAw var description = templatePresentation.text if (ActionPlaces.CONTEXT_TOOLBAR == e.place) { val shortcutInfo = buildString { - val shortcuts = KeymapManager.getInstance().activeKeymap.getShortcuts("WebOpenInAction") - val exists = shortcuts.isNotEmpty() - if (exists) { - append(KeymapUtil.getShortcutText(shortcuts[0])) + val shortcut = KeymapUtil.getPrimaryShortcut("WebOpenInAction") + if (shortcut != null) { + append(KeymapUtil.getShortcutText(shortcut)) } if (HtmlUtil.isHtmlFile(result.file)) { - append(if (exists) ", " else "") + append(if (shortcut != null) ", " else "") append("hold Shift to open URL of local file") } }