a little bit of a run configuration

This commit is contained in:
Dmitry Jemerov
2011-04-14 16:46:25 +02:00
parent 078347b1f8
commit 1d000d36c6
5 changed files with 204 additions and 0 deletions
+1
View File
@@ -26,5 +26,6 @@
<annotator language="jet" implementationClass="org.jetbrains.jet.lang.annotations.LabelsAnnotator"/>
<annotator language="jet" implementationClass="org.jetbrains.jet.lang.annotations.JetPsiChecker"/>
<documentationProvider implementation="org.jetbrains.jet.plugin.JetQuickDocumentationProvider"/>
<configurationType implementation="org.jetbrains.jet.run.JetRunConfigurationType"/>
</extensions>
</idea-plugin>
@@ -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<RunConfigurationModule> {
public String MAIN_CLASS_NAME;
public JetRunConfiguration(String name, RunConfigurationModule runConfigurationModule, ConfigurationFactory factory) {
super(name, runConfigurationModule, factory);
runConfigurationModule.init();
}
@Override
public Collection<Module> 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;
}
}
}
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.jet.run.JetRunConfigurationEditor">
<grid id="27dc6" binding="myMainPanel" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="500" height="400"/>
</constraints>
<properties/>
<border type="none"/>
<children>
<component id="6e659" class="javax.swing.JLabel">
<constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Main class:"/>
</properties>
</component>
<vspacer id="f22cb">
<constraints>
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
</constraints>
</vspacer>
<component id="1378e" class="javax.swing.JTextField" binding="myMainClassField">
<constraints>
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
<properties/>
</component>
<grid id="53a18" binding="myModuleChooserHolder" layout-manager="BorderLayout" hgap="0" vgap="0">
<constraints>
<grid row="1" column="0" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="none"/>
<children/>
</grid>
</children>
</grid>
</form>
@@ -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<JetRunConfiguration> {
private JPanel myMainPanel;
private JTextField myMainClassField;
private JPanel myModuleChooserHolder;
private ConfigurationModuleSelector myModuleSelector;
public JetRunConfigurationEditor(final Project project) {
LabeledComponent<JComboBox> 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() {
}
}
@@ -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);
}
}
}