From ec6937be0bf7bab936585f4ad54efe8813ed5155 Mon Sep 17 00:00:00 2001 From: Leonid Mashinskiy Date: Thu, 10 Oct 2019 19:38:15 +0300 Subject: [PATCH] Fix runner in execution environment after configuration editing on execution attempt. Some configuration types can support more than single debug runner type and after editing properties of such configuration selected runner should be recalculated and environment needs to be updated. GitOrigin-RevId: d9235093f8e71305efeb43832f53bfaab959009b --- .../com/intellij/execution/ProgramRunnerUtil.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java index 4e4d8b780a87..ed561f85d9ca 100644 --- a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java +++ b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java @@ -32,7 +32,7 @@ public class ProgramRunnerUtil { private ProgramRunnerUtil() { } @Nullable - public static ProgramRunner getRunner(@NotNull String executorId, @Nullable RunnerAndConfigurationSettings configuration) { + public static ProgramRunner getRunner(@NotNull String executorId, @Nullable RunnerAndConfigurationSettings configuration) { return configuration == null ? null : ProgramRunner.getRunner(executorId, configuration.getConfiguration()); } @@ -55,6 +55,8 @@ public class ProgramRunnerUtil { RunnerAndConfigurationSettings runnerAndConfigurationSettings = environment.getRunnerAndConfigurationSettings(); final Project project = environment.getProject(); + ProgramRunner runner = environment.getRunner(); + if (runnerAndConfigurationSettings != null) { if (!ExecutionTargetManager.canRun(environment)) { ExecutionUtil.handleExecutionError(environment, new ExecutionException( @@ -79,9 +81,18 @@ public class ProgramRunnerUtil { } } } + + // corresponding runner can be changed after configuration edit + runner = getRunner(environment.getExecutor().getId(), runnerAndConfigurationSettings); } try { + if (runner == null) { + throw new ExecutionException("Cannot find runner for " + environment.getRunProfile().getName()); + } + if (!runner.equals(environment.getRunner())) { + environment = new ExecutionEnvironmentBuilder(environment).runner(runner).build(); + } if (assignNewId) { environment.assignNewExecutionId(); }