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

setting the right browser for class

GitOrigin-RevId: 116393318f3ebbe8b7403e5e2ba6e737bcab3712
This commit is contained in:
Dmitry Avdeev
2020-08-06 13:53:38 +00:00
committed by intellij-monorepo-bot
parent 3407ae8a27
commit 48d836a6b8
5 changed files with 31 additions and 21 deletions
@@ -1,6 +1,7 @@
// 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.application;
import com.intellij.execution.configuration.BrowseModuleValueActionListener;
import com.intellij.execution.ui.ClassBrowser;
import com.intellij.icons.AllIcons;
import com.intellij.ide.highlighter.JavaFileType;
@@ -18,6 +19,7 @@ import com.intellij.ui.EditorTextField;
import com.intellij.ui.ExtendableEditorSupport;
import com.intellij.ui.components.fields.ExtendableTextComponent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.ActionEvent;
@@ -28,7 +30,8 @@ public final class ClassEditorField extends EditorTextField {
public static ClassEditorField createClassField(Project project,
Computable<? extends Module> moduleSelector,
JavaCodeFragment.VisibilityChecker visibilityChecker) {
JavaCodeFragment.VisibilityChecker visibilityChecker,
@Nullable BrowseModuleValueActionListener<?> classBrowser) {
PsiElement defaultPackage = JavaPsiFacade.getInstance(project).findPackage("");
JavaCodeFragmentFactory factory = JavaCodeFragmentFactory.getInstance(project);
JavaCodeFragment fragment = factory.createReferenceCodeFragment("", defaultPackage, true, true);
@@ -36,7 +39,11 @@ public final class ClassEditorField extends EditorTextField {
Document document = PsiDocumentManager.getInstance(project).getDocument(fragment);
ClassEditorField field = new ClassEditorField(document, project, JavaFileType.INSTANCE);
ClassBrowser.AppClassBrowser<EditorTextField> browser = new ClassBrowser.AppClassBrowser<EditorTextField>(project, moduleSelector) {
if (classBrowser != null) {
classBrowser.setTextAccessor(field);
}
BrowseModuleValueActionListener<?> browser = classBrowser != null ? classBrowser :
new ClassBrowser.AppClassBrowser<EditorTextField>(project, moduleSelector) {
@Override
public String getText() {
return field.getText();
@@ -48,7 +48,7 @@ public final class JavaApplicationSettingsEditor extends JavaSettingsEditorBase<
@NotNull
private SettingsEditorFragment<ApplicationConfiguration, EditorTextField> createMainClass(ModuleClasspathCombo classpathCombo) {
EditorTextField mainClass = ClassEditorField.createClassField(myProject, () -> classpathCombo.getSelectedModule(),
JavaCodeFragment.VisibilityChecker.PROJECT_SCOPE_VISIBLE);
JavaCodeFragment.VisibilityChecker.PROJECT_SCOPE_VISIBLE, null);
mainClass.setShowPlaceholderWhenFocused(true);
UIUtil.setMonospaced(mainClass);
String placeholder = ExecutionBundle.message("application.configuration.main.class.placeholder");
@@ -13,7 +13,7 @@ import java.awt.event.ActionListener;
public abstract class BrowseModuleValueActionListener<T extends JComponent> implements ActionListener {
private final Project myProject;
private ComponentWithBrowseButton<T> myField;
private TextAccessor myField;
protected BrowseModuleValueActionListener(Project project) {
myProject = project;
@@ -24,22 +24,26 @@ public abstract class BrowseModuleValueActionListener<T extends JComponent> impl
}
public JComponent getField() {
return myField;
return (JComponent)myField;
}
public void setField(@NotNull ComponentWithBrowseButton<T> field) {
myField = field;
myField.addActionListener(this);
myField.setButtonEnabled(!myProject.isDefault());
setTextAccessor((TextAccessor)field);
field.addActionListener(this);
field.setButtonEnabled(!myProject.isDefault());
}
public void setTextAccessor(@NotNull TextAccessor accessor) {
myField = accessor;
}
public String getText() {
return ((TextAccessor)myField).getText();
return myField.getText();
}
public void detach() {
if (myField != null) {
myField.removeActionListener(this);
if (myField instanceof ComponentWithBrowseButton) {
((ComponentWithBrowseButton<?>)myField).removeActionListener(this);
myField = null;
}
}
@@ -48,7 +52,7 @@ public abstract class BrowseModuleValueActionListener<T extends JComponent> impl
public void actionPerformed(ActionEvent e) {
String text = showDialog();
if (text != null) {
((TextAccessor)myField).setText(text);
myField.setText(text);
}
}
@@ -611,7 +611,7 @@ public class JUnitConfigurable<T extends JUnitConfiguration> extends SettingsEdi
private final ConfigurationModuleSelector myModuleSelector;
private final EditorTextFieldWithBrowseButton myPackageTextField;
TestClassBrowser(final Project project, ConfigurationModuleSelector moduleSelector, EditorTextFieldWithBrowseButton packageTextField) {
TestClassBrowser(final Project project, @NotNull ConfigurationModuleSelector moduleSelector, EditorTextFieldWithBrowseButton packageTextField) {
super(project, ExecutionBundle.message("choose.test.class.dialog.title"));
myModuleSelector = moduleSelector;
myPackageTextField = packageTextField;
@@ -68,11 +68,9 @@ public class JUnitTestKindFragment extends SettingsEditorFragment<JUnitConfigura
InsertPathAction.addTo(directoryField.getTextField(), dirFileChooser);
FileChooserFactory.getInstance().installFileCompletion(directoryField.getTextField(), dirFileChooser, true, null);
BrowseModuleValueActionListener<?>[] browsers =
JUnitConfigurable.createBrowsers(project, moduleSelector, packageField, pattern, category, () -> getClassName());
EditorTextField classField = ClassEditorField.createClassField(project, () -> moduleSelector.getModule(),
JUnitConfigurable.createClassVisibilityChecker(
(JUnitConfigurable.TestClassBrowser)browsers[CLASS]));
BrowseModuleValueActionListener<?>[] browsers = JUnitConfigurable.createBrowsers(project, moduleSelector, packageField, pattern, category, () -> getClassName());
JavaCodeFragment.VisibilityChecker classVisibilityChecker = JUnitConfigurable.createClassVisibilityChecker((JUnitConfigurable.TestClassBrowser)browsers[CLASS]);
EditorTextField classField = ClassEditorField.createClassField(project, () -> moduleSelector.getModule(), classVisibilityChecker, browsers[CLASS]);
EditorTextFieldWithBrowseButton methodField = new EditorTextFieldWithBrowseButton(project, true,
JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE,
PlainTextLanguage.INSTANCE.getAssociatedFileType());
@@ -100,10 +98,11 @@ public class JUnitTestKindFragment extends SettingsEditorFragment<JUnitConfigura
private void kindChanged(int kind) {
myTypeChooser.setItem(kind);
for (JComponent field : myFields) {
field.setVisible(false);
}
Arrays.stream(myFields).forEach(field -> field.setVisible(false));
myFields[kind].setVisible(true);
if (METHOD == kind) {
myFields[CLASS].setVisible(true);
}
fireEditorStateChanged();
}