From 71a9de3dd3ff7e6dea8fcce9c2a7972866676a01 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Wed, 10 Apr 2024 23:29:33 +0400 Subject: [PATCH] avoid action instantiation if possible and log it 6 Restore the previous stub-based logic since `ActionsTreeUtil.getTemplatePresentation` is used everywhere and can unstub an action if needed. IJPL-936 T: LoadingState.logStateError from ActionManagerImplKt.instantiate EA-1008831 - T: LoadingState.logStateError GitOrigin-RevId: 9b499397bd3152d6e6baaebc5fced308dfd83bf5 --- .../keymap/impl/ui/ActionsTreeUtil.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTreeUtil.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTreeUtil.java index bc100744a469..a67a8ab3ed7f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTreeUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTreeUtil.java @@ -92,7 +92,7 @@ public final class ActionsTreeUtil { return Objects.requireNonNullElse(getTemplatePresentation(stub.getId(), null), presentation); } else { - return action.getTemplatePresentation(); + return presentation; } } @@ -224,8 +224,10 @@ public final class ActionsTreeUtil { } public static Group createGroup(ActionGroup actionGroup, boolean forceAsPopup, Condition filtered) { - String groupName = getName(actionGroup); - return createGroup(actionGroup, groupName, getTemplatePresentation(actionGroup).getIconSupplier(), forceAsPopup, filtered, true); + Presentation presentation = getTemplatePresentation(actionGroup); + String text = presentation.getText(); + String groupName = StringUtil.isNotEmpty(text) ? text : getName(actionGroup); + return createGroup(actionGroup, groupName, presentation.getIconSupplier(), forceAsPopup, filtered, true); } public static @NlsActions.ActionText String getName(@NotNull AnAction action) { @@ -766,21 +768,24 @@ public final class ActionsTreeUtil { private static AnAction @NotNull [] getActions(@NotNull ActionGroup group, @NotNull ActionManager actionManager) { try { - if (group instanceof ActionGroupStub) { - AnAction[] stubChildren = ((DefaultActionGroup)group).getChildActionsOrStubs(); + if (group instanceof ActionGroupStub stub) { + AnAction[] stubChildren = stub.getChildActionsOrStubs(); if (stubChildren.length > 0) return stubChildren; - String actionId = ((ActionGroupStub)group).getId(); - AnAction action = actionManager.getAction(actionId); - if (action instanceof ActionGroup) { - LOG.info("No children in '" + actionId + "' stub. Creating its instance"); - return group.getChildren(null); + String actionId = stub.getId(); + LOG.info("No children in '" + actionId + "' stub. Creating its instance"); + AnAction unstubbed = actionManager.getAction(actionId); + if (unstubbed instanceof ActionGroup g && !(unstubbed instanceof ActionGroupStub)) { + return getActions(g, actionManager); } else { PluginException.logPluginError(LOG, "'" + actionId + "' is not an action group. " + - action.getClass().getName(), null, action.getClass()); + unstubbed.getClass().getName(), null, unstubbed.getClass()); return AnAction.EMPTY_ARRAY; } } + else if (group instanceof DefaultActionGroup g && ActionClassMetaData.isDefaultGetChildren(g)) { + return g.getChildActionsOrStubs(); + } else { return group.getChildren(null); }