mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Run Configurations: Multiple restart is broken.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user