summaryrefslogtreecommitdiff
path: root/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java')
-rw-r--r--platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java74
1 files changed, 68 insertions, 6 deletions
diff --git a/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java b/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java
index f0d67274d61a..0d15a272498c 100644
--- a/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java
+++ b/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java
@@ -16,24 +16,29 @@
package com.intellij.execution.runners;
-import com.intellij.execution.ExecutionBundle;
-import com.intellij.execution.ExecutionException;
-import com.intellij.execution.RunCanceledByUserException;
+import com.intellij.execution.*;
import com.intellij.execution.configurations.RunProfile;
+import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.process.ProcessNotCreatedException;
+import com.intellij.execution.ui.RunContentDescriptor;
+import com.intellij.ide.DataManager;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.notification.NotificationGroup;
import com.intellij.notification.NotificationListener;
import com.intellij.notification.NotificationType;
+import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.wm.ToolWindowManager;
+import com.intellij.ui.content.Content;
import com.intellij.util.ObjectUtils;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import javax.swing.*;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
@@ -52,6 +57,10 @@ public class ExecutionUtil {
handleExecutionError(project, toolWindowId, runProfile.getName(), e);
}
+ public static void handleExecutionError(@NotNull ExecutionEnvironment environment, @NotNull ExecutionException e) {
+ handleExecutionError(environment.getProject(), environment.getExecutor().getToolWindowId(), environment.getRunProfile().getName(), e);
+ }
+
public static void handleExecutionError(@NotNull final Project project,
@NotNull final String toolWindowId,
@NotNull String taskName,
@@ -59,15 +68,15 @@ public class ExecutionUtil {
if (e instanceof RunCanceledByUserException) return;
LOG.debug(e);
-
+
String description = e.getMessage();
HyperlinkListener listener = null;
-
+
if (description == null) {
LOG.warn("Execution error without description", e);
description = "Unknown error";
}
-
+
if ((description.contains("87") || description.contains("111") || description.contains("206")) &&
e instanceof ProcessNotCreatedException &&
!PropertiesComponent.getInstance(project).isTrueValue("dynamic.classpath")) {
@@ -107,4 +116,57 @@ public class ExecutionUtil {
}
});
}
+
+ public static void restartIfActive(@NotNull RunContentDescriptor descriptor) {
+ ProcessHandler processHandler = descriptor.getProcessHandler();
+ if (processHandler != null
+ && processHandler.isStartNotified()
+ && !processHandler.isProcessTerminating()
+ && !processHandler.isProcessTerminated()) {
+ restart(descriptor);
+ }
+ }
+
+ public static void restart(@NotNull RunContentDescriptor descriptor) {
+ restart(descriptor.getComponent());
+ }
+
+ public static void restart(@NotNull Content content) {
+ restart(content.getComponent());
+ }
+
+ private static void restart(@Nullable JComponent component) {
+ if (component != null) {
+ ExecutionEnvironment environment = LangDataKeys.EXECUTION_ENVIRONMENT.getData(DataManager.getInstance().getDataContext(component));
+ if (environment != null) {
+ restart(environment);
+ }
+ }
+ }
+
+ public static void restart(@NotNull ExecutionEnvironment environment) {
+ if (!ExecutorRegistry.getInstance().isStarting(environment)) {
+ ExecutionManager.getInstance(environment.getProject()).restartRunProfile(environment);
+ }
+ }
+
+ public static void runConfiguration(@NotNull RunnerAndConfigurationSettings configuration, @NotNull Executor executor) {
+ ExecutionEnvironmentBuilder builder = createEnvironment(executor, configuration);
+ if (builder != null) {
+ ExecutionManager.getInstance(configuration.getConfiguration().getProject()).restartRunProfile(builder
+ .activeTarget()
+ .build());
+ }
+ }
+
+ @Nullable
+ public static ExecutionEnvironmentBuilder createEnvironment(@NotNull Executor executor, @NotNull RunnerAndConfigurationSettings settings) {
+ try {
+ return ExecutionEnvironmentBuilder.create(executor, settings);
+ }
+ catch (ExecutionException e) {
+ handleExecutionError(settings.getConfiguration().getProject(), executor.getToolWindowId(), settings.getConfiguration().getName(), e);
+ return null;
+ }
+ }
}