diff --git a/platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java b/platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java index 2a89c656d704..e6dac0cc7cb3 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java @@ -97,6 +97,9 @@ public abstract class RunConfigurationBase extends UserDataHolderBase implements @Nullable ConfigurationPerRunnerSettings configurationPerRunnerSettings) throws RuntimeConfigurationException { } + public void checkSettingsBeforeRun() throws RuntimeConfigurationException { + } + public boolean canRunOn(@NotNull ExecutionTarget target) { return true; } diff --git a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java index 8fef7096d784..a00945025e8a 100644 --- a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java +++ b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java @@ -74,14 +74,14 @@ public class ProgramRunnerUtil { } if (!RunManagerImpl.canRunConfiguration(configuration, executor) || (showSettings && RunManagerImpl.isEditBeforeRun(configuration))) { - if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor.getActionName(), executor.getIcon())) { + if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor)) { return; } while (!RunManagerImpl.canRunConfiguration(configuration, executor)) { if (0 == 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.getActionName(), executor.getIcon())) { + if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor)) { return; } } else { diff --git a/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java b/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java index 658f53f4cf45..6eee7bbc5f21 100644 --- a/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java +++ b/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java @@ -216,7 +216,7 @@ public class ChooseRunConfigurationPopup { assert executor != null; PropertiesComponent.getInstance().setValue("run.configuration.edit.ad", Boolean.toString(true)); - if (RunDialog.editConfiguration(project, configuration, "Edit configuration settings", executor.getActionName(), executor.getIcon())) { + if (RunDialog.editConfiguration(project, configuration, "Edit configuration settings", executor)) { RunManagerEx.getInstanceEx(project).setSelectedConfiguration(configuration); ProgramRunnerUtil.executeConfiguration(project, configuration, executor, ExecutionTargetManager.getActiveTarget(project), false); } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java index 744f5d00489b..bde6e685195d 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java @@ -217,7 +217,7 @@ class RunConfigurable extends BaseConfigurable { final Object userObject = node.getUserObject(); if (userObject instanceof RunnerAndConfigurationSettingsImpl) { final SingleConfigurationConfigurable configurationConfigurable = - SingleConfigurationConfigurable.editSettings((RunnerAndConfigurationSettings)userObject); + SingleConfigurationConfigurable.editSettings((RunnerAndConfigurationSettings)userObject, null); installUpdateListeners(configurationConfigurable); node.setUserObject(configurationConfigurable); updateRightPanel(configurationConfigurable); @@ -847,7 +847,7 @@ class RunConfigurable extends BaseConfigurable { private SingleConfigurationConfigurable createNewConfiguration(final RunnerAndConfigurationSettings settings, final DefaultMutableTreeNode node) { final SingleConfigurationConfigurable configurationConfigurable = - SingleConfigurationConfigurable.editSettings(settings); + SingleConfigurationConfigurable.editSettings(settings, null); installUpdateListeners(configurationConfigurable); DefaultMutableTreeNode nodeToAdd = new DefaultMutableTreeNode(configurationConfigurable); node.add(nodeToAdd); diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java b/platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java index 6d96ba3a8ac2..199f5ca336ae 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java @@ -28,6 +28,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.wm.ex.IdeFocusTraversalPolicy; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.ActionEvent; @@ -98,15 +99,15 @@ public class RunDialog extends DialogWrapper implements RunConfigurable.RunDialo } public static boolean editConfiguration(final Project project, final RunnerAndConfigurationSettings configuration, final String title) { - return editConfiguration(project, configuration, title, null, null); + return editConfiguration(project, configuration, title, null); } - public static boolean editConfiguration(final Project project, final RunnerAndConfigurationSettings configuration, final String title, final String okText, final Icon okIcon) { - final SingleConfigurationConfigurable configurable = SingleConfigurationConfigurable.editSettings(configuration); + public static boolean editConfiguration(final Project project, final RunnerAndConfigurationSettings configuration, final String title, @Nullable final Executor executor) { + final SingleConfigurationConfigurable configurable = SingleConfigurationConfigurable.editSettings(configuration, executor); final SingleConfigurableEditor dialog = new SingleConfigurableEditor(project, configurable) { { - if (okIcon != null) setOKButtonIcon(okIcon); - if (okText != null) setOKButtonText(okText); + if (executor != null) setOKButtonText(executor.getActionName()); + if (executor != null) setOKButtonIcon(executor.getIcon()); } }; diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java index ef27bcc27efc..3593d0f720b4 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java @@ -292,6 +292,9 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C runConfigurationBase.checkRunnerSettings(runner, myRunnerSettings.get(runner), myConfigurationPerRunnerSettings.get(runner)); } } + if (executor != null) { + runConfigurationBase.checkSettingsBeforeRun(); + } } } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java b/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java index 386de7651520..2d11fa530911 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java @@ -27,6 +27,7 @@ import com.intellij.openapi.options.SettingsEditorConfigurable; import com.intellij.openapi.options.SettingsEditorListener; import com.intellij.ui.DocumentAdapter; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -41,6 +42,8 @@ public final class SingleConfigurationConfigurable { private static final Logger LOG = Logger.getInstance("#com.intellij.execution.impl.SingleConfigurationConfigurable"); private final PlainDocument myNameDocument = new PlainDocument(); + @Nullable private Executor myExecutor; + private ValidationResult myLastValidationResult = null; private boolean myValidationResultValid = false; private MyValidatableComponent myComponent; @@ -49,8 +52,10 @@ public final class SingleConfigurationConfigurable SingleConfigurationConfigurable editSettings(RunnerAndConfigurationSettings settings) { - SingleConfigurationConfigurable configurable = new SingleConfigurationConfigurable(settings); + public static SingleConfigurationConfigurable editSettings(RunnerAndConfigurationSettings settings, + @Nullable Executor executor) { + SingleConfigurationConfigurable configurable = new SingleConfigurationConfigurable(settings, executor); configurable.reset(); return configurable; } public void apply() throws ConfigurationException { - getSettings().setName(getNameText()); + RunnerAndConfigurationSettings settings = getSettings(); + settings.setName(getNameText()); super.apply(); + RunManagerImpl.getInstanceImpl(getConfiguration().getProject()).fireRunConfigurationChanged(settings); } public void reset() { @@ -107,7 +115,7 @@ public final class SingleConfigurationConfigurable