IDEA-244301 [JUnit] Implement new UI for editing run configuration settings

JUnitSettingsEditor initial

GitOrigin-RevId: 17677b69082fb558a001f9fd3e9d73f36455533c
This commit is contained in:
Dmitry Avdeev
2020-07-31 09:41:31 +00:00
committed by intellij-monorepo-bot
parent 81fba80b5e
commit 85b6a868f2
7 changed files with 58 additions and 10 deletions
@@ -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<ApplicationConfiguration> {
public JavaApplicationSettingsEditor(ApplicationConfiguration configuration) {
super(configuration, JavaRunConfigurationExtensionManager.getInstance());
super(configuration);
}
@Override
@@ -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<T extends JavaRunConfigurationBase> extends RunConfigurationFragmentedEditor<T> {
protected final Project myProject;
public JavaSettingsEditorBase(T runConfiguration, RunConfigurationExtensionsManager extensionsManager) {
super(runConfiguration, extensionsManager);
public JavaSettingsEditorBase(T runConfiguration) {
super(runConfiguration, JavaRunConfigurationExtensionManager.getInstance());
myProject = runConfiguration.getProject();
}
@@ -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 <S extends ModuleBasedConfiguration<?,?>> SettingsEditorFragment<S, ModuleClasspathCombo> moduleClasspath(
ModuleClasspathCombo.Item option, Predicate<S> getter, BiConsumer<S, Boolean> setter) {
ModuleClasspathCombo comboBox = new ModuleClasspathCombo(option);
@Nullable ModuleClasspathCombo.Item option, Predicate<S> getter, BiConsumer<S, Boolean> 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() &&
@@ -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)
@@ -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
@@ -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<? extends RunConfiguration> getConfigurationEditor() {
if (Registry.is("ide.new.run.config.junit", false)) {
return new JUnitSettingsEditor(this);
}
SettingsEditorGroup<JUnitConfiguration> group = new SettingsEditorGroup<>();
group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new JUnitConfigurable(getProject()));
JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group);
@@ -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<JUnitConfiguration> {
public JUnitSettingsEditor(JUnitConfiguration runConfiguration) {
super(runConfiguration);
}
@Override
protected @NotNull SettingsEditorFragment<JUnitConfiguration, ModuleClasspathCombo> createClasspathCombo() {
return CommonJavaFragments.moduleClasspath(null, null, null);
}
@Override
protected void customizeFragments(List<SettingsEditorFragment<JUnitConfiguration, ?>> fragments,
ModuleClasspathCombo classpathCombo,
CommonParameterFragments<JUnitConfiguration> commonParameterFragments) {
DefaultJreSelector jreSelector = DefaultJreSelector.fromModuleDependencies(classpathCombo, false);
SettingsEditorFragment<JUnitConfiguration, JrePathEditor> jrePath = CommonJavaFragments.createJrePath(jreSelector);
fragments.add(jrePath);
fragments.add(createShortenClasspath(classpathCombo, jrePath));
}
}