From 820f387b76dbd3d3ebe0d5bb9336f4a7861a289e Mon Sep 17 00:00:00 2001 From: Andrey Turbanov Date: Tue, 23 May 2023 23:41:19 +0300 Subject: [PATCH] Support Compound configuration Closes #13 --- README.md | 4 +- resources/META-INF/plugin.xml | 10 +++-- src/org/turbanov/actions/Bootstrap.java | 5 ++- .../actions/RunConfigurationAsAction.java | 39 +++++++++++++++++-- 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 7b14e84..90dd221 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Plugins for Jetbrains IDEs. It's provides a way to use run configurations as buttons on toolbar. Or assign shortcuts to execute specific run configuration. -Plugin is compatible with all major IDEs based on IntelliJ Platform starting from version 2019.2: +Plugin is compatible with all major IDEs based on IntelliJ Platform starting from version 2020.1: * IntelliJ IDEA * Android Studio * PhpStorm @@ -33,7 +33,7 @@ To use plugin after installation you should tweak IDE settings. ![plugin_actions_in_keymap](https://cloud.githubusercontent.com/assets/741251/22664411/a3ece9da-ecc1-11e6-99f0-bc2b9766b5c1.png) ## Generate custom icons - By default the plugin uses not user-friendly icons. Of course, you can always create an icon by yourself. + By default, the plugin uses not user-friendly icons. Of course, you can always create an icon by yourself. But developers are lazy (_I know_). Plugin can help with generating custom icons. Tools > Create Icon with text diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index 095bc40..348f57d 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -1,16 +1,20 @@ org.turbanov.run.configuration.as.action Run Configuration as Action - 1.4.5 + 1.5 Turbanov Andrey Now you can assign shortcuts to run configurations! -Also it allows to create button in toolbar to run specific configuration.
+Also, it allows to create button in toolbar to run specific configuration.
]]>
1.5 +
    +
  • Support Compound configuration
  • +

1.4.5

  • Fix macros expanding @@ -60,7 +64,7 @@ Also it allows to create button in toolbar to run specific configuration.
    ]]> - + com.intellij.modules.platform diff --git a/src/org/turbanov/actions/Bootstrap.java b/src/org/turbanov/actions/Bootstrap.java index 026f107..a1a8552 100644 --- a/src/org/turbanov/actions/Bootstrap.java +++ b/src/org/turbanov/actions/Bootstrap.java @@ -15,6 +15,7 @@ import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.ex.ActionManagerEx; +import com.intellij.openapi.application.ApplicationInfo; import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.PluginId; @@ -47,9 +48,11 @@ public class Bootstrap implements ProjectComponent { private final Project myProject; private final Set registeredActions = ConcurrentHashMap.newKeySet(); + private final int baselineVersion; public Bootstrap(@NotNull Project project) { this.myProject = project; + this.baselineVersion = ApplicationInfo.getInstance().getBuild().getBaselineVersion(); } private void registerAction(@NotNull RunnerAndConfigurationSettings runConfig, @@ -65,7 +68,7 @@ private void registerAction(@NotNull RunnerAndConfigurationSettings runConfig, if (icon == null) { icon = makeIcon(runConfig, executor); } - action = new RunConfigurationAsAction(runConfig.getName(), executor.getId(), icon, text, executionTargetId); + action = new RunConfigurationAsAction(runConfig.getName(), executor.getId(), icon, text, executionTargetId, baselineVersion); actionManager.registerAction(actionId, action, PLUGIN_ID); registeredActions.add(actionId); } else if (action instanceof RunConfigurationAsAction) { diff --git a/src/org/turbanov/actions/RunConfigurationAsAction.java b/src/org/turbanov/actions/RunConfigurationAsAction.java index 5d5c49c..5ab5c4e 100644 --- a/src/org/turbanov/actions/RunConfigurationAsAction.java +++ b/src/org/turbanov/actions/RunConfigurationAsAction.java @@ -4,16 +4,23 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import com.intellij.execution.ExecutionManager; import com.intellij.execution.ExecutionTarget; import com.intellij.execution.ExecutionTargetManager; import com.intellij.execution.Executor; import com.intellij.execution.ExecutorRegistry; +import com.intellij.execution.ExecutorRegistryImpl; import com.intellij.execution.RunManagerEx; import com.intellij.execution.RunnerAndConfigurationSettings; -import com.intellij.execution.runners.ExecutionUtil; +import com.intellij.execution.compound.CompoundRunConfiguration; +import com.intellij.execution.compound.SettingsAndEffectiveTarget; +import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.runners.ExecutionEnvironmentBuilder; import com.intellij.ide.macro.MacroManager; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; @@ -31,13 +38,15 @@ public class RunConfigurationAsAction extends AnAction { private final String runConfigurationName; private final String executorId; private final String executionTargetId; + private final int baselineVersion; private final AtomicInteger counter = new AtomicInteger(1); - public RunConfigurationAsAction(@NotNull String runConfigurationName, @NotNull String executorId, @Nullable Icon icon, @NotNull String text, @Nullable String executionTargetId) { + public RunConfigurationAsAction(@NotNull String runConfigurationName, @NotNull String executorId, @Nullable Icon icon, @NotNull String text, @Nullable String executionTargetId, int baselineVersion) { super(text, null, icon); this.runConfigurationName = runConfigurationName; this.executorId = executorId; this.executionTargetId = executionTargetId; + this.baselineVersion = baselineVersion; } @Override @@ -60,8 +69,30 @@ public void actionPerformed(@NotNull AnActionEvent e) { } ExecutionTarget target = getExecutionTarget(project, runConfig); - MacroManager.getInstance().cacheMacrosPreview(e.getDataContext()); - ExecutionUtil.doRunConfiguration(runConfig, executor, target, null, e.getDataContext()); + + if (baselineVersion < 232) { //not needed for 2023.2+ + https://github.com/JetBrains/intellij-community/commit/76170089e6b2521942ddf54b53606d5fd4956b33 + MacroManager.getInstance().cacheMacrosPreview(e.getDataContext()); + } + + // Copy of 'com.intellij.execution.ExecutorRegistryImpl.RunnerHelper.runSubProcess' + RunConfiguration configuration = runConfig.getConfiguration(); + DataContext dataContext = e.getDataContext(); + + if (configuration instanceof CompoundRunConfiguration) { + for (SettingsAndEffectiveTarget settingsAndEffectiveTarget : ((CompoundRunConfiguration) configuration) + .getConfigurationsWithEffectiveRunTargets()) { + RunConfiguration subConfiguration = settingsAndEffectiveTarget.getConfiguration(); + ExecutorRegistryImpl.RunnerHelper.run(project, subConfiguration, runManager.findSettings(subConfiguration), dataContext, executor); + } + } else { + ExecutionEnvironmentBuilder builder = ExecutionEnvironmentBuilder.createOrNull(executor, runConfig); + if (builder == null) { + return; + } + ExecutionEnvironment environment = builder.target(target).dataContext(dataContext).build(); + ExecutionManager.getInstance(project).restartRunProfile(environment); + } } @NotNull