From b449f398bcddd9b22f5363f255c26fa2d50f3470 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Mon, 15 Apr 2019 22:39:20 +0300 Subject: [PATCH] IDEA-202659 Impossible to start the Debug session for the Tomcat config with Ant/Bash configs in the Before launch --- .../RunConfigurationBeforeRunProvider.java | 5 +++- .../RunnerAndConfigurationSettingsImpl.kt | 12 ++++++++-- .../config/execution/AntRunProfileState.java | 23 ++++++++++++++++++- .../lang/ant/config/execution/AntRunner.java | 8 +++++-- .../config/execution/ExecutionHandler.java | 1 + 5 files changed, 43 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java index 658091d33625..b8ecf465c0c8 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java @@ -164,7 +164,10 @@ extends BeforeRunTaskProvider>() runners.addAll(runnerSettings.settings.keys) runners.addAll(configurationPerRunnerSettings.settings.keys) + var runnerFound = false for (runner in runners) { if (executor == null || runner.canRun(executor.id, configuration)) { val runnerWarning = doCheck { configuration.checkRunnerSettings(runner, runnerSettings.settings[runner], configurationPerRunnerSettings.settings[runner]) } - if (warning == null && runnerWarning != null) warning = runnerWarning + if (runnerWarning != null) { + if (warning == null) warning = runnerWarning + } else { + runnerFound = true // there is at least one runner to run specified configuration + } } } + if (executor != null && executor != DefaultRunExecutor.getRunExecutorInstance() && !runnerFound) { + throw RuntimeConfigurationError(executor.id + ": there are no runners for " + configuration) + } if (executor != null) { val beforeRunWarning = doCheck { configuration.checkSettingsBeforeRun() } if (warning == null && beforeRunWarning != null) warning = beforeRunWarning diff --git a/plugins/ant/src/com/intellij/lang/ant/config/execution/AntRunProfileState.java b/plugins/ant/src/com/intellij/lang/ant/config/execution/AntRunProfileState.java index ba3389c315bf..a2b5b6a465a9 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/execution/AntRunProfileState.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/execution/AntRunProfileState.java @@ -23,11 +23,16 @@ import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; +import com.intellij.execution.ui.ExecutionConsole; import com.intellij.lang.ant.config.AntBuildListener; +import com.intellij.openapi.util.Key; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; + public class AntRunProfileState implements RunProfileState { + static final Key MESSAGE_VIEW = Key.create("ANT_MESSAGE_VIEW"); private final ExecutionEnvironment myEnvironment; public AntRunProfileState(ExecutionEnvironment environment) { @@ -47,7 +52,23 @@ public class AntRunProfileState implements RunProfileState { if (processHandler == null) { return null; } - return new DefaultExecutionResult(null, processHandler); + + return new DefaultExecutionResult(new ExecutionConsole() { + @Override + public JComponent getComponent() { + return processHandler.getUserData(MESSAGE_VIEW); + } + + @Override + public JComponent getPreferredFocusableComponent() { + return processHandler.getUserData(MESSAGE_VIEW); + } + + @Override + public void dispose() { + processHandler.putUserData(MESSAGE_VIEW, null); + } + }, processHandler); } return null; } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/execution/AntRunner.java b/plugins/ant/src/com/intellij/lang/ant/config/execution/AntRunner.java index d66e041f1f16..f990a215a647 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/execution/AntRunner.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/execution/AntRunner.java @@ -16,6 +16,7 @@ package com.intellij.lang.ant.config.execution; import com.intellij.execution.ExecutionException; +import com.intellij.execution.ExecutionResult; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.executors.DefaultRunExecutor; @@ -33,8 +34,11 @@ public class AntRunner extends GenericProgramRunner { @Override protected RunContentDescriptor doExecute(@NotNull RunProfileState state, @NotNull ExecutionEnvironment environment) throws ExecutionException { FileDocumentManager.getInstance().saveAllDocuments(); - state.execute(environment.getExecutor(), this); - return null; + ExecutionResult executionResult = state.execute(environment.getExecutor(), this); + if (executionResult == null) { + return null; + } + return new RunContentDescriptor(executionResult.getExecutionConsole(), executionResult.getProcessHandler(), executionResult.getExecutionConsole().getComponent(), environment.getRunProfile().getName()); } @NotNull diff --git a/plugins/ant/src/com/intellij/lang/ant/config/execution/ExecutionHandler.java b/plugins/ant/src/com/intellij/lang/ant/config/execution/ExecutionHandler.java index 246d37f8c83c..48a0714d1da9 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/execution/ExecutionHandler.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/execution/ExecutionHandler.java @@ -228,6 +228,7 @@ public final class ExecutionHandler { final OutputParser parser = OutputParser2.attachParser(project, handler, errorView, progress, buildFile); + handler.putUserData(AntRunProfileState.MESSAGE_VIEW, errorView); handler.addProcessListener(new ProcessAdapter() { private final StringBuilder myUnprocessedStdErr = new StringBuilder();