diff --git a/platform/lang-api/src/com/intellij/execution/runners/AsyncGenericProgramRunner.java b/platform/lang-api/src/com/intellij/execution/runners/AsyncGenericProgramRunner.java index 19e251a2096c..aeaaf58eda65 100644 --- a/platform/lang-api/src/com/intellij/execution/runners/AsyncGenericProgramRunner.java +++ b/platform/lang-api/src/com/intellij/execution/runners/AsyncGenericProgramRunner.java @@ -25,6 +25,8 @@ import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.AsyncResult; import com.intellij.util.Consumer; +import com.intellij.util.NullableConsumer; +import com.intellij.util.ObjectUtils; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -38,7 +40,7 @@ public abstract class AsyncGenericProgramRunner @Nullable final Callback callback, @NotNull final Project project, @NotNull final RunProfileState state) throws ExecutionException { - prepare(project, environment, state).doWhenProcessed(new Consumer() { + prepare(project, environment, state).doWhenDone(new Consumer() { @Override public void consume(@Nullable final RunProfileStarter result) { UIUtil.invokeLaterIfNeeded(new Runnable() { @@ -50,6 +52,16 @@ public abstract class AsyncGenericProgramRunner } }); } + }).doWhenRejected(new NullableConsumer() { + @Override + public void consume(@Nullable String errorMessage) { + if (project.isDisposed()) { + return; + } + + ExecutionUtil.handleExecutionError(project, environment.getExecutor().getToolWindowId(), environment.getRunProfile(), + new ExecutionException(ObjectUtils.chooseNotNull(errorMessage, "Internal error"))); + } }); }