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 extends RunConfiguration> 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