IDEA-202659 Impossible to start the Debug session for the Tomcat config with Ant/Bash configs in the Before launch

This commit is contained in:
Vassiliy.Kudryashov
2019-04-15 22:40:03 +03:00
parent 789b3133ca
commit b449f398bc
5 changed files with 43 additions and 6 deletions
@@ -164,7 +164,10 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
public static boolean doExecuteTask(@NotNull final ExecutionEnvironment env,
@NotNull final RunnerAndConfigurationSettings settings,
@Nullable final ExecutionTarget target) {
final Executor executor = env.getExecutor();
// Here we fallback to default executor when the main one is not applicable for the task (for example 'debug')
final Executor executor = RunManagerImpl.canRunConfiguration(settings, env.getExecutor())
? env.getExecutor()
: DefaultRunExecutor.getRunExecutorInstance();
final String executorId = executor.getId();
ExecutionEnvironmentBuilder builder = ExecutionEnvironmentBuilder.createOrNull(executor, settings);
if (builder == null) {
@@ -11,8 +11,8 @@ import com.intellij.execution.ExecutorRegistry
import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.configuration.PersistentAwareRunConfiguration
import com.intellij.execution.configurations.*
import com.intellij.execution.executors.DefaultRunExecutor
import com.intellij.execution.runners.ProgramRunner
import com.intellij.ide.plugins.PluginManagerCore
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.PathMacroManager
import com.intellij.openapi.components.PersistentStateComponent
@@ -318,12 +318,20 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(val manager:
val runners = THashSet<ProgramRunner<*>>()
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
@@ -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<AntBuildMessageView> 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;
}
@@ -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
@@ -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();