diff --git a/platform/lang-api/src/com/intellij/execution/RunnerAndConfigurationSettings.java b/platform/lang-api/src/com/intellij/execution/RunnerAndConfigurationSettings.java index 572f7ead1c0d..26a0944f9267 100644 --- a/platform/lang-api/src/com/intellij/execution/RunnerAndConfigurationSettings.java +++ b/platform/lang-api/src/com/intellij/execution/RunnerAndConfigurationSettings.java @@ -52,4 +52,8 @@ public interface RunnerAndConfigurationSettings { void setTemporary(boolean temporary); Factory createFactory(); + + void setEditBeforeRun(boolean b); + + boolean isEditBeforeRun(); } diff --git a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java index 9b34532b148f..f974986590be 100644 --- a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java +++ b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java @@ -58,7 +58,7 @@ public class ProgramRunnerUtil { return; } - if (!RunManagerImpl.canRunConfiguration(configuration, executor)) { + if (!RunManagerImpl.canRunConfiguration(configuration, executor) || RunManagerImpl.isEditBeforeRun(configuration)) { final boolean result = RunDialog.editConfiguration(project, configuration, "Edit configuration", executor.getActionName(), executor.getIcon()); if (!result) { return; diff --git a/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java b/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java index fc6b6a24cce6..c2a9d032ae6d 100644 --- a/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java +++ b/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java @@ -48,6 +48,8 @@ public abstract class RunManagerEx extends RunManager { public abstract void setTemporaryConfiguration(RunnerAndConfigurationSettings tempConfiguration); + public abstract void setEditBeforeRun(RunConfiguration settings, boolean edit); + public abstract RunManagerConfig getConfig(); @NotNull diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditorWrapper.java b/platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditorWrapper.java index 53de302b4f2a..efcbd9ef4ea0 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditorWrapper.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditorWrapper.java @@ -18,6 +18,7 @@ package com.intellij.execution.impl; import com.intellij.execution.BeforeRunTask; import com.intellij.execution.BeforeRunTaskProvider; +import com.intellij.execution.ExecutionBundle; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.UnknownRunConfiguration; @@ -55,10 +56,12 @@ public class ConfigurationSettingsEditorWrapper extends SettingsEditor, BeforeRunTask> myStepsBeforeLaunch; private final Map, StepBeforeLaunchRow> myStepBeforeLaunchRows = new THashMap, StepBeforeLaunchRow>(); private boolean myStoreProjectConfiguration; + private boolean myEditBeforeRun; private final ConfigurationSettingsEditor myEditor; @@ -78,7 +81,7 @@ public class ConfigurationSettingsEditorWrapper extends SettingsEditor[] providers = Extensions.getExtensions(BeforeRunTaskProvider.EXTENSION_POINT_NAME, runConfiguration.getProject()); myStepsPanel.removeAll(); - if (providers.length == 0 || runConfiguration instanceof UnknownRunConfiguration) { + if (runConfiguration instanceof UnknownRunConfiguration) { myStepsPanel.setVisible(false); } else { @@ -92,17 +95,25 @@ public class ConfigurationSettingsEditorWrapper extends SettingsEditor, BeforeRunTask> getStepsBeforeLaunch() { diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java index 30f57223b6d9..329392e2ed1e 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java @@ -619,6 +619,15 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, setActiveConfiguration(tempConfiguration); } + public static boolean isEditBeforeRun(@NotNull final RunnerAndConfigurationSettings configuration) { + return configuration.isEditBeforeRun(); + } + + public void setEditBeforeRun(@NotNull final RunConfiguration configuration, final boolean edit) { + final RunnerAndConfigurationSettings settings = getSettings(configuration); + if (settings != null) settings.setEditBeforeRun(edit); + } + public void setActiveConfiguration(final RunnerAndConfigurationSettings configuration) { setSelectedConfiguration(configuration); } 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 94de17906a01..18730145d1f3 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java @@ -57,6 +57,9 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C protected static final String DUMMY_ELEMENT_NANE = "dummy"; @NonNls private static final String TEMPORARY_ATTRIBUTE = "temporary"; + @NonNls + private static final String EDIT_BEFORE_RUN = "editBeforeRun"; + /** for compatibility */ @NonNls @@ -73,6 +76,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C private List myUnloadedConfigurationPerRunnerSettings = null; private boolean myTemporary; + private boolean myEditBeforeRun; public RunnerAndConfigurationSettingsImpl(RunManagerImpl manager) { myManager = manager; @@ -122,6 +126,16 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C return myConfiguration.getName(); } + @Override + public void setEditBeforeRun(boolean b) { + myEditBeforeRun = b; + } + + @Override + public boolean isEditBeforeRun() { + return myEditBeforeRun; + } + @Nullable private ConfigurationFactory getFactory(final Element element) { final String typeName = element.getAttributeValue(CONFIGURATION_TYPE_ATTRIBUTE); @@ -130,9 +144,9 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C } public void readExternal(Element element) throws InvalidDataException { - myIsTemplate = Boolean.valueOf(element.getAttributeValue(TEMPLATE_FLAG_ATTRIBUTE)).booleanValue(); myTemporary = Boolean.valueOf(element.getAttributeValue(TEMPORARY_ATTRIBUTE)).booleanValue() || TEMP_CONFIGURATION.equals(element.getName()); + myEditBeforeRun = Boolean.valueOf(element.getAttributeValue(EDIT_BEFORE_RUN)).booleanValue(); final ConfigurationFactory factory = getFactory(element); if (factory == null) return; @@ -192,6 +206,8 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C } element.setAttribute(CONFIGURATION_TYPE_ATTRIBUTE, factory.getType().getId()); element.setAttribute(FACTORY_NAME_ATTRIBUTE, factory.getName()); + + if (isEditBeforeRun()) element.setAttribute(EDIT_BEFORE_RUN, String.valueOf(true)); if (myTemporary) { element.setAttribute(TEMPORARY_ATTRIBUTE, Boolean.toString(myTemporary)); } diff --git a/platform/platform-resources-en/src/messages/ExecutionBundle.properties b/platform/platform-resources-en/src/messages/ExecutionBundle.properties index 31c03b502121..cc8ae5dda7d5 100644 --- a/platform/platform-resources-en/src/messages/ExecutionBundle.properties +++ b/platform/platform-resources-en/src/messages/ExecutionBundle.properties @@ -301,3 +301,4 @@ export.test.results.open.browser=O&pen exported file in browser export.test.results.dialog.title=Export Test Results export.test.results.output.path.empty=Output path is empty export.test.results.output.filename.empty=Output file name is empty +configuration.edit.before.run=Show settings