Skip to content

Commit

Permalink
Support Compound configuration
Browse files Browse the repository at this point in the history
Closes #13
  • Loading branch information
turbanoff committed May 23, 2023
1 parent de42042 commit 820f387
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 10 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
10 changes: 7 additions & 3 deletions resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
<idea-plugin>
<id>org.turbanov.run.configuration.as.action</id>
<name>Run Configuration as Action</name>
<version>1.4.5</version>
<version>1.5</version>
<vendor email="[email protected]" url="https://github.com/turbanoff/RunConfigurationAsAction">Turbanov Andrey</vendor>

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

<change-notes><![CDATA[
<h3>1.5</h3>
<ul>
<li>Support Compound configuration</li>
</ul>
<h3>1.4.5</h3>
<ul>
<li>Fix macros expanding
Expand Down Expand Up @@ -60,7 +64,7 @@ Also it allows to create button in toolbar to run specific configuration.<br>
]]>
</change-notes>

<idea-version since-build="192"/>
<idea-version since-build="201"/>

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

Expand Down
5 changes: 4 additions & 1 deletion src/org/turbanov/actions/Bootstrap.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -47,9 +48,11 @@ public class Bootstrap implements ProjectComponent {

private final Project myProject;
private final Set<String> 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,
Expand All @@ -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) {
Expand Down
39 changes: 35 additions & 4 deletions src/org/turbanov/actions/RunConfigurationAsAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 820f387

Please sign in to comment.