Run Configurations: Multiple restart is broken.

This commit is contained in:
Vassiliy Kudryashov
2013-05-22 16:02:52 +04:00
parent 33bdb4fe06
commit 5bb068f3bb
2 changed files with 26 additions and 41 deletions
@@ -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,
@@ -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);
}
}