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 eb0142ac4541..de4ea45e8a03 100644 --- a/java/java-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerImpl.java @@ -24,6 +24,8 @@ */ package com.intellij.codeInspection.ex; +import com.intellij.codeInsight.AnnotationTargetUtil; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.codeInspection.util.SpecialAnnotationsUtil; import com.intellij.openapi.components.PersistentStateComponent; @@ -33,6 +35,9 @@ import com.intellij.openapi.project.ProjectUtil; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.VerticalFlowLayout; +import com.intellij.openapi.util.Condition; +import com.intellij.psi.PsiAnnotation; +import com.intellij.psi.PsiClass; import org.jdom.Element; import org.jetbrains.annotations.Nullable; @@ -42,6 +47,7 @@ import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; @State(name = "EntryPointsManager") public class EntryPointsManagerImpl extends EntryPointsManagerBase implements PersistentStateComponent { @@ -55,7 +61,11 @@ public class EntryPointsManagerImpl extends EntryPointsManagerBase implements Pe final List writeList = new ArrayList<>(myWriteAnnotations); final JPanel listPanel = SpecialAnnotationsUtil.createSpecialAnnotationsListControl(list, "Mark as entry point if annotated by", true); - final JPanel writtenAnnotationsPanel = SpecialAnnotationsUtil.createSpecialAnnotationsListControl(writeList, "Mark field as implicitly written if annotated by", false); + Condition applicableToField = psiClass -> { + Set annotationTargets = AnnotationTargetUtil.getAnnotationTargets(psiClass); + return annotationTargets != null && annotationTargets.contains(PsiAnnotation.TargetType.FIELD); + }; + final JPanel writtenAnnotationsPanel = SpecialAnnotationsUtil.createSpecialAnnotationsListControl(writeList, "Mark field as implicitly written if annotated by", false, applicableToField); new DialogWrapper(myProject) { { init(); diff --git a/java/java-impl/src/com/intellij/codeInspection/util/SpecialAnnotationsUtil.java b/java/java-impl/src/com/intellij/codeInspection/util/SpecialAnnotationsUtil.java index 8d5805ebaa02..ccc0845ec42f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/util/SpecialAnnotationsUtil.java +++ b/java/java-impl/src/com/intellij/codeInspection/util/SpecialAnnotationsUtil.java @@ -24,24 +24,24 @@ import com.intellij.ide.util.TreeClassChooser; import com.intellij.ide.util.TreeClassChooserFactory; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.util.Condition; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.ui.*; import com.intellij.ui.components.JBList; import com.intellij.util.IconUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.Predicate; import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import java.awt.*; -import java.util.Comparator; import java.util.List; /** @@ -55,6 +55,13 @@ public class SpecialAnnotationsUtil { public static JPanel createSpecialAnnotationsListControl(final List list, final String borderTitle, final boolean acceptPatterns) { + return createSpecialAnnotationsListControl(list, borderTitle, acceptPatterns, aClass -> aClass.isAnnotationType()); + } + + public static JPanel createSpecialAnnotationsListControl(final List list, + final String borderTitle, + final boolean acceptPatterns, + final Condition isApplicable) { final SortedListModel listModel = new SortedListModel<>((o1, o2) -> o1.compareTo(o2)); final JList injectionList = new JBList(listModel); for (String s : list) { @@ -96,7 +103,7 @@ public class SpecialAnnotationsUtil { GlobalSearchScope.allScope(project), new ClassFilter() { @Override public boolean isAccepted(PsiClass aClass) { - return aClass.isAnnotationType(); + return isApplicable.value(aClass); } }, null); chooser.showDialog();