diff --git a/java/java-impl/src/com/intellij/codeInsight/options/JavaInspectionButtons.java b/java/java-impl/src/com/intellij/codeInsight/options/JavaInspectionButtons.java index 43c2a9fd75a7..4e6098eb1fa8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/options/JavaInspectionButtons.java +++ b/java/java-impl/src/com/intellij/codeInsight/options/JavaInspectionButtons.java @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInsight.options; import com.intellij.codeInsight.NullableNotNullDialog; @@ -22,6 +22,7 @@ public class JavaInspectionButtons extends CustomComponentExtensionWithSwingRend case NULLABILITY_ANNOTATIONS -> NullableNotNullDialog.createConfigureAnnotationsButton(parent); case ENTRY_POINT_CODE_PATTERNS -> EntryPointsManagerImpl.createConfigureClassPatternsButton(); case ENTRY_POINT_ANNOTATIONS -> EntryPointsManagerImpl.createConfigureAnnotationsButton(); + case IMPLICIT_WRITE_ANNOTATIONS -> EntryPointsManagerImpl.createConfigureAnnotationsButton(true); case DEPENDENCY_CONFIGURATION -> DependencyConfigurable.getConfigureButton(); }; } @@ -39,7 +40,14 @@ public class JavaInspectionButtons extends CustomComponentExtensionWithSwingRend public enum ButtonKind { NULLABILITY_ANNOTATIONS, ENTRY_POINT_CODE_PATTERNS, + /** + * Entry point annotations + implicit write annotations + */ ENTRY_POINT_ANNOTATIONS, + /** + * Implicit write annotations only + */ + IMPLICIT_WRITE_ANNOTATIONS, DEPENDENCY_CONFIGURATION } } diff --git a/java/java-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerImpl.java b/java/java-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerImpl.java index e9e58151f3ea..ad1c0ebb1332 100644 --- a/java/java-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerImpl.java @@ -1,4 +1,4 @@ -// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInspection.ex; import com.intellij.codeInsight.AnnotationTargetUtil; @@ -34,11 +34,22 @@ public class EntryPointsManagerImpl extends EntryPointsManagerBase implements Pe @Override public void configureAnnotations() { + configureAnnotations(false); + } + + @Override + public void configureAnnotations(boolean implicitWritesOnly) { final List list = new ArrayList<>(ADDITIONAL_ANNOTATIONS); final List writeList = new ArrayList<>(myWriteAnnotations); - final JPanel listPanel = SpecialAnnotationsUtil.createSpecialAnnotationsListControl( - list, JavaBundle.message("separator.mark.as.entry.point.if.annotated.by"), true); + final JPanel listPanel; + if (implicitWritesOnly) { + listPanel = null; + } + else { + listPanel = SpecialAnnotationsUtil.createSpecialAnnotationsListControl( + list, JavaBundle.message("separator.mark.as.entry.point.if.annotated.by"), true); + } Predicate applicableToField = psiClass -> { Set annotationTargets = AnnotationTargetUtil.getAnnotationTargets(psiClass); return annotationTargets != null && annotationTargets.contains(PsiAnnotation.TargetType.FIELD); @@ -57,8 +68,10 @@ public class EntryPointsManagerImpl extends EntryPointsManagerBase implements Pe final var constraints = new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, JBInsets.emptyInsets(), 0, 0); - panel.add(listPanel, constraints); - constraints.insets.top = 13; + if (listPanel != null) { + panel.add(listPanel, constraints); + constraints.insets.top = 13; + } panel.add(writtenAnnotationsPanel, constraints); return panel; } @@ -78,11 +91,15 @@ public class EntryPointsManagerImpl extends EntryPointsManagerBase implements Pe } public static JButton createConfigureAnnotationsButton() { + return createConfigureAnnotationsButton(false); + } + + public static JButton createConfigureAnnotationsButton(boolean implicitWritesOnly) { final JButton configureAnnotations = new JButton(JavaBundle.message("button.annotations")); configureAnnotations.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - getInstance(ProjectUtil.guessCurrentProject(configureAnnotations)).configureAnnotations(); + getInstance(ProjectUtil.guessCurrentProject(configureAnnotations)).configureAnnotations(implicitWritesOnly); } }); return configureAnnotations; diff --git a/platform/analysis-api/src/com/intellij/codeInspection/ex/EntryPointsManager.java b/platform/analysis-api/src/com/intellij/codeInspection/ex/EntryPointsManager.java index 3c0becc1234a..b95f857f6412 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/ex/EntryPointsManager.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/ex/EntryPointsManager.java @@ -1,4 +1,4 @@ -// Copyright 2000-2021 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. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. /* * User: anna @@ -29,8 +29,19 @@ public abstract class EntryPointsManager implements Disposable { public abstract boolean isAddNonJavaEntries(); + /** + * Show UI to configure entry points and implicitly written field annotations, if applicable + */ public abstract void configureAnnotations(); + /** + * Show UI to configure entry points annotations, if applicable + * @param implicitWritesOnly whether to configure implicitly written fields only (no entry points) + */ + public void configureAnnotations(boolean implicitWritesOnly) { + configureAnnotations(); + } + public abstract boolean isEntryPoint(@NotNull PsiElement element); /** diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java index 52fb6d628464..b880261f632c 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java @@ -57,7 +57,7 @@ public class FieldMayBeFinalInspection extends BaseInspection implements Cleanup @Override public @NotNull OptPane getOptionsPane() { - return pane(JavaInspectionControls.button(JavaInspectionButtons.ButtonKind.ENTRY_POINT_ANNOTATIONS)); + return pane(JavaInspectionControls.button(JavaInspectionButtons.ButtonKind.IMPLICIT_WRITE_ANNOTATIONS)); } @Override