diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/ExtendsAnnotationInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/ExtendsAnnotationInspection.java index 9b62bb265846..1911b9e7a87e 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/ExtendsAnnotationInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/ExtendsAnnotationInspection.java @@ -16,6 +16,7 @@ package com.siyeh.ig.inheritance; import com.intellij.psi.*; +import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.PsiUtil; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; @@ -66,7 +67,7 @@ public class ExtendsAnnotationInspection extends BaseInspection { @Override public void visitClass(@NotNull PsiClass aClass) { - if (aClass.isAnnotationType()) { + if (aClass.isAnnotationType() || InheritanceUtil.isInheritor(aClass, "javax.enterprise.util.AnnotationLiteral")) { return; } checkReferenceList(aClass.getExtendsList(), aClass); diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/ExtendsAnnotation.html b/plugins/InspectionGadgets/src/inspectionDescriptions/ExtendsAnnotation.html index 6d4375343c75..ca58bdefc8fe 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/ExtendsAnnotation.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/ExtendsAnnotation.html @@ -1,8 +1,8 @@ Reports any classes declared as implementing or extending an annotation -interface. While it is legal to extend an annotation interface, it is nearly meaningless, -and discouraged. +interface. While it is legal to extend an annotation interface, it is often done by accident, +and the result won't be usable as an annotation.

diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_annotation/ExtendsAnnotation.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_annotation/ExtendsAnnotation.java index 1e200226c7ae..9c41ce49da8e 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_annotation/ExtendsAnnotation.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_annotation/ExtendsAnnotation.java @@ -1,5 +1,20 @@ +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import javax.enterprise.util.AnnotationLiteral; public abstract class ExtendsAnnotation implements Override { interface J extends Override {} +} +class One extends AnnotationLiteral implements Contains { + @Override + public String value() { + return "test"; + } +} +@Documented +@Retention(value= RetentionPolicy.RUNTIME) +@interface Contains { + String value() default ""; } \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/ExtendsAnnotationInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/ExtendsAnnotationInspectionTest.java index e104bbc97277..28608cfaf2b9 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/ExtendsAnnotationInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/ExtendsAnnotationInspectionTest.java @@ -33,4 +33,19 @@ public class ExtendsAnnotationInspectionTest extends LightInspectionTestCase { protected InspectionProfileEntry getInspection() { return new ExtendsAnnotationInspection(); } + + @Override + protected String[] getEnvironmentClasses() { + return new String[] { + "package javax.enterprise.util;\n" + + "import java.lang.annotation.Annotation;\n" + + "public abstract class AnnotationLiteral implements Annotation {\n" + + " protected AnnotationLiteral() {}\n" + + " public Class annotationType() { return null; }\n" + + " @Override public boolean equals(Object other) { return false; }\n" + + " @Override public int hashCode() { return 0; }\n" + + " @Override public String toString() { return \"\"; }\n" + + "}" + }; + } }