/* * @test /nodynamiccopyright/ * @bug 8006733 8006775 * @summary Ensure behavior for nested types is correct. * @author Werner Dietl * @compile CantAnnotateStaticClass.java */ import java.util.List; import java.util.ArrayList; import java.util.HashMap; import java.lang.annotation.*; class Top { @Target(ElementType.TYPE_USE) @interface TA {} @Target(ElementType.TYPE_USE) @interface TB1 {} @Target(ElementType.TYPE_USE) @interface TB2 {} @Target(ElementType.TYPE_USE) @interface TB3 {} @Target(ElementType.TYPE_USE) @interface TB4 {} @Target(ElementType.TYPE_USE) @interface TB5 {} @Target(ElementType.TYPE_USE) @interface TB6 {} @Target(ElementType.TYPE_USE) @interface TB7 {} @Target(ElementType.TYPE_USE) @interface TB8 {} @Target(ElementType.TYPE_USE) @interface TB9 {} @Target(ElementType.TYPE_USE) @interface TB10 {} @Target(ElementType.TYPE_USE) @interface TB11 {} @Target(ElementType.TYPE_USE) @interface TB12 {} @Target(ElementType.TYPE_USE) @interface TB13 {} @Target(ElementType.TYPE_USE) @interface TB14 {} @Target(ElementType.TYPE_USE) @interface TB15 {} @Target(ElementType.TYPE_USE) @interface TB16 {} @Target(ElementType.TYPE_USE) @interface TB17 {} @Target(ElementType.TYPE_USE) @interface TB18 {} @Target(ElementType.TYPE_USE) @interface TB19 {} @Target(ElementType.TYPE_USE) @interface TB20 {} @Target(ElementType.TYPE_USE) @interface TB21 {} @Target(ElementType.TYPE_USE) @interface TB22 {} @Target(ElementType.TYPE_USE) @interface TB23 {} @Target(ElementType.TYPE_USE) @interface TB24 {} @Target(ElementType.TYPE_USE) @interface TB25 {} @Target(ElementType.TYPE_USE) @interface TB26 {} @Target(ElementType.TYPE_USE) @interface TB27 {} @Target(ElementType.TYPE_USE) @interface TB28 {} @Target(ElementType.TYPE_USE) @interface TB29 {} @Target(ElementType.TYPE_USE) @interface TB30 {} @Target(ElementType.TYPE_USE) @interface TB31 {} @Target(ElementType.TYPE_USE) @interface TB32 {} @Target(ElementType.TYPE_USE) @interface TB33 {} @Target(ElementType.TYPE_USE) @interface TB34 {} @Target(ElementType.TYPE_USE) @interface TB35 {} @Target(ElementType.TYPE_USE) @interface TB36 {} @Target(ElementType.TYPE_USE) @interface TB37 {} @Target(ElementType.TYPE_USE) @interface TB38 {} @Target(ElementType.TYPE_USE) @interface TB39 {} @Target(ElementType.TYPE_USE) @interface TB40 {} @Target(ElementType.TYPE_USE) @interface TB41 {} @Target(ElementType.TYPE_USE) @interface TC {} class Outer { class Inner { Object o1 = Top.this; Object o2 = Outer.this; Object o3 = this; } // Illegal // static class SInner {} // interface IInner {} } // All combinations are OK Top.@TB1 Outer f1; @TB2 Outer.Inner f1a; Outer. @TC Inner f1b; @TB3 Outer. @TC Inner f1c; @TA Top. @TB4 Outer f2; @TA Top. @TB5 Outer.Inner f2a; @TA Top. Outer. @TC Inner f2b; @TA Top. @TB6 Outer. @TC Inner f2c; @TB7 Outer f1r() { return null; } @TB8 Outer.Inner f1ra() { return null; } Outer. @TC Inner f1rb() { return null; } @TB9 Outer. @TC Inner f1rc() { return null; } void f1param(@TB41 Outer p, @TB10 Outer.Inner p1, Outer. @TC Inner p2, @TB11 Outer. @TC Inner p3) { } void f1cast(Object o) { Object l; l = (@TB12 Outer) o; l = (@TB13 Outer.Inner) o; l = (Outer. @TC Inner) o; l = (@TB14 Outer. @TC Inner) o; } List<@TB15 Outer> g1; List<@TB16 Outer.Inner> g1a; List<Outer. @TC Inner> g1b; List<@TB17 Outer. @TC Inner> g1c; List<@TA Top. @TB18 Outer> g2; List<@TA Top. @TB19 Outer.Inner> g2a; List<@TA Top. Outer. @TC Inner> g2b; List<@TA Top. @TB20 Outer. @TC Inner> g2c; List<@TB21 Outer> g1r() { return null; } List<@TB22 Outer.Inner> g1ra() { return null; } List<Outer. @TC Inner> g1rb() { return null; } List<@TB23 Outer. @TC Inner> g1rc() { return null; } void g1param(List<@TB24 Outer> p, List<@TB25 Outer.Inner> p1, List<Outer. @TC Inner> p2, List<@TB26 Outer. @TC Inner> p3) { } void g1new(Object o) { Object l; l = new @TB27 ArrayList<@TB28 Outer>(); l = new @TB29 ArrayList<@TB30 Outer.Inner>(); l = new @TB31 HashMap<String, Outer. @TC Inner>(); l = new @TB32 HashMap<String, @TB33 Outer. Inner>(); l = new @TB34 HashMap<String, @TB35 Outer. @TC Inner>(); l = new @TB36 HashMap<String, @TA Top. Outer. @TC Inner>(); l = new @TB37 HashMap<String, @TA Top. @TB38 Outer. Inner>(); l = new @TB39 HashMap<String, @TA Top. @TB40 Outer. @TC Inner>(); } }