diff --git a/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java b/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java
index 86d339aee6cb..bcaf1b8a94a4 100644
--- a/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java
+++ b/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java
@@ -139,7 +139,7 @@ public class JavaParametersUtil {
parameters.configureByProject(project, classPathType, createProjectJdk(project, jreHome));
}
- private static Sdk createModuleJdk(final Module module, boolean productionOnly, @Nullable String jreHome) throws CantRunException {
+ public static Sdk createModuleJdk(final Module module, boolean productionOnly, @Nullable String jreHome) throws CantRunException {
return jreHome == null ? JavaParameters.getValidJdkToRunModule(module, productionOnly) : createAlternativeJdk(jreHome);
}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.form b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.form
index c88ca66580fe..c082d99f08b8 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.form
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.form
@@ -1,104 +1,63 @@
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java
index 1ed48a1cbe99..423a55b1ead0 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java
@@ -17,116 +17,123 @@
package org.jetbrains.plugins.groovy.runner;
import com.intellij.application.options.ModulesComboBox;
-import com.intellij.execution.configuration.EnvironmentVariablesComponent;
-import com.intellij.ide.util.BrowseFilesListener;
-import com.intellij.openapi.fileChooser.FileChooserDescriptor;
+import com.intellij.execution.ui.CommonJavaParametersPanel;
+import com.intellij.execution.ui.DefaultJreSelector.SdkFromModuleDependencies;
+import com.intellij.execution.ui.JrePathEditor;
+import com.intellij.execution.util.ScriptFileUtil;
+import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SettingsEditor;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.ProjectFileIndex;
+import com.intellij.openapi.roots.ProjectRootManager;
+import com.intellij.openapi.ui.LabeledComponent;
+import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.ui.FieldPanel;
+import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.PanelWithAnchor;
-import com.intellij.ui.RawCommandLineEditor;
-import com.intellij.ui.components.JBLabel;
+import com.intellij.util.ui.UIUtil;
+import kotlin.jvm.functions.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.GroovyFileType;
import javax.swing.*;
-import java.awt.*;
+import javax.swing.event.DocumentEvent;
public class GroovyRunConfigurationEditor extends SettingsEditor implements PanelWithAnchor {
- private ModulesComboBox myModulesBox;
+
private JPanel myMainPanel;
- private RawCommandLineEditor myVMParameters;
- private RawCommandLineEditor myParameters;
- private JPanel scriptPathPanel;
- private JPanel workDirPanel;
+
+ private LabeledComponent myScriptPathComponent;
+ private CommonJavaParametersPanel myCommonJavaParametersPanel;
+
+ private LabeledComponent myModulesComboBoxComponent;
+ private JrePathEditor myJrePathEditor;
+
private JCheckBox myDebugCB;
- private EnvironmentVariablesComponent myEnvVariables;
- private JBLabel myScriptParametersLabel;
private JCheckBox myAddClasspathCB;
- private final JTextField scriptPathField;
- private final JTextField workDirField;
- private JComponent anchor;
- public GroovyRunConfigurationEditor() {
+ private JComponent myAnchor;
- scriptPathField = new JTextField();
- final BrowseFilesListener scriptBrowseListener = new BrowseFilesListener(scriptPathField,
- "Script Path",
- "Specify path to script",
- new FileChooserDescriptor(true, false, false, false, false, false) {
- @Override
- public boolean isFileSelectable(VirtualFile file) {
- return file.getFileType() == GroovyFileType.GROOVY_FILE_TYPE;
+ public GroovyRunConfigurationEditor(@NotNull Project project) {
+ final TextFieldWithBrowseButton scriptPath = myScriptPathComponent.getComponent();
+ scriptPath.addBrowseFolderListener(
+ "Script Path", "Specify path to script", project,
+ FileChooserDescriptorFactory.createSingleFileDescriptor(GroovyFileType.GROOVY_FILE_TYPE)
+ );
+
+ final ModulesComboBox modulesComboBox = myModulesComboBoxComponent.getComponent();
+ modulesComboBox.addActionListener(e -> myCommonJavaParametersPanel.setModuleContext(modulesComboBox.getSelectedModule()));
+ ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
+ Function0 productionOnly = () -> {
+ VirtualFile script = ScriptFileUtil.findScriptFileByPath(scriptPath.getText());
+ return script != null && !fileIndex.isInTestSourceContent(script);
+ };
+ myJrePathEditor.setDefaultJreSelector(new SdkFromModuleDependencies(modulesComboBox, productionOnly) {
+ @Override
+ public void addChangeListener(@NotNull Runnable listener) {
+ super.addChangeListener(listener);
+ scriptPath.getChildComponent().getDocument().addDocumentListener(
+ new DocumentAdapter() {
+ @Override
+ protected void textChanged(DocumentEvent e) {
+ listener.run();
+ }
}
- });
- final FieldPanel scriptFieldPanel = new FieldPanel(scriptPathField, null, null, scriptBrowseListener, null);
- scriptPathPanel.setLayout(new BorderLayout());
- scriptPathPanel.add(scriptFieldPanel, BorderLayout.CENTER);
-
- workDirField = new JTextField();
- final BrowseFilesListener workDirBrowseFilesListener = new BrowseFilesListener(workDirField,
- "Working directory",
- "Specify working directory",
- BrowseFilesListener.SINGLE_DIRECTORY_DESCRIPTOR);
- final FieldPanel workDirFieldPanel = new FieldPanel(workDirField, null, null, workDirBrowseFilesListener, null);
- workDirPanel.setLayout(new BorderLayout());
- workDirPanel.add(workDirFieldPanel, BorderLayout.CENTER);
-
- setAnchor(myEnvVariables.getLabel());
+ );
+ }
+ });
+ myAnchor = UIUtil.mergeComponentsWithAnchor(
+ myScriptPathComponent,
+ myCommonJavaParametersPanel,
+ myModulesComboBoxComponent,
+ myJrePathEditor
+ );
}
@Override
public void resetEditorFrom(@NotNull GroovyScriptRunConfiguration configuration) {
- myVMParameters.setDialogCaption("VM Options");
- myVMParameters.setText(configuration.getVMParameters());
+ myScriptPathComponent.getComponent().setText(configuration.getScriptPath());
+ myCommonJavaParametersPanel.reset(configuration);
- myParameters.setDialogCaption("Script Parameters");
- myParameters.setText(configuration.getProgramParameters());
+ myModulesComboBoxComponent.getComponent().setModules(configuration.getValidModules());
+ myModulesComboBoxComponent.getComponent().setSelectedModule(configuration.getConfigurationModule().getModule());
+ myJrePathEditor.setPathOrName(configuration.getAlternativeJrePath(), configuration.isAlternativeJrePathEnabled());
- scriptPathField.setText(configuration.getScriptPath());
- workDirField.setText(configuration.getWorkingDirectory());
-
- myDebugCB.setEnabled(true);
myDebugCB.setSelected(configuration.isDebugEnabled());
-
myAddClasspathCB.setSelected(configuration.isAddClasspathToTheRunner());
-
- myModulesBox.setModules(configuration.getValidModules());
- myModulesBox.setSelectedModule(configuration.getConfigurationModule().getModule());
-
- myEnvVariables.setEnvs(configuration.getEnvs());
}
@Override
public void applyEditorTo(@NotNull GroovyScriptRunConfiguration configuration) throws ConfigurationException {
- configuration.setModule(myModulesBox.getSelectedModule());
- configuration.setVMParameters(myVMParameters.getText());
+ configuration.setScriptPath(myScriptPathComponent.getComponent().getText().trim());
+ myCommonJavaParametersPanel.applyTo(configuration);
+
+ configuration.setModule(myModulesComboBoxComponent.getComponent().getSelectedModule());
+ configuration.setAlternativeJrePathEnabled(myJrePathEditor.isAlternativeJreSelected());
+ configuration.setAlternativeJrePath(myJrePathEditor.getJrePathOrName());
+
configuration.setDebugEnabled(myDebugCB.isSelected());
configuration.setAddClasspathToTheRunner(myAddClasspathCB.isSelected());
- configuration.setProgramParameters(myParameters.getText());
- configuration.setScriptPath(scriptPathField.getText().trim());
- configuration.setWorkingDirectory(workDirField.getText().trim());
- configuration.setEnvs(myEnvVariables.getEnvs());
}
@Override
@NotNull
public JComponent createEditor() {
- myDebugCB.setEnabled(true);
- myDebugCB.setSelected(false);
return myMainPanel;
}
@Override
public JComponent getAnchor() {
- return anchor;
+ return myAnchor;
}
@Override
public void setAnchor(JComponent anchor) {
- this.anchor = anchor;
- myScriptParametersLabel.setAnchor(anchor);
- myEnvVariables.setAnchor(anchor);
+ myAnchor = anchor;
+ myScriptPathComponent.setAnchor(anchor);
+ myCommonJavaParametersPanel.setAnchor(anchor);
+ myModulesComboBoxComponent.setAnchor(anchor);
+ myJrePathEditor.setAnchor(anchor);
}
}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java
index ee82e7356c51..ef5c33636332 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java
@@ -24,6 +24,7 @@ import com.intellij.execution.process.OSProcessHandler;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.runners.ExecutionEnvironment;
+import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.execution.util.ProgramParametersUtil;
import com.intellij.execution.util.ScriptFileUtil;
import com.intellij.openapi.application.ApplicationManager;
@@ -38,6 +39,7 @@ import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.JDOMExternalizer;
import com.intellij.openapi.util.WriteExternalException;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
@@ -82,6 +84,9 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration envs = new LinkedHashMap<>();
public boolean passParentEnv = true;
+ private boolean myAlternativeJrePathEnabled;
+ private @Nullable String myAlternativeJrePath;
+
public GroovyScriptRunConfiguration(final String name, final Project project, final ConfigurationFactory factory) {
super(name, new RunConfigurationModule(project), factory);
workDir = PathUtil.getLocalPath(project.getBaseDir());
@@ -142,6 +147,9 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration getConfigurationEditor() {
- return new GroovyRunConfigurationEditor();
+ return new GroovyRunConfigurationEditor(getProject());
}
@Override
@@ -297,6 +317,7 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration