mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-147759 Allow to launch debug mode with Compound Run Configuration
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
package com.intellij.execution;
|
||||
|
||||
import com.intellij.execution.actions.RunContextAction;
|
||||
import com.intellij.execution.compound.CompoundRunConfiguration;
|
||||
import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.execution.executors.DefaultRunExecutor;
|
||||
import com.intellij.execution.impl.ExecutionManagerImpl;
|
||||
@@ -38,6 +39,7 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.THashSet;
|
||||
import kotlin.Pair;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -197,6 +199,27 @@ public class ExecutorRegistryImpl extends ExecutorRegistry implements Disposable
|
||||
myExecutor = executor;
|
||||
}
|
||||
|
||||
private boolean canRun(@NotNull Project project, @NotNull List<Pair<RunnerAndConfigurationSettings, ExecutionTarget>> pairs) {
|
||||
if (pairs.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
for (Pair<RunnerAndConfigurationSettings, ExecutionTarget> pair : pairs) {
|
||||
RunnerAndConfigurationSettings runnerAndConfigurationSettings = pair.getFirst();
|
||||
RunConfiguration configuration = runnerAndConfigurationSettings.getConfiguration();
|
||||
if (configuration instanceof CompoundRunConfiguration) {
|
||||
if (!canRun(project, ((CompoundRunConfiguration)configuration).getConfigurationsWithEffectiveRunTargets())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
final ProgramRunner runner = RunnerRegistry.getInstance().getRunner(myExecutor.getId(), configuration);
|
||||
if (!ExecutionTargetManager.canRun(runnerAndConfigurationSettings, pair.getSecond())
|
||||
&& runner != null && !isStarting(project, myExecutor.getId(), runner.getRunnerId())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(final AnActionEvent e) {
|
||||
final Presentation presentation = e.getPresentation();
|
||||
@@ -217,12 +240,12 @@ public class ExecutorRegistryImpl extends ExecutorRegistry implements Disposable
|
||||
}
|
||||
|
||||
presentation.setIcon(getInformativeIcon(project, selectedConfiguration));
|
||||
final ProgramRunner runner = RunnerRegistry.getInstance().getRunner(myExecutor.getId(), selectedConfiguration.getConfiguration());
|
||||
|
||||
ExecutionTarget target = ExecutionTargetManager.getActiveTarget(project);
|
||||
enabled = ExecutionTargetManager.canRun(selectedConfiguration, target)
|
||||
&& runner != null && !isStarting(project, myExecutor.getId(), runner.getRunnerId());
|
||||
|
||||
RunConfiguration configuration = selectedConfiguration.getConfiguration();
|
||||
if (configuration instanceof CompoundRunConfiguration) {
|
||||
enabled = canRun(project, ((CompoundRunConfiguration)configuration).getConfigurationsWithEffectiveRunTargets());
|
||||
} else {
|
||||
enabled = canRun(project, Collections.singletonList(new Pair<>(selectedConfiguration, ExecutionTargetManager.getActiveTarget(project))));
|
||||
}
|
||||
if (enabled) {
|
||||
presentation.setDescription(myExecutor.getDescription());
|
||||
}
|
||||
@@ -276,6 +299,23 @@ public class ExecutorRegistryImpl extends ExecutorRegistry implements Disposable
|
||||
return RunManager.getInstance(project).getSelectedConfiguration();
|
||||
}
|
||||
|
||||
private void run(@NotNull Project project, @Nullable RunnerAndConfigurationSettings configuration, @NotNull DataContext dataContext) {
|
||||
if (configuration != null && configuration.getConfiguration() instanceof CompoundRunConfiguration) {
|
||||
List<Pair<RunnerAndConfigurationSettings, ExecutionTarget>> pairs =
|
||||
((CompoundRunConfiguration)configuration.getConfiguration()).getConfigurationsWithEffectiveRunTargets();
|
||||
for (Pair<RunnerAndConfigurationSettings, ExecutionTarget> pair : pairs) {
|
||||
run(project, pair.getFirst(), dataContext);
|
||||
}
|
||||
} else {
|
||||
ExecutionEnvironmentBuilder builder =
|
||||
configuration == null ? null : ExecutionEnvironmentBuilder.createOrNull(myExecutor, configuration);
|
||||
if (builder == null) {
|
||||
return;
|
||||
}
|
||||
ExecutionManager.getInstance(project).restartRunProfile(builder.activeTarget().dataContext(dataContext).build());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(final AnActionEvent e) {
|
||||
final Project project = e.getProject();
|
||||
@@ -283,12 +323,7 @@ public class ExecutorRegistryImpl extends ExecutorRegistry implements Disposable
|
||||
return;
|
||||
}
|
||||
|
||||
RunnerAndConfigurationSettings configuration = getSelectedConfiguration(project);
|
||||
ExecutionEnvironmentBuilder builder = configuration == null ? null : ExecutionEnvironmentBuilder.createOrNull(myExecutor, configuration);
|
||||
if (builder == null) {
|
||||
return;
|
||||
}
|
||||
ExecutionManager.getInstance(project).restartRunProfile(builder.activeTarget().dataContext(e.getDataContext()).build());
|
||||
run(project, getSelectedConfiguration(project), e.getDataContext());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user