AppCode:Run Configurations: executable target support (OC-3083)

AppCode:Instruments: refactored runner, now uses same base as a normal runner, tests support (OC-2373)
This commit is contained in:
Anton Makeev
2012-07-08 12:29:43 +02:00
parent 4f3c46baec
commit f02566b28a
7 changed files with 30 additions and 15 deletions
@@ -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;
}
@@ -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 {
@@ -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);
}
@@ -217,7 +217,7 @@ class RunConfigurable extends BaseConfigurable {
final Object userObject = node.getUserObject();
if (userObject instanceof RunnerAndConfigurationSettingsImpl) {
final SingleConfigurationConfigurable<RunConfiguration> 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<RunConfiguration> createNewConfiguration(final RunnerAndConfigurationSettings settings, final DefaultMutableTreeNode node) {
final SingleConfigurationConfigurable<RunConfiguration> configurationConfigurable =
SingleConfigurationConfigurable.editSettings(settings);
SingleConfigurationConfigurable.editSettings(settings, null);
installUpdateListeners(configurationConfigurable);
DefaultMutableTreeNode nodeToAdd = new DefaultMutableTreeNode(configurationConfigurable);
node.add(nodeToAdd);
@@ -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<RunConfiguration> configurable = SingleConfigurationConfigurable.editSettings(configuration);
public static boolean editConfiguration(final Project project, final RunnerAndConfigurationSettings configuration, final String title, @Nullable final Executor executor) {
final SingleConfigurationConfigurable<RunConfiguration> 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());
}
};
@@ -292,6 +292,9 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
runConfigurationBase.checkRunnerSettings(runner, myRunnerSettings.get(runner), myConfigurationPerRunnerSettings.get(runner));
}
}
if (executor != null) {
runConfigurationBase.checkSettingsBeforeRun();
}
}
}
@@ -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<Config extends RunConfigurati
extends SettingsEditorConfigurable<RunnerAndConfigurationSettings> {
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<Config extends RunConfigurati
private final Icon myIcon;
private final boolean myBrokenConfiguration;
private SingleConfigurationConfigurable(RunnerAndConfigurationSettings settings) {
private SingleConfigurationConfigurable(RunnerAndConfigurationSettings settings, @Nullable Executor executor) {
super(new ConfigurationSettingsEditorWrapper(settings), settings);
myExecutor = executor;
final Config configuration = (Config)getSettings().getConfiguration();
myDisplayName = getSettings().getName();
@@ -73,15 +78,18 @@ public final class SingleConfigurationConfigurable<Config extends RunConfigurati
});
}
public static <Config extends RunConfiguration> SingleConfigurationConfigurable<Config> editSettings(RunnerAndConfigurationSettings settings) {
SingleConfigurationConfigurable<Config> configurable = new SingleConfigurationConfigurable<Config>(settings);
public static <Config extends RunConfiguration> SingleConfigurationConfigurable<Config> editSettings(RunnerAndConfigurationSettings settings,
@Nullable Executor executor) {
SingleConfigurationConfigurable<Config> configurable = new SingleConfigurationConfigurable<Config>(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<Config extends RunConfigurati
RunnerAndConfigurationSettings snapshot = getSnapshot();
if (snapshot != null) {
snapshot.setName(getNameText());
snapshot.checkSettings();
snapshot.checkSettings(myExecutor);
for (ProgramRunner runner : RunnerRegistry.getInstance().getRegisteredRunners()) {
for (Executor executor : ExecutorRegistry.getInstance().getRegisteredExecutors()) {
if (runner.canRun(executor.getId(), snapshot.getConfiguration())) {