diff --git a/platform/lang-api/src/com/intellij/execution/dashboard/RuntimeDashboardContributor.java b/platform/lang-api/src/com/intellij/execution/dashboard/RuntimeDashboardContributor.java index 42e69083f595..d94be223954d 100644 --- a/platform/lang-api/src/com/intellij/execution/dashboard/RuntimeDashboardContributor.java +++ b/platform/lang-api/src/com/intellij/execution/dashboard/RuntimeDashboardContributor.java @@ -67,7 +67,11 @@ public abstract class RuntimeDashboardContributor { if (exitCode == null) { return DashboardRunConfigurationStatus.STARTED; } - return exitCode == 0 ? DashboardRunConfigurationStatus.STOPPED : DashboardRunConfigurationStatus.FAILED; + Boolean terminationRequested = processHandler.getUserData(ProcessHandler.TERMINATION_REQUESTED); + if (exitCode == 0 || (terminationRequested != null && terminationRequested)) { + return DashboardRunConfigurationStatus.STOPPED; + } + return DashboardRunConfigurationStatus.FAILED; } public static RuntimeDashboardContributor getContributor(ConfigurationType type) { diff --git a/platform/lang-impl/src/com/intellij/execution/actions/StopProcessAction.java b/platform/lang-impl/src/com/intellij/execution/actions/StopProcessAction.java index 652ea0871215..2f04b88d8316 100644 --- a/platform/lang-impl/src/com/intellij/execution/actions/StopProcessAction.java +++ b/platform/lang-impl/src/com/intellij/execution/actions/StopProcessAction.java @@ -16,6 +16,7 @@ package com.intellij.execution.actions; import com.intellij.execution.KillableProcess; +import com.intellij.execution.impl.ExecutionManagerImpl; import com.intellij.execution.process.ProcessHandler; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; @@ -31,7 +32,6 @@ import javax.swing.*; * @author Sergey Simonchik */ public class StopProcessAction extends DumbAwareAction implements AnAction.TransparentUpdate { - private ProcessHandler myProcessHandler; public StopProcessAction(@NotNull String text, @Nullable String description, @Nullable ProcessHandler processHandler) { @@ -70,28 +70,12 @@ public class StopProcessAction extends DumbAwareAction implements AnAction.Trans presentation.setDescription(description); } - @Override public void actionPerformed(AnActionEvent e) { stopProcess(myProcessHandler); } public static void stopProcess(@Nullable ProcessHandler processHandler) { - if (processHandler instanceof KillableProcess && processHandler.isProcessTerminating()) { - // process termination was requested, but it's still alive - // in this case 'force quit' will be performed - ((KillableProcess)processHandler).killProcess(); - return; - } - - if (processHandler != null) { - if (processHandler.detachIsDefault()) { - processHandler.detachProcess(); - } - else { - processHandler.destroyProcess(); - } - } + ExecutionManagerImpl.stopProcess(processHandler); } - } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java index 3c96ca98899c..a6ad477c2cf3 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java @@ -220,12 +220,19 @@ public class ExecutionManagerImpl extends ExecutionManager implements Disposable } public static void stopProcess(@Nullable RunContentDescriptor descriptor) { - ProcessHandler processHandler = descriptor != null ? descriptor.getProcessHandler() : null; + stopProcess(descriptor != null ? descriptor.getProcessHandler() : null); + } + + public static void stopProcess(@Nullable ProcessHandler processHandler) { if (processHandler == null) { return; } + processHandler.putUserData(ProcessHandler.TERMINATION_REQUESTED, Boolean.TRUE); + if (processHandler instanceof KillableProcess && processHandler.isProcessTerminating()) { + // process termination was requested, but it's still alive + // in this case 'force quit' will be performed ((KillableProcess)processHandler).killProcess(); return; } diff --git a/platform/util/src/com/intellij/execution/process/ProcessHandler.java b/platform/util/src/com/intellij/execution/process/ProcessHandler.java index a1dab75dc7b9..131e41082ddb 100644 --- a/platform/util/src/com/intellij/execution/process/ProcessHandler.java +++ b/platform/util/src/com/intellij/execution/process/ProcessHandler.java @@ -41,6 +41,7 @@ public abstract class ProcessHandler extends UserDataHolderBase { * @deprecated */ public static final Key SILENTLY_DESTROY_ON_CLOSE = Key.create("SILENTLY_DESTROY_ON_CLOSE"); + public static final Key TERMINATION_REQUESTED = Key.create("TERMINATION_REQUESTED"); private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList();