diff --git a/java/execution/impl/src/com/intellij/execution/application/ClassEditorField.java b/java/execution/impl/src/com/intellij/execution/application/ClassEditorField.java index 8f802d0d56fe..aab5fb99c40c 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ClassEditorField.java +++ b/java/execution/impl/src/com/intellij/execution/application/ClassEditorField.java @@ -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 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 browser = new ClassBrowser.AppClassBrowser(project, moduleSelector) { + if (classBrowser != null) { + classBrowser.setTextAccessor(field); + } + BrowseModuleValueActionListener browser = classBrowser != null ? classBrowser : + new ClassBrowser.AppClassBrowser(project, moduleSelector) { @Override public String getText() { return field.getText(); 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 a42f2ef03bde..12c85a411362 100644 --- a/java/execution/impl/src/com/intellij/execution/application/JavaApplicationSettingsEditor.java +++ b/java/execution/impl/src/com/intellij/execution/application/JavaApplicationSettingsEditor.java @@ -48,7 +48,7 @@ public final class JavaApplicationSettingsEditor extends JavaSettingsEditorBase< @NotNull private SettingsEditorFragment 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"); diff --git a/platform/execution-impl/src/com/intellij/execution/configuration/BrowseModuleValueActionListener.java b/platform/execution-impl/src/com/intellij/execution/configuration/BrowseModuleValueActionListener.java index 565505765f96..01dee7af6622 100644 --- a/platform/execution-impl/src/com/intellij/execution/configuration/BrowseModuleValueActionListener.java +++ b/platform/execution-impl/src/com/intellij/execution/configuration/BrowseModuleValueActionListener.java @@ -13,7 +13,7 @@ import java.awt.event.ActionListener; public abstract class BrowseModuleValueActionListener implements ActionListener { private final Project myProject; - private ComponentWithBrowseButton myField; + private TextAccessor myField; protected BrowseModuleValueActionListener(Project project) { myProject = project; @@ -24,22 +24,26 @@ public abstract class BrowseModuleValueActionListener impl } public JComponent getField() { - return myField; + return (JComponent)myField; } public void setField(@NotNull ComponentWithBrowseButton 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 impl public void actionPerformed(ActionEvent e) { String text = showDialog(); if (text != null) { - ((TextAccessor)myField).setText(text); + myField.setText(text); } } diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java index 952ef7d55d2b..085a3e053900 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java @@ -611,7 +611,7 @@ public class JUnitConfigurable 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; diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitTestKindFragment.java b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitTestKindFragment.java index 6072ca1806ec..14c925c3368f 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitTestKindFragment.java +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitTestKindFragment.java @@ -68,11 +68,9 @@ public class JUnitTestKindFragment extends SettingsEditorFragment[] 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 field.setVisible(false)); myFields[kind].setVisible(true); + if (METHOD == kind) { + myFields[CLASS].setVisible(true); + } fireEditorStateChanged(); }