From 501e96dc5877784393737d1e9cf02cb224de0bb4 Mon Sep 17 00:00:00 2001 From: Vassiliy Kudryashov Date: Mon, 25 Feb 2013 20:02:03 +0400 Subject: [PATCH] RUBY-13074 Cannot Rerun Nailgun Server in the Run tool window --- .../intellij/execution/ExecutionManager.java | 4 +-- .../runners/ExecutionEnvironmentBuilder.java | 1 + .../execution/impl/ExecutionManagerImpl.java | 35 ++++++++++++++----- .../execution/runners/RestartAction.java | 11 ++---- 4 files changed, 32 insertions(+), 19 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/ExecutionManager.java b/platform/lang-api/src/com/intellij/execution/ExecutionManager.java index 3c2c875f4fed..1979a7d123b3 100644 --- a/platform/lang-api/src/com/intellij/execution/ExecutionManager.java +++ b/platform/lang-api/src/com/intellij/execution/ExecutionManager.java @@ -52,13 +52,13 @@ public abstract class ExecutionManager { public abstract void restartRunProfile(@NotNull Project project, @NotNull Executor executor, @NotNull ExecutionTarget target, - @NotNull RunnerAndConfigurationSettings configuration, + @Nullable RunnerAndConfigurationSettings configuration, @Nullable ProcessHandler processHandler); //currentDescriptor is null for toolbar/popup action and not null for actions in run/debug toolwindows public abstract void restartRunProfile(@NotNull Project project, @NotNull Executor executor, @NotNull ExecutionTarget target, - @NotNull RunnerAndConfigurationSettings configuration, + @Nullable RunnerAndConfigurationSettings configuration, @Nullable RunContentDescriptor currentDescriptor); } diff --git a/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironmentBuilder.java b/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironmentBuilder.java index 378f4063d8fb..6f1017af470b 100644 --- a/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironmentBuilder.java +++ b/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironmentBuilder.java @@ -96,6 +96,7 @@ public final class ExecutionEnvironmentBuilder { return this; } + @NotNull public ExecutionEnvironment build() { ExecutionEnvironment environment = new ExecutionEnvironment(myRunProfile, myTarget, myProject, myRunnerSettings, myConfigurationSettings, myContentToReuse, 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 333683dcb07a..62873194e340 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java @@ -261,7 +261,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom public void restartRunProfile(@NotNull final Project project, @NotNull final Executor executor, @NotNull final ExecutionTarget target, - @NotNull final RunnerAndConfigurationSettings configuration, + @Nullable final RunnerAndConfigurationSettings configuration, @Nullable final ProcessHandler processHandler) { if (processHandler != null) { for (RunContentDescriptor descriptor : getContentManager().getAllDescriptors()) { @@ -279,13 +279,18 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom public void restartRunProfile(@NotNull final Project project, @NotNull final Executor executor, @NotNull final ExecutionTarget target, - @NotNull final RunnerAndConfigurationSettings configuration, + @Nullable final RunnerAndConfigurationSettings configuration, @Nullable final RunContentDescriptor currentDescriptor) { - if (ProgramRunnerUtil.getRunner(executor.getId(), configuration) == null) { + if (configuration != null && ProgramRunnerUtil.getRunner(executor.getId(), configuration) == null) { + LOG.error("Cannot find runner for " + configuration.getName()); + return; + } + if (configuration == null && (currentDescriptor == null || currentDescriptor.getRestarter() == null)) { + LOG.error("Nothing to restart"); return; } final List descriptorsToStop = new ArrayList(); - if (configuration.isSingleton()) { + if (configuration != null && configuration.isSingleton()) { descriptorsToStop.addAll(getRunningDescriptors(configuration)); } else if (currentDescriptor != null) { @@ -293,7 +298,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom } if (!descriptorsToStop.isEmpty()) { - if ((descriptorsToStop.size() > 1 || currentDescriptor == null || descriptorsToStop.get(0) != currentDescriptor) && + if (configuration != null && (descriptorsToStop.size() > 1 || currentDescriptor == null || descriptorsToStop.get(0) != currentDescriptor) && !userApprovesStop(project, configuration.getName(), descriptorsToStop.size())) { return; } @@ -302,7 +307,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom } } else { - ProgramRunnerUtil.executeConfiguration(project, configuration, executor, target, currentDescriptor, true); + start(project, configuration, executor, target, currentDescriptor); return; } @@ -316,12 +321,26 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom return; } } - ProgramRunnerUtil.executeConfiguration(project, configuration, executor, target, currentDescriptor, true); + start(project, configuration, executor, target, currentDescriptor); } }; awaitingTerminationAlarm.addRequest(runnable, 100); } + private static void start(@NotNull Project project, + @Nullable RunnerAndConfigurationSettings configuration, + @NotNull Executor executor, + @NotNull ExecutionTarget target, + @Nullable RunContentDescriptor descriptor) { + Runnable restarter = descriptor != null ? descriptor.getRestarter() : null; + if (configuration != null) { + ProgramRunnerUtil.executeConfiguration(project, configuration, executor, target, descriptor, true); + } + else if (restarter != null) { + restarter.run(); + } + } + private static boolean userApprovesStop(Project project, String configName, int instancesCount) { RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(project); final RunManagerConfig config = runManager.getConfig(); @@ -376,7 +395,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom } - private void stop(RunContentDescriptor runContentDescriptor) { + private static void stop(RunContentDescriptor runContentDescriptor) { ProcessHandler processHandler = runContentDescriptor != null ? runContentDescriptor.getProcessHandler() : null; if (processHandler == null) { return; 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 a0605c6b8e21..03e302bbf4d0 100644 --- a/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java +++ b/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java @@ -108,31 +108,24 @@ public class RestartAction extends FakeRerunAction implements DumbAware, AnActio public void actionPerformed(final AnActionEvent e) { Project project = myEnvironment.getProject(); - RunnerAndConfigurationSettings settings = myEnvironment.getRunnerAndConfigurationSettings(); if (project == null) return; - if (settings != null) { if (myProcessHandler != null) { ExecutionManager.getInstance(project).restartRunProfile(project, myExecutor, myEnvironment.getExecutionTarget(), - settings, + myEnvironment.getRunnerAndConfigurationSettings(), myProcessHandler); } else { ExecutionManager.getInstance(project).restartRunProfile(project, myExecutor, myEnvironment.getExecutionTarget(), - settings, + myEnvironment.getRunnerAndConfigurationSettings(), myDescriptor); } - } - else { - restart(); - } } - //Should be used by android framework only public void restart() { final Project project = PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(myDescriptor.getComponent())); if (ExecutorRegistry.getInstance().isStarting(project, myExecutor.getId(), myRunner.getRunnerId())) {