From 0bfe0331a9c4bd889be93075d17633a5814491b6 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 7 Sep 2016 12:36:20 +0200 Subject: [PATCH] instantiate actions outside of lock (IDEA-160763) --- .../actionSystem/impl/ActionManagerImpl.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java index e23260bfa1ad..a808aa537ad9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java @@ -482,20 +482,25 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab } private AnAction getActionImpl(String id, boolean canReturnStub) { + AnAction action; synchronized (myLock) { - AnAction action = myId2Action.get(id); - if (!canReturnStub && action instanceof ActionStub) { - action = convert((ActionStub)action); + action = myId2Action.get(id); + if (canReturnStub || !(action instanceof ActionStub)) { + return action; + } + } + AnAction converted = convertStub((ActionStub)action); + synchronized (myLock) { + action = myId2Action.get(id); + if (action instanceof ActionStub) { + action = replaceStub((ActionStub)action, converted); } return action; } } - /** - * Converts action's stub to normal action. - */ @NotNull - private AnAction convert(@NotNull ActionStub stub) { + private AnAction replaceStub(@NotNull ActionStub stub, AnAction anAction) { LOG.assertTrue(myAction2Id.containsKey(stub)); myAction2Id.remove(stub); @@ -505,7 +510,6 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab LOG.assertTrue(action != null); LOG.assertTrue(action.equals(stub)); - AnAction anAction = convertStub(stub); myAction2Id.put(anAction, stub.getId()); return addToMap(stub.getId(), anAction, stub.getPluginId(), stub.getProjectType());