From 1d000d36c6145fc856178d2a999641b3862e44bc Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 14 Apr 2011 16:46:25 +0200 Subject: [PATCH] a little bit of a run configuration --- idea/src/META-INF/plugin.xml | 1 + .../jet/run/JetRunConfiguration.java | 85 +++++++++++++++++++ .../jet/run/JetRunConfigurationEditor.form | 42 +++++++++ .../jet/run/JetRunConfigurationEditor.java | 49 +++++++++++ .../jet/run/JetRunConfigurationType.java | 27 ++++++ 5 files changed, 204 insertions(+) create mode 100644 idea/src/org/jetbrains/jet/run/JetRunConfiguration.java create mode 100644 idea/src/org/jetbrains/jet/run/JetRunConfigurationEditor.form create mode 100644 idea/src/org/jetbrains/jet/run/JetRunConfigurationEditor.java create mode 100644 idea/src/org/jetbrains/jet/run/JetRunConfigurationType.java diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 66c13c395b7..504a55ede81 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -26,5 +26,6 @@ + diff --git a/idea/src/org/jetbrains/jet/run/JetRunConfiguration.java b/idea/src/org/jetbrains/jet/run/JetRunConfiguration.java new file mode 100644 index 00000000000..6dbd0b88122 --- /dev/null +++ b/idea/src/org/jetbrains/jet/run/JetRunConfiguration.java @@ -0,0 +1,85 @@ +package org.jetbrains.jet.run; + +import com.intellij.execution.ExecutionException; +import com.intellij.execution.Executor; +import com.intellij.execution.RunConfigurationExtension; +import com.intellij.execution.configurations.*; +import com.intellij.execution.filters.TextConsoleBuilderFactory; +import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.util.JavaParametersUtil; +import com.intellij.openapi.components.PathMacroManager; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.options.SettingsEditor; +import com.intellij.openapi.util.DefaultJDOMExternalizer; +import com.intellij.openapi.util.InvalidDataException; +import com.intellij.openapi.util.WriteExternalException; +import org.jdom.Element; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.Collection; + +/** + * @author yole + */ +public class JetRunConfiguration extends ModuleBasedConfiguration { + public String MAIN_CLASS_NAME; + + public JetRunConfiguration(String name, RunConfigurationModule runConfigurationModule, ConfigurationFactory factory) { + super(name, runConfigurationModule, factory); + runConfigurationModule.init(); + } + + @Override + public Collection getValidModules() { + return Arrays.asList(ModuleManager.getInstance(getProject()).getModules()); + } + + @Override + protected ModuleBasedConfiguration createInstance() { + return new JetRunConfiguration(getName(), getConfigurationModule(), getFactory()); + } + + @Override + public SettingsEditor getConfigurationEditor() { + return new JetRunConfigurationEditor(getProject()); + } + + public void readExternal(final Element element) throws InvalidDataException { + PathMacroManager.getInstance(getProject()).expandPaths(element); + super.readExternal(element); + RunConfigurationExtension.readSettings(this, element); + DefaultJDOMExternalizer.readExternal(this, element); + readModule(element); + } + + public void writeExternal(final Element element) throws WriteExternalException { + super.writeExternal(element); + RunConfigurationExtension.writeSettings(this, element); + DefaultJDOMExternalizer.writeExternal(this, element); + writeModule(element); + PathMacroManager.getInstance(getProject()).collapsePathsRecursively(element); + } + @Override + public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment executionEnvironment) throws ExecutionException { + final JavaCommandLineState state = new MyJavaCommandLineState(executionEnvironment); + state.setConsoleBuilder(TextConsoleBuilderFactory.getInstance().createBuilder(getProject())); + return state; + } + + private class MyJavaCommandLineState extends JavaCommandLineState { + protected MyJavaCommandLineState(@NotNull ExecutionEnvironment environment) { + super(environment); + } + + @Override + protected JavaParameters createJavaParameters() throws ExecutionException { + final JavaParameters params = new JavaParameters(); + final int classPathType = JavaParametersUtil.getClasspathType(getConfigurationModule(), MAIN_CLASS_NAME, false); + JavaParametersUtil.configureModule(getConfigurationModule(), params, classPathType, null); + params.setMainClass(MAIN_CLASS_NAME); + return params; + } + } +} diff --git a/idea/src/org/jetbrains/jet/run/JetRunConfigurationEditor.form b/idea/src/org/jetbrains/jet/run/JetRunConfigurationEditor.form new file mode 100644 index 00000000000..8383144f077 --- /dev/null +++ b/idea/src/org/jetbrains/jet/run/JetRunConfigurationEditor.form @@ -0,0 +1,42 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/idea/src/org/jetbrains/jet/run/JetRunConfigurationEditor.java b/idea/src/org/jetbrains/jet/run/JetRunConfigurationEditor.java new file mode 100644 index 00000000000..e26437dd221 --- /dev/null +++ b/idea/src/org/jetbrains/jet/run/JetRunConfigurationEditor.java @@ -0,0 +1,49 @@ +package org.jetbrains.jet.run; + +import com.intellij.execution.ui.ConfigurationModuleSelector; +import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.options.SettingsEditor; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.LabeledComponent; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +/** + * @author yole + */ +public class JetRunConfigurationEditor extends SettingsEditor { + private JPanel myMainPanel; + private JTextField myMainClassField; + private JPanel myModuleChooserHolder; + private ConfigurationModuleSelector myModuleSelector; + + public JetRunConfigurationEditor(final Project project) { + LabeledComponent moduleChooser = LabeledComponent.create(new JComboBox(), "Use classpath and JDK of module:"); + myModuleChooserHolder.add(moduleChooser, BorderLayout.CENTER); + myModuleSelector = new ConfigurationModuleSelector(project, moduleChooser.getComponent()); + } + + @Override + protected void resetEditorFrom(JetRunConfiguration configuration) { + myMainClassField.setText(configuration.MAIN_CLASS_NAME); + myModuleSelector.reset(configuration); + } + + @Override + protected void applyEditorTo(JetRunConfiguration configuration) throws ConfigurationException { + myModuleSelector.applyTo(configuration); + configuration.MAIN_CLASS_NAME = myMainClassField.getText(); + } + + @NotNull + @Override + protected JComponent createEditor() { + return myMainPanel; + } + + @Override + protected void disposeEditor() { + } +} diff --git a/idea/src/org/jetbrains/jet/run/JetRunConfigurationType.java b/idea/src/org/jetbrains/jet/run/JetRunConfigurationType.java new file mode 100644 index 00000000000..52c8676155e --- /dev/null +++ b/idea/src/org/jetbrains/jet/run/JetRunConfigurationType.java @@ -0,0 +1,27 @@ +package org.jetbrains.jet.run; + +import com.intellij.execution.configurations.*; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.JetFileType; + +/** + * @author yole + */ +public class JetRunConfigurationType extends ConfigurationTypeBase { + public JetRunConfigurationType() { + super("JetRunConfigurationType", "Jet", "Jet", JetFileType.INSTANCE.getIcon()); + addFactory(new JetRunConfigurationFactory(this)); + } + + private static class JetRunConfigurationFactory extends ConfigurationFactory { + protected JetRunConfigurationFactory(@NotNull ConfigurationType type) { + super(type); + } + + @Override + public RunConfiguration createTemplateConfiguration(Project project) { + return new JetRunConfiguration("", new RunConfigurationModule(project), this); + } + } +} \ No newline at end of file