Skip to content

Commit 820f387

Browse files
committed
Support Compound configuration
Closes #13
1 parent de42042 commit 820f387

File tree

4 files changed

+48
-10
lines changed

4 files changed

+48
-10
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
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.
44

5-
Plugin is compatible with all major IDEs based on IntelliJ Platform starting from version 2019.2:
5+
Plugin is compatible with all major IDEs based on IntelliJ Platform starting from version 2020.1:
66
* IntelliJ IDEA
77
* Android Studio
88
* PhpStorm
@@ -33,7 +33,7 @@ To use plugin after installation you should tweak IDE settings.
3333
![plugin_actions_in_keymap](https://cloud.githubusercontent.com/assets/741251/22664411/a3ece9da-ecc1-11e6-99f0-bc2b9766b5c1.png)
3434

3535
## Generate custom icons
36-
By default the plugin uses not user-friendly icons. Of course, you can always create an icon by yourself.
36+
By default, the plugin uses not user-friendly icons. Of course, you can always create an icon by yourself.
3737
But developers are lazy (_I know_). Plugin can help with generating custom icons.
3838

3939
Tools > Create Icon with text

resources/META-INF/plugin.xml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
<idea-plugin>
22
<id>org.turbanov.run.configuration.as.action</id>
33
<name>Run Configuration as Action</name>
4-
<version>1.4.5</version>
4+
<version>1.5</version>
55
<vendor email="turbanoff@gmail.com" url="https://github.com/turbanoff/RunConfigurationAsAction">Turbanov Andrey</vendor>
66

77
<description><![CDATA[
88
Register all run configuration as actions.<br>
99
Now you can assign shortcuts to run configurations!
10-
Also it allows to create button in toolbar to run specific configuration.<br>
10+
Also, it allows to create button in toolbar to run specific configuration.<br>
1111
]]></description>
1212

1313
<change-notes><![CDATA[
14+
<h3>1.5</h3>
15+
<ul>
16+
<li>Support Compound configuration</li>
17+
</ul>
1418
<h3>1.4.5</h3>
1519
<ul>
1620
<li>Fix macros expanding
@@ -60,7 +64,7 @@ Also it allows to create button in toolbar to run specific configuration.<br>
6064
]]>
6165
</change-notes>
6266

63-
<idea-version since-build="192"/>
67+
<idea-version since-build="201"/>
6468

6569
<depends>com.intellij.modules.platform</depends>
6670

src/org/turbanov/actions/Bootstrap.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.intellij.openapi.actionSystem.ActionManager;
1616
import com.intellij.openapi.actionSystem.AnAction;
1717
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
18+
import com.intellij.openapi.application.ApplicationInfo;
1819
import com.intellij.openapi.components.ProjectComponent;
1920
import com.intellij.openapi.diagnostic.Logger;
2021
import com.intellij.openapi.extensions.PluginId;
@@ -47,9 +48,11 @@ public class Bootstrap implements ProjectComponent {
4748

4849
private final Project myProject;
4950
private final Set<String> registeredActions = ConcurrentHashMap.newKeySet();
51+
private final int baselineVersion;
5052

5153
public Bootstrap(@NotNull Project project) {
5254
this.myProject = project;
55+
this.baselineVersion = ApplicationInfo.getInstance().getBuild().getBaselineVersion();
5356
}
5457

5558
private void registerAction(@NotNull RunnerAndConfigurationSettings runConfig,
@@ -65,7 +68,7 @@ private void registerAction(@NotNull RunnerAndConfigurationSettings runConfig,
6568
if (icon == null) {
6669
icon = makeIcon(runConfig, executor);
6770
}
68-
action = new RunConfigurationAsAction(runConfig.getName(), executor.getId(), icon, text, executionTargetId);
71+
action = new RunConfigurationAsAction(runConfig.getName(), executor.getId(), icon, text, executionTargetId, baselineVersion);
6972
actionManager.registerAction(actionId, action, PLUGIN_ID);
7073
registeredActions.add(actionId);
7174
} else if (action instanceof RunConfigurationAsAction) {

src/org/turbanov/actions/RunConfigurationAsAction.java

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,23 @@
44

55
import org.jetbrains.annotations.NotNull;
66
import org.jetbrains.annotations.Nullable;
7+
import com.intellij.execution.ExecutionManager;
78
import com.intellij.execution.ExecutionTarget;
89
import com.intellij.execution.ExecutionTargetManager;
910
import com.intellij.execution.Executor;
1011
import com.intellij.execution.ExecutorRegistry;
12+
import com.intellij.execution.ExecutorRegistryImpl;
1113
import com.intellij.execution.RunManagerEx;
1214
import com.intellij.execution.RunnerAndConfigurationSettings;
13-
import com.intellij.execution.runners.ExecutionUtil;
15+
import com.intellij.execution.compound.CompoundRunConfiguration;
16+
import com.intellij.execution.compound.SettingsAndEffectiveTarget;
17+
import com.intellij.execution.configurations.RunConfiguration;
18+
import com.intellij.execution.runners.ExecutionEnvironment;
19+
import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
1420
import com.intellij.ide.macro.MacroManager;
1521
import com.intellij.openapi.actionSystem.AnAction;
1622
import com.intellij.openapi.actionSystem.AnActionEvent;
23+
import com.intellij.openapi.actionSystem.DataContext;
1724
import com.intellij.openapi.diagnostic.Logger;
1825
import com.intellij.openapi.project.Project;
1926

@@ -31,13 +38,15 @@ public class RunConfigurationAsAction extends AnAction {
3138
private final String runConfigurationName;
3239
private final String executorId;
3340
private final String executionTargetId;
41+
private final int baselineVersion;
3442
private final AtomicInteger counter = new AtomicInteger(1);
3543

36-
public RunConfigurationAsAction(@NotNull String runConfigurationName, @NotNull String executorId, @Nullable Icon icon, @NotNull String text, @Nullable String executionTargetId) {
44+
public RunConfigurationAsAction(@NotNull String runConfigurationName, @NotNull String executorId, @Nullable Icon icon, @NotNull String text, @Nullable String executionTargetId, int baselineVersion) {
3745
super(text, null, icon);
3846
this.runConfigurationName = runConfigurationName;
3947
this.executorId = executorId;
4048
this.executionTargetId = executionTargetId;
49+
this.baselineVersion = baselineVersion;
4150
}
4251

4352
@Override
@@ -60,8 +69,30 @@ public void actionPerformed(@NotNull AnActionEvent e) {
6069
}
6170

6271
ExecutionTarget target = getExecutionTarget(project, runConfig);
63-
MacroManager.getInstance().cacheMacrosPreview(e.getDataContext());
64-
ExecutionUtil.doRunConfiguration(runConfig, executor, target, null, e.getDataContext());
72+
73+
if (baselineVersion < 232) { //not needed for 2023.2+
74+
https://github.com/JetBrains/intellij-community/commit/76170089e6b2521942ddf54b53606d5fd4956b33
75+
MacroManager.getInstance().cacheMacrosPreview(e.getDataContext());
76+
}
77+
78+
// Copy of 'com.intellij.execution.ExecutorRegistryImpl.RunnerHelper.runSubProcess'
79+
RunConfiguration configuration = runConfig.getConfiguration();
80+
DataContext dataContext = e.getDataContext();
81+
82+
if (configuration instanceof CompoundRunConfiguration) {
83+
for (SettingsAndEffectiveTarget settingsAndEffectiveTarget : ((CompoundRunConfiguration) configuration)
84+
.getConfigurationsWithEffectiveRunTargets()) {
85+
RunConfiguration subConfiguration = settingsAndEffectiveTarget.getConfiguration();
86+
ExecutorRegistryImpl.RunnerHelper.run(project, subConfiguration, runManager.findSettings(subConfiguration), dataContext, executor);
87+
}
88+
} else {
89+
ExecutionEnvironmentBuilder builder = ExecutionEnvironmentBuilder.createOrNull(executor, runConfig);
90+
if (builder == null) {
91+
return;
92+
}
93+
ExecutionEnvironment environment = builder.target(target).dataContext(dataContext).build();
94+
ExecutionManager.getInstance(project).restartRunProfile(environment);
95+
}
6596
}
6697

6798
@NotNull

0 commit comments

Comments
 (0)