diff --git a/PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/action/IntellijAzureActionManager.java b/PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/action/IntellijAzureActionManager.java index f15a377d648..1809c7dd3f7 100644 --- a/PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/action/IntellijAzureActionManager.java +++ b/PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/action/IntellijAzureActionManager.java @@ -235,7 +235,7 @@ public void update(@Nonnull AnActionEvent e) { private void addActions(List actions) { for (final Object raw : actions) { - doAddAction(raw); + doAddAction(raw, Constraints.LAST); } } @@ -261,41 +261,50 @@ public List getActions() { @Override public void addAction(Object raw) { this.group.addAction(raw); - this.doAddAction(raw); + doAddAction(raw, Constraints.LAST); } @Override public void prependAction(Object action) { - throw new NotImplementedException(); + this.group.prependAction(action); + doAddAction(action, Constraints.FIRST); } - public void doAddAction(Object raw) { + private void doAddAction(Object raw, Constraints constraints) { + AnAction anAction = getAction(raw); + if (anAction != null) { + this.add(anAction, constraints); + } + } + + private AnAction getAction(Object raw) { if (raw instanceof Action.Id) { raw = ((Action.Id) raw).getId(); } - if (raw instanceof String) { - final String actionId = (String) raw; + if (raw instanceof String actionId) { if (actionId.startsWith("-")) { final String title = actionId.replaceAll("-", "").trim(); if (StringUtils.isBlank(title)) { - this.addSeparator(); + return Separator.create(); } else { - this.addSeparator(title); + return Separator.create(title); } } else if (StringUtils.isNotBlank(actionId)) { final ActionManager am = ActionManager.getInstance(); final AnAction action = am.getAction(actionId); if (action instanceof com.intellij.openapi.actionSystem.ActionGroup) { - this.add(action); + return action; } else if (Objects.nonNull(action)) { - this.add(new com.intellij.openapi.actionSystem.AnActionWrapper(action)); + return new com.intellij.openapi.actionSystem.AnActionWrapper(action); } } } else if (raw instanceof Action) { - this.add(new AnActionWrapper<>((Action) raw)); + return new AnActionWrapper<>((Action) raw); } else if (raw instanceof ActionGroup) { - this.add(new ActionGroupWrapper((ActionGroup) raw)); + return new ActionGroupWrapper((ActionGroup) raw); } + + return null; } public void registerCustomShortcutSetForActions(JComponent component, @Nullable Disposable disposable) {