1 package com
.intellij
.execution
;
3 import com
.intellij
.execution
.configurations
.RunConfiguration
;
4 import com
.intellij
.execution
.configurations
.RuntimeConfigurationException
;
5 import com
.intellij
.execution
.impl
.RunnerAndConfigurationSettingsImpl
;
6 import com
.intellij
.execution
.impl
.RunManagerImpl
;
7 import com
.intellij
.execution
.impl
.RunDialog
;
8 import com
.intellij
.execution
.runners
.ExecutionEnvironment
;
9 import com
.intellij
.execution
.runners
.ProgramRunner
;
10 import com
.intellij
.openapi
.actionSystem
.DataContext
;
11 import com
.intellij
.openapi
.actionSystem
.PlatformDataKeys
;
12 import com
.intellij
.openapi
.actionSystem
.impl
.SimpleDataContext
;
13 import com
.intellij
.openapi
.diagnostic
.Logger
;
14 import com
.intellij
.openapi
.project
.Project
;
15 import com
.intellij
.openapi
.ui
.Messages
;
16 import com
.intellij
.openapi
.util
.IconLoader
;
17 import com
.intellij
.ui
.LayeredIcon
;
18 import com
.intellij
.ide
.DataManager
;
19 import org
.jetbrains
.annotations
.NotNull
;
20 import org
.jetbrains
.annotations
.Nullable
;
28 public class ExecutionUtil
{
29 private static final Logger LOG
= Logger
.getInstance("#com.intellij.execution.ExecutionUtil");
31 private static final Icon INVALID_CONFIGURATION
= IconLoader
.getIcon("/runConfigurations/invalidConfigurationLayer.png");
33 private ExecutionUtil() {
37 public static ProgramRunner
getRunner(final String executorId
, final RunnerAndConfigurationSettingsImpl configuration
) {
38 return RunnerRegistry
.getInstance().getRunner(executorId
, configuration
.getConfiguration());
41 public static void executeConfiguration(@NotNull final Project project
, @NotNull final RunnerAndConfigurationSettingsImpl configuration
, @NotNull final Executor executor
, @NotNull final DataContext dataContext
) {
42 ProgramRunner runner
= getRunner(executor
.getId(), configuration
);
43 LOG
.assertTrue(runner
!= null, "Runner MUST not be null!");
45 final Component component
= PlatformDataKeys
.CONTEXT_COMPONENT
.getData(dataContext
);
46 LOG
.assertTrue(component
!= null, "component MUST not be null!");
47 if (!RunManagerImpl
.canRunConfiguration(configuration
, executor
)) {
48 final boolean result
= RunDialog
.editConfiguration(project
, configuration
, "Edit configuration", executor
.getActionName(), executor
.getIcon());
53 while (!RunManagerImpl
.canRunConfiguration(configuration
, executor
)) {
54 if (0 == Messages
.showOkCancelDialog(project
, "Configuration is still wrong. Do you want to edit it again?", "Change configuration settings", Messages
.getErrorIcon())) {
55 final boolean result2
= RunDialog
.editConfiguration(project
, configuration
, "Edit configuration", executor
.getActionName(), executor
.getIcon());
66 runner
.execute(executor
, new ExecutionEnvironment(runner
, configuration
, dataContext
));
68 catch (RunCanceledByUserException e
) {
71 catch (ExecutionException e1
) {
72 Messages
.showErrorDialog(project
, ExecutionBundle
.message("error.running.configuration.with.error.error.message",
73 configuration
.getName(), e1
.getMessage()),
74 ExecutionBundle
.message("run.error.message.title"));
78 private static DataContext
recreateDataContext(final Project project
, final Component component
) {
79 if (component
!= null && component
.isDisplayable()) return DataManager
.getInstance().getDataContext(component
);
80 return SimpleDataContext
.getProjectContext(project
);
83 public static Icon
getConfigurationIcon(final Project project
, final RunnerAndConfigurationSettings settings
, final boolean invalid
) {
84 final RunManager runManager
= RunManager
.getInstance(project
);
85 RunConfiguration configuration
= settings
.getConfiguration();
86 final Icon icon
= settings
.getFactory().getIcon(configuration
);
87 LOG
.assertTrue(icon
!= null, "Icon should not be null!");
89 final Icon configurationIcon
= runManager
.isTemporary(configuration
) ? IconLoader
.getTransparentIcon(icon
, 0.3f
) : icon
;
91 return LayeredIcon
.create(configurationIcon
, INVALID_CONFIGURATION
);
94 return configurationIcon
;
97 public static Icon
getConfigurationIcon(final Project project
, final RunnerAndConfigurationSettings settings
) {
99 settings
.checkSettings();
100 return getConfigurationIcon(project
, settings
, false);
102 catch (RuntimeConfigurationException ex
) {
103 return getConfigurationIcon(project
, settings
, true);
107 public static String
shortenName(final String name
, final int toBeAdded
) {
108 if (name
== null) return "";
109 final int symbols
= Math
.max(10, 20 - toBeAdded
);
110 if (name
.length() < symbols
) return name
;
111 else return name
.substring(0, symbols
) + "...";