IJPL-164850 Do not unstub dynamic groups in Keymap

(cherry picked from commit 6f8eb094820a2f243f4a3489dbaa65877dff8a9a)

IJ-CR-147493

GitOrigin-RevId: 61714ff917e6cf26ba1f894e945be58da8fe6983
This commit is contained in:
Gregory.Shrago
2024-10-22 20:41:20 +04:00
committed by intellij-monorepo-bot
parent d5b6063609
commit 843c5961b2

View File

@@ -14,7 +14,6 @@ import com.intellij.idea.ActionsBundle;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.actionSystem.ex.QuickList;
import com.intellij.openapi.actionSystem.impl.ActionGroupStub;
import com.intellij.openapi.actionSystem.impl.ActionManagerImpl;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.PluginDescriptor;
@@ -169,7 +168,7 @@ public final class ActionsTreeUtil {
ActionManager actionManager = ActionManager.getInstance();
Group group = new Group(getMainMenuTitle(), IdeActions.GROUP_MAIN_MENU, AllIcons.Nodes.KeymapMainMenu);
ActionGroup mainMenuGroup = (ActionGroup)actionManager.getActionOrStub(IdeActions.GROUP_MAIN_MENU);
fillGroupIgnorePopupFlag(mainMenuGroup, group, filtered, actionManager);
fillGroupIgnorePopupFlag(mainMenuGroup, group, filtered);
return group;
}
@@ -209,9 +208,8 @@ public final class ActionsTreeUtil {
private static void fillGroupIgnorePopupFlag(ActionGroup actionGroup,
Group group,
Condition<? super AnAction> filtered,
ActionManager actionManager) {
AnAction[] mainMenuTopGroups = getActions(actionGroup, actionManager);
Condition<? super AnAction> filtered) {
AnAction[] mainMenuTopGroups = getActions(actionGroup);
for (AnAction action : mainMenuTopGroups) {
if (!(action instanceof ActionGroup)) continue;
Group subGroup = createGroup((ActionGroup)action, false, filtered);
@@ -278,7 +276,7 @@ public final class ActionsTreeUtil {
boolean normalizeSeparators) {
ActionManager actionManager = ActionManager.getInstance();
Group group = new Group(groupName, actionManager.getId(actionGroup), icon);
AnAction[] children = getActions(actionGroup, actionManager);
AnAction[] children = getActions(actionGroup);
for (AnAction action : children) {
if (action == null) {
LOG.error(groupName + " contains null actions");
@@ -340,7 +338,7 @@ public final class ActionsTreeUtil {
ActionManager actionManager = ActionManager.getInstance();
String groupId = actionManager.getId(actionGroup);
Group group = new Group(groupName, groupId, getTemplatePresentation(actionGroup).getIcon());
List<AnAction> children = new ArrayList<>(Arrays.asList(getActions(actionGroup, actionManager)));
List<AnAction> children = new ArrayList<>(Arrays.asList(getActions(actionGroup)));
for (ActionUrl actionUrl : actionUrls) {
Object component = actionUrl.getComponent();
@@ -766,31 +764,16 @@ public final class ActionsTreeUtil {
PluginException.logPluginError(LOG, actionGroup + " is not a group", null, group.getClass());
return AnAction.EMPTY_ARRAY;
}
return getActions((ActionGroup)group, actionManager);
return getActions((ActionGroup)group);
}
private static AnAction @NotNull [] getActions(@NotNull ActionGroup group, @NotNull ActionManager actionManager) {
private static AnAction @NotNull [] getActions(@NotNull ActionGroup group) {
try {
if (group instanceof ActionGroupStub stub) {
AnAction[] stubChildren = stub.getChildActionsOrStubs();
if (stubChildren.length > 0) return stubChildren;
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. " +
unstubbed.getClass().getName(), null, unstubbed.getClass());
return AnAction.EMPTY_ARRAY;
}
}
else if (group instanceof DefaultActionGroup g && ActionClassMetaData.isDefaultGetChildren(g)) {
if (group instanceof DefaultActionGroup g) {
return g.getChildActionsOrStubs();
}
else {
return group.getChildren(null);
return AnAction.EMPTY_ARRAY;
}
}
catch (Throwable e) {