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 93bcea89db85..67d13c2f34f9 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java @@ -27,6 +27,7 @@ import com.intellij.execution.process.ProcessEvent; import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ExecutionUtil; +import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.execution.ui.RunContentManager; import com.intellij.execution.ui.RunContentManagerImpl; @@ -307,14 +308,15 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom stop(descriptor); } } - else { - start(project, configuration, executor, target, currentDescriptor); - return; - } Runnable runnable = new Runnable() { @Override public void run() { + ProgramRunner runner = ProgramRunnerUtil.getRunner(executor.getId(), configuration); + if (runner != null && ExecutorRegistry.getInstance().isStarting(project, executor.getId(), runner.getRunnerId())) { + awaitingTerminationAlarm.addRequest(this, 100); + return; + } for (RunContentDescriptor descriptor : descriptorsToStop) { ProcessHandler processHandler = descriptor.getProcessHandler(); if (processHandler != null && !processHandler.isProcessTerminated()) { @@ -325,7 +327,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom start(project, configuration, executor, target, currentDescriptor); } }; - awaitingTerminationAlarm.addRequest(runnable, 100); + awaitingTerminationAlarm.addRequest(runnable, 50); } private static void start(@NotNull Project project, diff --git a/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java b/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java index 70fd463102b2..2d165b44ca4c 100644 --- a/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java +++ b/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java @@ -15,17 +15,18 @@ */ package com.intellij.execution.runners; -import com.intellij.execution.*; +import com.intellij.execution.ExecutionBundle; +import com.intellij.execution.ExecutionManager; +import com.intellij.execution.Executor; +import com.intellij.execution.ExecutorRegistry; import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.icons.AllIcons; -import com.intellij.ide.DataManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.keymap.KeymapManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Disposer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -102,44 +103,26 @@ public class RestartAction extends FakeRerunAction implements DumbAware, AnActio @Override public void actionPerformed(final AnActionEvent e) { - Project project = myEnvironment.getProject(); - if (project == null) - return; - if (myProcessHandler != null) { - ExecutionManager.getInstance(project).restartRunProfile(project, - myExecutor, - myEnvironment.getExecutionTarget(), - myEnvironment.getRunnerAndConfigurationSettings(), - myProcessHandler); - } - else { - ExecutionManager.getInstance(project).restartRunProfile(project, - myExecutor, - myEnvironment.getExecutionTarget(), - myEnvironment.getRunnerAndConfigurationSettings(), - myDescriptor); - } + restart(); } public void restart() { - final Project project = PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(myDescriptor.getComponent())); - if (ExecutorRegistry.getInstance().isStarting(project, myExecutor.getId(), myRunner.getRunnerId())) { + Project project = myEnvironment.getProject(); + if (project == null) return; + if (myProcessHandler != null) { + ExecutionManager.getInstance(project).restartRunProfile(project, + myExecutor, + myEnvironment.getExecutionTarget(), + myEnvironment.getRunnerAndConfigurationSettings(), + myProcessHandler); } - try { - final ExecutionEnvironment old = myEnvironment; - myRunner.execute(myExecutor, new ExecutionEnvironment(old.getRunProfile(), - old.getExecutionTarget(), - project, - old.getRunnerSettings(), - old.getConfigurationSettings(), - myDescriptor, - old.getRunnerAndConfigurationSettings())); - } - catch (RunCanceledByUserException ignore) { - } - catch (ExecutionException e1) { - Messages.showErrorDialog(project, e1.getMessage(), ExecutionBundle.message("restart.error.message.title")); + else { + ExecutionManager.getInstance(project).restartRunProfile(project, + myExecutor, + myEnvironment.getExecutionTarget(), + myEnvironment.getRunnerAndConfigurationSettings(), + myDescriptor); } }