mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-108320 Restart action is broken
This commit is contained in:
@@ -114,10 +114,8 @@ public class DefaultDebugUIEnvironment implements DebugUIEnvironment {
|
||||
|
||||
@Override
|
||||
public void initActions(RunContentDescriptor content, DefaultActionGroup actionGroup) {
|
||||
ProcessHandler processHandler = content.getProcessHandler();
|
||||
RestartAction restartAction = new RestartAction(myExecutor,
|
||||
myRunner,
|
||||
processHandler,
|
||||
content,
|
||||
myExecutionEnvironment);
|
||||
actionGroup.add(restartAction, Constraints.FIRST);
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.intellij.execution;
|
||||
import com.intellij.execution.configurations.RunProfileState;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.execution.runners.ProgramRunner;
|
||||
import com.intellij.execution.ui.RunContentDescriptor;
|
||||
import com.intellij.execution.ui.RunContentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -60,4 +61,10 @@ public abstract class ExecutionManager {
|
||||
@NotNull ExecutionTarget target,
|
||||
@Nullable RunnerAndConfigurationSettings configuration,
|
||||
@Nullable RunContentDescriptor currentDescriptor);
|
||||
|
||||
public abstract void restartRunProfile(@NotNull Project project,
|
||||
@NotNull Executor executor,
|
||||
@Nullable ProgramRunner runner,
|
||||
@NotNull ExecutionEnvironment environment,
|
||||
@Nullable RunContentDescriptor currentDescriptor);
|
||||
}
|
||||
|
||||
@@ -18,10 +18,7 @@ package com.intellij.execution.impl;
|
||||
|
||||
import com.intellij.CommonBundle;
|
||||
import com.intellij.execution.*;
|
||||
import com.intellij.execution.configurations.ConfigurationPerRunnerSettings;
|
||||
import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.execution.configurations.RunProfileState;
|
||||
import com.intellij.execution.configurations.*;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
@@ -269,28 +266,55 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
|
||||
for (RunContentDescriptor descriptor : getContentManager().getAllDescriptors()) {
|
||||
final ProcessHandler handler = descriptor.getProcessHandler();
|
||||
if (handler == processHandler) {
|
||||
restartRunProfile(project, executor, target, configuration, descriptor);
|
||||
restartRunProfile(project, null, null, null, null, executor, target, configuration, descriptor);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
restartRunProfile(project, executor, target, configuration, (RunContentDescriptor)null);
|
||||
restartRunProfile(project, null, null, null, null, executor, target, configuration, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restartRunProfile(@NotNull final Project project,
|
||||
public void restartRunProfile(@NotNull Project project,
|
||||
@NotNull Executor executor,
|
||||
@NotNull ExecutionTarget target,
|
||||
@Nullable RunnerAndConfigurationSettings configuration,
|
||||
@Nullable RunContentDescriptor currentDescriptor) {
|
||||
restartRunProfile(project, null, null, null, null, executor, target, configuration, currentDescriptor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restartRunProfile(@NotNull Project project,
|
||||
@NotNull Executor executor,
|
||||
@Nullable ProgramRunner runner,
|
||||
@NotNull ExecutionEnvironment environment,
|
||||
@Nullable RunContentDescriptor currentDescriptor) {
|
||||
restartRunProfile(project,
|
||||
runner,
|
||||
environment.getRunProfile(),
|
||||
environment.getRunnerSettings(),
|
||||
environment.getConfigurationSettings(),
|
||||
executor,
|
||||
environment.getExecutionTarget(),
|
||||
environment.getRunnerAndConfigurationSettings(), currentDescriptor);
|
||||
}
|
||||
|
||||
|
||||
private void restartRunProfile(@NotNull final Project project,
|
||||
@Nullable ProgramRunner r,
|
||||
@Nullable final RunProfile runProfile,
|
||||
@Nullable final RunnerSettings runnerSettings,
|
||||
@Nullable final ConfigurationPerRunnerSettings configurationPerRunnerSettings,
|
||||
@NotNull final Executor executor,
|
||||
@NotNull final ExecutionTarget target,
|
||||
@Nullable final RunnerAndConfigurationSettings configuration,
|
||||
@Nullable final RunContentDescriptor currentDescriptor) {
|
||||
if (configuration != null && ProgramRunnerUtil.getRunner(executor.getId(), configuration) == null) {
|
||||
final ProgramRunner runner = r != null ? r : ProgramRunnerUtil.getRunner(executor.getId(), configuration);
|
||||
if (configuration != null && runner == null) {
|
||||
LOG.error("Cannot find runner for " + configuration.getName());
|
||||
return;
|
||||
}
|
||||
if (configuration == null && (currentDescriptor == null || currentDescriptor.getRestarter() == null)) {
|
||||
LOG.error("Nothing to restart for descriptor ["+currentDescriptor+"]");
|
||||
return;
|
||||
}
|
||||
|
||||
final List<RunContentDescriptor> descriptorsToStop = new ArrayList<RunContentDescriptor>();
|
||||
if (configuration != null && configuration.isSingleton()) {
|
||||
descriptorsToStop.addAll(getRunningDescriptors(configuration));
|
||||
@@ -312,7 +336,6 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
|
||||
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;
|
||||
@@ -324,19 +347,39 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
|
||||
return;
|
||||
}
|
||||
}
|
||||
start(project, configuration, executor, target, currentDescriptor);
|
||||
start(project, runner, runProfile, runnerSettings, configurationPerRunnerSettings, configuration, executor, target, currentDescriptor);
|
||||
}
|
||||
};
|
||||
awaitingTerminationAlarm.addRequest(runnable, 50);
|
||||
}
|
||||
|
||||
private static void start(@NotNull Project project,
|
||||
@Nullable ProgramRunner runner,
|
||||
@Nullable RunProfile runProfile,
|
||||
@Nullable RunnerSettings runnerSettings,
|
||||
@Nullable ConfigurationPerRunnerSettings configurationPerRunnerSettings,
|
||||
@Nullable RunnerAndConfigurationSettings configuration,
|
||||
@NotNull Executor executor,
|
||||
@NotNull ExecutionTarget target,
|
||||
@Nullable RunContentDescriptor descriptor) {
|
||||
Runnable restarter = descriptor != null ? descriptor.getRestarter() : null;
|
||||
if (configuration != null) {
|
||||
if (runner != null && runProfile != null) {
|
||||
try {
|
||||
runner.execute(executor, new ExecutionEnvironment(runProfile,
|
||||
target,
|
||||
project,
|
||||
runnerSettings,
|
||||
configurationPerRunnerSettings,
|
||||
descriptor,
|
||||
configuration));
|
||||
}
|
||||
catch (RunCanceledByUserException ignore) {
|
||||
}
|
||||
catch (ExecutionException e1) {
|
||||
Messages.showErrorDialog(project, e1.getMessage(), ExecutionBundle.message("restart.error.message.title"));
|
||||
}
|
||||
}
|
||||
else if (configuration != null) {
|
||||
ProgramRunnerUtil.executeConfiguration(project, configuration, executor, target, descriptor, true);
|
||||
}
|
||||
else if (restarter != null) {
|
||||
|
||||
@@ -43,7 +43,6 @@ import java.util.List;
|
||||
*/
|
||||
public class RestartAction extends FakeRerunAction implements DumbAware, AnAction.TransparentUpdate, Disposable {
|
||||
|
||||
private final ProcessHandler myProcessHandler;
|
||||
private final ProgramRunner myRunner;
|
||||
@NotNull private final RunContentDescriptor myDescriptor;
|
||||
@NotNull private final Executor myExecutor;
|
||||
@@ -51,7 +50,6 @@ public class RestartAction extends FakeRerunAction implements DumbAware, AnActio
|
||||
|
||||
public RestartAction(@NotNull final Executor executor,
|
||||
final ProgramRunner runner,
|
||||
final ProcessHandler processHandler,//todo kill ProcessHandler here, use descriptor.getProcessHandler() is need
|
||||
@NotNull final RunContentDescriptor descriptor,
|
||||
@NotNull final ExecutionEnvironment env) {
|
||||
Disposer.register(descriptor, this);
|
||||
@@ -59,7 +57,6 @@ public class RestartAction extends FakeRerunAction implements DumbAware, AnActio
|
||||
|
||||
myEnvironment = env;
|
||||
getTemplatePresentation().setEnabled(false);
|
||||
myProcessHandler = processHandler;
|
||||
myRunner = runner;
|
||||
myDescriptor = descriptor;
|
||||
myExecutor = executor;
|
||||
@@ -108,22 +105,8 @@ public class RestartAction extends FakeRerunAction implements DumbAware, AnActio
|
||||
|
||||
public void restart() {
|
||||
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);
|
||||
}
|
||||
if (project != null && !ExecutorRegistry.getInstance().isStarting(project, myExecutor.getId(), myRunner.getRunnerId()))
|
||||
ExecutionManager.getInstance(project).restartRunProfile(project, myExecutor, myRunner, myEnvironment, myDescriptor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -205,8 +205,7 @@ public class RunContentBuilder extends LogConsoleManagerBase {
|
||||
private ActionGroup createActionToolbar(final RunContentDescriptor contentDescriptor, final JComponent component) {
|
||||
final DefaultActionGroup actionGroup = new DefaultActionGroup();
|
||||
|
||||
final RestartAction restartAction = new RestartAction(myExecutor, myRunner, getProcessHandler(),
|
||||
contentDescriptor, getEnvironment());
|
||||
final RestartAction restartAction = new RestartAction(myExecutor, myRunner, contentDescriptor, getEnvironment());
|
||||
restartAction.registerShortcut(component);
|
||||
actionGroup.add(restartAction);
|
||||
contentDescriptor.setRestarter(new Runnable() {
|
||||
|
||||
@@ -160,8 +160,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
|
||||
DefaultActionGroup leftToolbar = new DefaultActionGroup();
|
||||
final Executor executor = DefaultDebugExecutor.getDebugExecutorInstance();
|
||||
if (runner != null && env != null) {
|
||||
RestartAction restartAction = new RestartAction(executor, runner, myRunContentDescriptor.getProcessHandler(),
|
||||
myRunContentDescriptor, env);
|
||||
RestartAction restartAction = new RestartAction(executor, runner, myRunContentDescriptor, env);
|
||||
leftToolbar.add(restartAction);
|
||||
restartAction.registerShortcut(myUi.getComponent());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user