From 1d5bcdfb91c308a4f84d98abb71d37c98e6da3e3 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 11 Jul 2019 14:49:46 +0200 Subject: [PATCH] IdeEventQueue and IdeKeyEventDispatcher should not access KeymapManager if app is not yet loaded GitOrigin-RevId: 72be9de8487ffe0eb703c2ad35609a52492db80a --- .../src/com/intellij/ide/IdeEventQueue.java | 9 ++++++++- .../openapi/keymap/impl/IdeKeyEventDispatcher.java | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java index c9d8b53df774..0a505282cf14 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java +++ b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java @@ -13,6 +13,7 @@ import com.intellij.openapi.actionSystem.KeyboardShortcut; import com.intellij.openapi.actionSystem.Shortcut; import com.intellij.openapi.actionSystem.impl.ActionManagerImpl; import com.intellij.openapi.application.*; +import com.intellij.openapi.application.ex.ApplicationEx; import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.application.impl.LaterInvocator; import com.intellij.openapi.components.ServiceManager; @@ -1471,9 +1472,15 @@ public final class IdeEventQueue extends EventQueue { private final List actionsShowingPopupsList = new ArrayList<>(); private long lastTypeaheadTimestamp = -1; + @Nullable + public static KeymapManager getKeymapManager() { + ApplicationEx app = ApplicationManagerEx.getApplicationEx(); + return app != null && app.isLoaded() ? KeymapManager.getInstance() : null; + } + @NotNull private Set getShortcutsShowingPopups () { - KeymapManager keymapManager = KeymapManager.getInstance(); + KeymapManager keymapManager = getKeymapManager(); if (keymapManager != null) { Keymap keymap = keymapManager.getActiveKeymap(); if (!keymap.equals(lastActiveKeymap.get())) { diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java index d8e21fe0823b..452f7e60648a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java @@ -712,7 +712,7 @@ public final class IdeKeyEventDispatcher implements Disposable { } // search in main keymap - KeymapManager keymapManager = KeymapManager.getInstance(); + KeymapManager keymapManager = IdeEventQueue.getKeymapManager(); Keymap keymap = keymapManager == null ? null : keymapManager.getActiveKeymap(); String[] actionIds = keymap == null ? ArrayUtilRt.EMPTY_STRING_ARRAY : keymap.getActionIds(sc); ActionManager actionManager = ActionManager.getInstance(); @@ -932,7 +932,7 @@ public final class IdeKeyEventDispatcher implements Disposable { return false; } - KeymapManager manager = KeymapManager.getInstance(); + KeymapManager manager = IdeEventQueue.getKeymapManager(); if (manager == null) { return false; }