aoqi@0: /* aoqi@0: * @test /nodynamiccopyright/ aoqi@0: * @bug 8006733 8006775 aoqi@0: * @summary Ensure behavior for nested types is correct. aoqi@0: * @author Werner Dietl aoqi@0: * @ignore aoqi@0: * @compile/fail/ref=CantAnnotateStaticClass3.out -XDrawDiagnostics CantAnnotateStaticClass3.java aoqi@0: */ aoqi@0: aoqi@0: import java.util.List; aoqi@0: import java.util.ArrayList; aoqi@0: import java.util.HashMap; aoqi@0: import java.lang.annotation.*; aoqi@0: aoqi@0: class Top { aoqi@0: @Target(ElementType.TYPE_USE) aoqi@0: @interface TA {} aoqi@0: aoqi@0: @Target(ElementType.TYPE_USE) aoqi@0: @interface TB {} aoqi@0: aoqi@0: @Target(ElementType.TYPE_USE) aoqi@0: @interface TC {} aoqi@0: aoqi@0: interface Outer { aoqi@0: class Inner { aoqi@0: // Object o1 = Top.this; aoqi@0: // Object o2 = Outer.this; aoqi@0: Object o3 = this; aoqi@0: } aoqi@0: static class SInner { aoqi@0: // Object o1 = Top.this; aoqi@0: // Object o2 = Outer.this; aoqi@0: Object o3 = this; aoqi@0: } aoqi@0: interface IInner { aoqi@0: // Object o1 = Top.this; aoqi@0: // Object o2 = Outer.this; aoqi@0: // Object o3 = this; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: aoqi@0: @TB Outer f1; aoqi@0: @TB Outer.Inner f1a; // err aoqi@0: @TB Outer.SInner f2a; // err aoqi@0: @TB Outer.IInner f3a; // err aoqi@0: aoqi@0: Outer. @TC Inner f1b; aoqi@0: Outer. @TC SInner f2b; aoqi@0: Outer. @TC IInner f3b; aoqi@0: aoqi@0: @TB Outer. @TC Inner f1c; // err aoqi@0: @TB Outer. @TC SInner f2c; // err aoqi@0: @TB Outer. @TC IInner f3c; // err aoqi@0: aoqi@0: @TA Top. @TB Outer g1; // err aoqi@0: @TA Top. @TB Outer.Inner g1a; // err aoqi@0: @TA Top. @TB Outer.SInner g2a; // err aoqi@0: @TA Top. @TB Outer.IInner g3a; // err aoqi@0: aoqi@0: @TA Top. Outer. @TC Inner g1b; // err aoqi@0: @TA Top. Outer. @TC SInner g2b; // err aoqi@0: @TA Top. Outer. @TC IInner g3b; // err aoqi@0: aoqi@0: @TA Top. @TB Outer. @TC Inner g1c; // err aoqi@0: @TA Top. @TB Outer. @TC SInner g2c; // err aoqi@0: @TA Top. @TB Outer. @TC IInner g3c; // err aoqi@0: aoqi@0: @TB Outer f1r() { return null; } aoqi@0: aoqi@0: @TB Outer.Inner f1ra() { return null; } // err aoqi@0: @TB Outer.SInner f2ra() { return null; } // err aoqi@0: @TB Outer.IInner f3ra() { return null; } // err aoqi@0: aoqi@0: Outer. @TC Inner f1rb() { return null; } aoqi@0: Outer. @TC SInner f2rb() { return null; } aoqi@0: Outer. @TC IInner f3rb() { return null; } aoqi@0: aoqi@0: @TB Outer. @TC Inner f1rc() { return null; } // err aoqi@0: @TB Outer. @TC SInner f2rc() { return null; } // err aoqi@0: @TB Outer. @TC IInner f3rc() { return null; } // err aoqi@0: aoqi@0: void f1param(@TB Outer p, aoqi@0: @TB Outer.Inner p1, // err aoqi@0: Outer. @TC Inner p2, aoqi@0: @TB Outer. @TC Inner p3) { } // err aoqi@0: void f2param(@TB Outer p, aoqi@0: @TB Outer.SInner p1, // err aoqi@0: Outer. @TC SInner p2, aoqi@0: @TB Outer. @TC SInner p3) { } // err aoqi@0: void f3param(@TB Outer p, aoqi@0: @TB Outer.IInner p1, // err aoqi@0: Outer. @TC IInner p2, aoqi@0: @TB Outer. @TC IInner p3) { } // err aoqi@0: aoqi@0: void f1cast(Object o) { aoqi@0: Object l; aoqi@0: l = (@TB Outer) o; aoqi@0: l = (@TB Outer.Inner) o; // err aoqi@0: l = (Outer. @TC Inner) o; aoqi@0: l = (@TB Outer. @TC Inner) o; // err aoqi@0: } aoqi@0: void f2cast(Object o) { aoqi@0: Object l; aoqi@0: l = (@TB Outer) o; aoqi@0: l = (@TB Outer.SInner) o; // err aoqi@0: l = (Outer. @TC SInner) o; aoqi@0: l = (@TB Outer. @TC SInner) o; // err aoqi@0: } aoqi@0: void f3cast(Object o) { aoqi@0: Object l; aoqi@0: l = (@TB Outer) o; aoqi@0: l = (@TB Outer.IInner) o; // err aoqi@0: l = (Outer. @TC IInner) o; aoqi@0: l = (@TB Outer. @TC IInner) o; // err aoqi@0: } aoqi@0: aoqi@0: List<@TB Outer> h1; aoqi@0: aoqi@0: List<@TB Outer.Inner> h1a; // err aoqi@0: List<@TB Outer.SInner> h2a; // err aoqi@0: List<@TB Outer.IInner> h3a; // err aoqi@0: aoqi@0: List h1b; aoqi@0: List h2b; aoqi@0: List h3b; aoqi@0: aoqi@0: List<@TB Outer. @TC Inner> h1c; // err aoqi@0: List<@TB Outer. @TC SInner> h2c; // err aoqi@0: List<@TB Outer. @TC IInner> h3c; // err aoqi@0: aoqi@0: List<@TA Top. @TB Outer> k1; // err aoqi@0: aoqi@0: List<@TA Top. @TB Outer.Inner> k1a; // err aoqi@0: List<@TA Top. @TB Outer.SInner> k2a; // err aoqi@0: List<@TA Top. @TB Outer.IInner> k3a; // err aoqi@0: aoqi@0: List<@TA Top. Outer. @TC Inner> k1b; // err aoqi@0: List<@TA Top. Outer. @TC SInner> k2b; // err aoqi@0: List<@TA Top. Outer. @TC IInner> k3b; // err aoqi@0: aoqi@0: List<@TA Top. @TB Outer. @TC Inner> k1c; // err aoqi@0: List<@TA Top. @TB Outer. @TC SInner> k2c; // err aoqi@0: List<@TA Top. @TB Outer. @TC IInner> k3c; // err aoqi@0: aoqi@0: aoqi@0: List<@TB Outer> g1r() { return null; } aoqi@0: aoqi@0: List<@TB Outer.Inner> g1ra() { return null; } // err aoqi@0: List<@TB Outer.SInner> g2ra() { return null; } // err aoqi@0: List<@TB Outer.IInner> g3ra() { return null; } // err aoqi@0: aoqi@0: List g1rb() { return null; } aoqi@0: List g2rb() { return null; } aoqi@0: List g3rb() { return null; } aoqi@0: aoqi@0: List<@TB Outer. @TC Inner> g1rc() { return null; } // err aoqi@0: List<@TB Outer. @TC SInner> g2rc() { return null; } // err aoqi@0: List<@TB Outer. @TC IInner> g3rc() { return null; } // err aoqi@0: aoqi@0: void g1param(List<@TB Outer> p, aoqi@0: List<@TB Outer.Inner> p1, // err aoqi@0: List p2, aoqi@0: List<@TB Outer. @TC Inner> p3) { } // err aoqi@0: void g2param(List<@TB Outer> p, aoqi@0: List<@TB Outer.SInner> p1, // err aoqi@0: List p2, aoqi@0: List<@TB Outer. @TC SInner> p3) { } // err aoqi@0: void g3param(List<@TB Outer> p, aoqi@0: List<@TB Outer.IInner> p1, // err aoqi@0: List p2, aoqi@0: List<@TB Outer. @TC IInner> p3) { } // err aoqi@0: aoqi@0: void g1new(Object o) { aoqi@0: Object l; aoqi@0: l = new @TB ArrayList<@TB Outer>(); aoqi@0: l = new @TB ArrayList<@TB Outer.Inner>(); // err aoqi@0: l = new @TB HashMap(); aoqi@0: l = new @TB HashMap(); // err aoqi@0: l = new @TB HashMap(); // err aoqi@0: } aoqi@0: void g2new(Object o) { aoqi@0: Object l; aoqi@0: l = new @TB ArrayList<@TB Outer>(); aoqi@0: l = new @TB ArrayList<@TB Outer.SInner>(); // err aoqi@0: l = new @TB HashMap(); aoqi@0: l = new @TB HashMap(); // err aoqi@0: l = new @TB HashMap(); // err aoqi@0: } aoqi@0: void g3new(Object o) { aoqi@0: Object l; aoqi@0: l = new @TB ArrayList<@TB Outer>(); aoqi@0: l = new @TB ArrayList<@TB Outer.IInner>(); // err aoqi@0: l = new @TB HashMap(); aoqi@0: l = new @TB HashMap(); // err aoqi@0: l = new @TB HashMap(); // err aoqi@0: } aoqi@0: void g4new(Object o) { aoqi@0: Object l; aoqi@0: l = new @TB ArrayList<@TA Top. @TB Outer>(); // err aoqi@0: l = new @TB ArrayList<@TA Top. @TB Outer.IInner>(); // err aoqi@0: l = new @TB HashMap(); // err aoqi@0: l = new @TB HashMap(); // err aoqi@0: l = new @TB HashMap(); // err aoqi@0: } aoqi@0: }