diff --git a/java/execution/impl/src/com/intellij/execution/application/JavaApplicationSettingsEditor.java b/java/execution/impl/src/com/intellij/execution/application/JavaApplicationSettingsEditor.java index c2a2d7ed6624..cb794782958e 100644 --- a/java/execution/impl/src/com/intellij/execution/application/JavaApplicationSettingsEditor.java +++ b/java/execution/impl/src/com/intellij/execution/application/JavaApplicationSettingsEditor.java @@ -2,7 +2,6 @@ package com.intellij.execution.application; import com.intellij.execution.ExecutionBundle; -import com.intellij.execution.JavaRunConfigurationExtensionManager; import com.intellij.execution.ui.*; import com.intellij.openapi.editor.Editor; import com.intellij.ui.EditorTextField; @@ -16,7 +15,7 @@ import static com.intellij.execution.ui.CommandLinePanel.setMinimumWidth; public final class JavaApplicationSettingsEditor extends JavaSettingsEditorBase { public JavaApplicationSettingsEditor(ApplicationConfiguration configuration) { - super(configuration, JavaRunConfigurationExtensionManager.getInstance()); + super(configuration); } @Override diff --git a/java/execution/impl/src/com/intellij/execution/application/JavaSettingsEditorBase.java b/java/execution/impl/src/com/intellij/execution/application/JavaSettingsEditorBase.java index 4294808256c4..95fbb8fa1d86 100644 --- a/java/execution/impl/src/com/intellij/execution/application/JavaSettingsEditorBase.java +++ b/java/execution/impl/src/com/intellij/execution/application/JavaSettingsEditorBase.java @@ -5,7 +5,7 @@ import com.intellij.compiler.options.CompileStepBeforeRun; import com.intellij.diagnostic.logging.LogsFragment; import com.intellij.execution.ExecutionBundle; import com.intellij.execution.JavaRunConfigurationBase; -import com.intellij.execution.configuration.RunConfigurationExtensionsManager; +import com.intellij.execution.JavaRunConfigurationExtensionManager; import com.intellij.execution.ui.*; import com.intellij.ide.macro.MacrosDialog; import com.intellij.openapi.project.Project; @@ -24,8 +24,8 @@ import static com.intellij.openapi.util.text.StringUtil.isNotEmpty; public abstract class JavaSettingsEditorBase extends RunConfigurationFragmentedEditor { protected final Project myProject; - public JavaSettingsEditorBase(T runConfiguration, RunConfigurationExtensionsManager extensionsManager) { - super(runConfiguration, extensionsManager); + public JavaSettingsEditorBase(T runConfiguration) { + super(runConfiguration, JavaRunConfigurationExtensionManager.getInstance()); myProject = runConfiguration.getProject(); } diff --git a/java/execution/impl/src/com/intellij/execution/ui/CommonJavaFragments.java b/java/execution/impl/src/com/intellij/execution/ui/CommonJavaFragments.java index 5a4bd893b57c..90adf69f985b 100644 --- a/java/execution/impl/src/com/intellij/execution/ui/CommonJavaFragments.java +++ b/java/execution/impl/src/com/intellij/execution/ui/CommonJavaFragments.java @@ -15,6 +15,7 @@ import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; @@ -89,8 +90,8 @@ public final class CommonJavaFragments { } public static > SettingsEditorFragment moduleClasspath( - ModuleClasspathCombo.Item option, Predicate getter, BiConsumer setter) { - ModuleClasspathCombo comboBox = new ModuleClasspathCombo(option); + @Nullable ModuleClasspathCombo.Item option, Predicate getter, BiConsumer setter) { + ModuleClasspathCombo comboBox = option == null ? new ModuleClasspathCombo() : new ModuleClasspathCombo(option); String name = ExecutionBundle.message("application.configuration.use.classpath.and.jdk.of.module"); comboBox.getAccessibleContext().setAccessibleName(name); setMinimumWidth(comboBox, 400); @@ -99,16 +100,22 @@ public final class CommonJavaFragments { new SettingsEditorFragment<>("module.classpath", name, ExecutionBundle.message("group.java.options"), comboBox, 10, (s, c) -> { comboBox.reset(s); - option.myOptionValue = getter.test(s); + if (option != null) { + option.myOptionValue = getter.test(s); + } }, (s, c) -> { if (comboBox.isVisible()) { comboBox.applyTo(s); - setter.accept(s, option.myOptionValue); + if (option != null) { + setter.accept(s, option.myOptionValue); + } } else { s.setModule(s.getDefaultModule()); - setter.accept(s, false); + if (option != null) { + setter.accept(s, false); + } } }, s -> s.getDefaultModule() != s.getConfigurationModule().getModule() && diff --git a/java/execution/impl/src/com/intellij/execution/ui/DefaultJreSelector.kt b/java/execution/impl/src/com/intellij/execution/ui/DefaultJreSelector.kt index 4fb8f1d03944..fc2f986cdf43 100644 --- a/java/execution/impl/src/com/intellij/execution/ui/DefaultJreSelector.kt +++ b/java/execution/impl/src/com/intellij/execution/ui/DefaultJreSelector.kt @@ -32,6 +32,10 @@ abstract class DefaultJreSelector { fun fromModuleDependencies(moduleComboBox: ModuleDescriptionsComboBox, productionOnly: Boolean): DefaultJreSelector = SdkFromModuleDependencies(moduleComboBox, ModuleDescriptionsComboBox::getSelectedModule, {productionOnly}) + @JvmStatic + fun fromModuleDependencies(moduleComboBox: ModuleClasspathCombo, productionOnly: Boolean): DefaultJreSelector + = SdkFromModuleDependencies(moduleComboBox, ModuleClasspathCombo::getSelectedModule, {productionOnly}) + @JvmStatic fun fromSourceRootsDependencies(moduleComboBox: ModulesComboBox, classSelector: EditorTextFieldWithBrowseButton): DefaultJreSelector = SdkFromSourceRootDependencies(moduleComboBox, ModulesComboBox::getSelectedModule, classSelector.childComponent) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index feea721c5290..31f36d6c92d0 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -1335,6 +1335,8 @@ ide.require.transaction.for.model.changes.description=Whether write action can o ide.new.run.config=true ide.new.run.config.description=New Run Configuration UI +ide.new.run.config.junit=false +ide.new.run.config.junit.description=New JUnit Configuration UI select.run.configuration.from.context=true select.run.configuration.from.context.description=Select run configuration when run from context (gutter icon, popup menu) run.popup.move.folders.to.top=false diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java index fa2c0e8ba71b..e8138c7282a0 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java @@ -11,6 +11,7 @@ import com.intellij.execution.configuration.EnvironmentVariablesComponent; import com.intellij.execution.configurations.*; import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.junit2.configuration.JUnitConfigurable; +import com.intellij.execution.junit2.configuration.JUnitSettingsEditor; import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.execution.junit2.ui.properties.JUnitConsoleProperties; import com.intellij.execution.runners.ExecutionEnvironment; @@ -30,6 +31,7 @@ import com.intellij.openapi.util.DifferenceFilter; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtilRt; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.util.ClassUtil; @@ -163,6 +165,9 @@ public class JUnitConfiguration extends JavaTestConfigurationWithDiscoverySuppor @Override @NotNull public SettingsEditor getConfigurationEditor() { + if (Registry.is("ide.new.run.config.junit", false)) { + return new JUnitSettingsEditor(this); + } SettingsEditorGroup group = new SettingsEditorGroup<>(); group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new JUnitConfigurable(getProject())); JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group); diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitSettingsEditor.java b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitSettingsEditor.java new file mode 100644 index 000000000000..214ab2aed67a --- /dev/null +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitSettingsEditor.java @@ -0,0 +1,31 @@ +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.execution.junit2.configuration; + +import com.intellij.execution.application.JavaSettingsEditorBase; +import com.intellij.execution.junit.JUnitConfiguration; +import com.intellij.execution.ui.*; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class JUnitSettingsEditor extends JavaSettingsEditorBase { + + public JUnitSettingsEditor(JUnitConfiguration runConfiguration) { + super(runConfiguration); + } + + @Override + protected @NotNull SettingsEditorFragment createClasspathCombo() { + return CommonJavaFragments.moduleClasspath(null, null, null); + } + + @Override + protected void customizeFragments(List> fragments, + ModuleClasspathCombo classpathCombo, + CommonParameterFragments commonParameterFragments) { + DefaultJreSelector jreSelector = DefaultJreSelector.fromModuleDependencies(classpathCombo, false); + SettingsEditorFragment jrePath = CommonJavaFragments.createJrePath(jreSelector); + fragments.add(jrePath); + fragments.add(createShortenClasspath(classpathCombo, jrePath)); + } +}