From 72632db3df8003ddd052bc2d820ebbd034073b0c Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 18 Dec 2020 19:41:44 +0300 Subject: [PATCH] IDEA-256792 New run configuration show red error for Main class comes from libraries (when enabling "Include non-project items") GitOrigin-RevId: e2157ceba45e5e3fc4c461a19629329f71fead3f --- .../application/ApplicationConfigurable.java | 14 ++++++++++---- .../application/JavaApplicationSettingsEditor.java | 3 ++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java index 1783440482e4..2f2c3929a170 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java @@ -104,17 +104,23 @@ public class ApplicationConfigurable extends SettingsEditor(); - myMainClass.setComponent(new EditorTextFieldWithBrowseButton(myProject, true, (declaration, place) -> { + JavaCodeFragment.VisibilityChecker visibilityChecker = getVisibilityChecker(myModuleSelector); + myMainClass.setComponent(new EditorTextFieldWithBrowseButton(myProject, true, visibilityChecker)); + myShortenClasspathModeCombo = new LabeledComponent<>(); + } + + @NotNull + static JavaCodeFragment.VisibilityChecker getVisibilityChecker(ConfigurationModuleSelector selector) { + return (declaration, place) -> { if (declaration instanceof PsiClass) { PsiClass aClass = (PsiClass)declaration; if (ConfigurationUtil.MAIN_CLASS.value(aClass) && PsiMethodUtil.findMainMethod(aClass) != null || - place.getParent() != null && myModuleSelector.findClass(((PsiClass)declaration).getQualifiedName()) != null) { + place.getParent() != null && selector.findClass(((PsiClass)declaration).getQualifiedName()) != null) { return JavaCodeFragment.VisibilityChecker.Visibility.VISIBLE; } } return JavaCodeFragment.VisibilityChecker.Visibility.NOT_VISIBLE; - })); - myShortenClasspathModeCombo = new LabeledComponent<>(); + }; } @Override 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 2a9c664b7984..a7451337cb3d 100644 --- a/java/execution/impl/src/com/intellij/execution/application/JavaApplicationSettingsEditor.java +++ b/java/execution/impl/src/com/intellij/execution/application/JavaApplicationSettingsEditor.java @@ -41,8 +41,9 @@ public final class JavaApplicationSettingsEditor extends JavaSettingsEditorBase< @NotNull private SettingsEditorFragment createMainClass(ModuleClasspathCombo classpathCombo) { + ConfigurationModuleSelector moduleSelector = new ConfigurationModuleSelector(getProject(), classpathCombo); EditorTextField mainClass = ClassEditorField.createClassField(getProject(), () -> classpathCombo.getSelectedModule(), - JavaCodeFragment.VisibilityChecker.PROJECT_SCOPE_VISIBLE, null); + ApplicationConfigurable.getVisibilityChecker(moduleSelector), null); mainClass.setBackground(UIUtil.getTextFieldBackground()); mainClass.setShowPlaceholderWhenFocused(true); CommonParameterFragments.setMonospaced(mainClass);