diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java | 138 |
1 files changed, 56 insertions, 82 deletions
diff --git a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java index b27a939dd57c..5ad5f73b954a 100644 --- a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java +++ b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,23 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.execution; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.impl.RunDialog; import com.intellij.execution.impl.RunManagerImpl; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ExecutionEnvironmentBuilder; import com.intellij.execution.runners.ExecutionUtil; import com.intellij.execution.runners.ProgramRunner; -import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.icons.AllIcons; import com.intellij.internal.statistic.UsageTrigger; import com.intellij.internal.statistic.beans.ConvertUsagesUtil; -import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; @@ -41,11 +38,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; -/** - * @author spleaner - */ public class ProgramRunnerUtil { - private static final Logger LOG = Logger.getInstance("#com.intellij.execution.ProgramRunnerUtil"); + private static final Logger LOG = Logger.getInstance(ProgramRunnerUtil.class); private ProgramRunnerUtil() { } @@ -55,102 +49,82 @@ public class ProgramRunnerUtil { return configuration == null ? null : RunnerRegistry.getInstance().getRunner(executorId, configuration.getConfiguration()); } - public static void executeConfiguration(@NotNull final Project project, - @Nullable final DataContext context, - @NotNull final RunnerAndConfigurationSettings configuration, - @NotNull final Executor executor, - @NotNull final ExecutionTarget target, - @Nullable RunContentDescriptor contentToReuse, - final boolean showSettings) { - ProgramRunner runner = getRunner(executor.getId(), configuration); - if (runner == null) { - LOG.error("Runner MUST not be null! Cannot find runner for " + - executor.getId() + - " and " + - configuration.getConfiguration().getFactory().getName()); - return; - } - executeConfiguration(project, context, configuration, executor, target, contentToReuse, showSettings, runner, null, true); - } - - public static void executeConfiguration(Project project, - @Nullable DataContext context, - @Nullable RunnerAndConfigurationSettings configuration, - Executor executor, - ExecutionTarget target, - RunContentDescriptor contentToReuse, - boolean showSettings, - @NotNull ProgramRunner runner, - @Nullable RunProfile runProfile, - boolean assignNewId) { - if (ExecutorRegistry.getInstance().isStarting(project, executor.getId(), runner.getRunnerId())) { - return; - } - - if (configuration != null && !ExecutionTargetManager.canRun(configuration, target)) { - ExecutionUtil.handleExecutionError( - project, executor.getToolWindowId(), configuration.getConfiguration(), - new ExecutionException(StringUtil.escapeXml("Cannot run '" + configuration.getName() + "' on '" + target.getDisplayName() + "'"))); + public static void executeConfiguration(@NotNull ExecutionEnvironment environment, boolean showSettings, boolean assignNewId) { + if (ExecutorRegistry.getInstance().isStarting(environment)) { return; } - if (configuration != null && - (!RunManagerImpl.canRunConfiguration(configuration, executor) || (showSettings && configuration.isEditBeforeRun()))) { - if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor)) { + RunnerAndConfigurationSettings runnerAndConfigurationSettings = environment.getRunnerAndConfigurationSettings(); + if (runnerAndConfigurationSettings != null) { + if (!ExecutionTargetManager.canRun(environment)) { + ExecutionUtil.handleExecutionError(environment, new ExecutionException( + StringUtil.escapeXml("Cannot run '" + environment.getRunProfile().getName() + "' on '" + environment.getExecutionTarget().getDisplayName() + "'"))); return; } - while (!RunManagerImpl.canRunConfiguration(configuration, executor)) { - if (Messages.YES == Messages - .showYesNoDialog(project, "Configuration is still incorrect. Do you want to edit it again?", "Change Configuration Settings", - "Edit", "Continue Anyway", Messages.getErrorIcon())) { - if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor)) { - return; - } + if (!RunManagerImpl.canRunConfiguration(environment) || (showSettings && runnerAndConfigurationSettings.isEditBeforeRun())) { + if (!RunDialog.editConfiguration(environment, "Edit configuration")) { + return; } - else { - break; + + while (!RunManagerImpl.canRunConfiguration(environment)) { + if (Messages.YES == Messages + .showYesNoDialog(environment.getProject(), "Configuration is still incorrect. Do you want to edit it again?", "Change Configuration Settings", + "Edit", "Continue Anyway", Messages.getErrorIcon())) { + if (!RunDialog.editConfiguration(environment, "Edit configuration")) { + return; + } + } + else { + break; + } } } - } - final ConfigurationType configurationType = configuration != null ? configuration.getType() : null; - if (configurationType != null) { - UsageTrigger.trigger("execute." + ConvertUsagesUtil.ensureProperKey(configurationType.getId()) + "." + executor.getId()); + ConfigurationType configurationType = runnerAndConfigurationSettings.getType(); + if (configurationType != null) { + UsageTrigger.trigger("execute." + ConvertUsagesUtil.ensureProperKey(configurationType.getId()) + "." + environment.getExecutor().getId()); + } } try { - ExecutionEnvironmentBuilder builder = - new ExecutionEnvironmentBuilder(project, executor); - if (configuration != null) { - builder.setRunnerAndSettings(runner, configuration); - } - else { - builder.setRunnerId(runner.getRunnerId()); - } - builder.setTarget(target).setContentToReuse(contentToReuse).setDataContext(context); if (assignNewId) { - builder.assignNewId(); - } - if (runProfile != null) { - builder.setRunProfile(runProfile); + environment.assignNewExecutionId(); } - runner.execute(builder.build()); + environment.getRunner().execute(environment); } catch (ExecutionException e) { - String name = configuration != null ? configuration.getName() : null; - if (name == null && runProfile != null) name = runProfile.getName(); - if (name == null && contentToReuse != null) name = contentToReuse.getDisplayName(); - if (name == null) name = "<Unknown>"; - ExecutionUtil.handleExecutionError(project, executor.getToolWindowId(), name, e); + String name = runnerAndConfigurationSettings != null ? runnerAndConfigurationSettings.getName() : null; + if (name == null) { + name = environment.getRunProfile().getName(); + } + if (name == null && environment.getContentToReuse() != null) { + name = environment.getContentToReuse().getDisplayName(); + } + if (name == null) { + name = "<Unknown>"; + } + ExecutionUtil.handleExecutionError(environment.getProject(), environment.getExecutor().getToolWindowId(), name, e); } } - public static void executeConfiguration(@NotNull Project project, @NotNull RunnerAndConfigurationSettings configuration, @NotNull Executor executor) { - executeConfiguration(project, null, configuration, executor, ExecutionTargetManager.getActiveTarget(project), null, true); + ExecutionEnvironmentBuilder builder; + try { + builder = ExecutionEnvironmentBuilder.create(executor, configuration); + } + catch (ExecutionException e) { + LOG.error(e); + return; + } + + executeConfiguration(builder + .contentToReuse(null) + .dataContext(null) + .activeTarget() + .build(), true, true); } public static Icon getConfigurationIcon(final RunnerAndConfigurationSettings settings, |