import java.lang.annotation.*; import java.util.List; /* * @test /nodynamiccopyright/ * @bug 6843077 8006775 * @summary test that compiler doesn't warn about annotated redundant casts * @author Mahmood Ali * @author Werner Dietl * @compile/ref=LintCast.out -Xlint:cast -XDrawDiagnostics LintCast.java */ class LintCast { void unparameterized() { String s = "m"; String s1 = (String)s; String s2 = (@A String)s; } void parameterized() { List<String> l = null; List<String> l1 = (List<String>)l; List<String> l2 = (List<@A String>)l; } void array() { int @A [] a = null; int[] a1 = (int[])a; int[] a2 = (int @A [])a; } void sameAnnotations() { @A String annotated = null; String unannotated = null; // compiler ignore annotated casts even if redundant @A String anno1 = (@A String)annotated; // warn if redundant without an annotation String anno2 = (String)annotated; String unanno2 = (String)unannotated; } void more() { Object @A [] a = null; Object[] a1 = (Object[])a; Object[] a2 = (Object @A [])a; @A List<String> l3 = null; List<String> l4 = (List<String>)l3; List<String> l5 = (@A List<String>)l3; List<@A String> l6 = null; List<String> l7 = (List<String>)l6; List<String> l8 = (List<@A String>)l6; @A Object o = null; Object o1 = (Object)o; Object o2 = (@A Object)o; Outer. @A Inner oi = null; Outer.Inner oi1 = (Outer.Inner)oi; Outer.Inner oi2 = (Outer. @A Inner)oi; } class Outer { class Inner {} } } @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface A { }