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: * @compile CantAnnotateStaticClass.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: class 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: // Illegal aoqi@0: // static class SInner {} aoqi@0: // interface IInner {} aoqi@0: } aoqi@0: aoqi@0: // All combinations are OK aoqi@0: aoqi@0: Top.@TB Outer f1; aoqi@0: @TB Outer.Inner f1a; aoqi@0: Outer. @TC Inner f1b; aoqi@0: @TB Outer. @TC Inner f1c; aoqi@0: aoqi@0: @TA Top. @TB Outer f2; aoqi@0: @TA Top. @TB Outer.Inner f2a; aoqi@0: @TA Top. Outer. @TC Inner f2b; aoqi@0: @TA Top. @TB Outer. @TC Inner f2c; aoqi@0: aoqi@0: @TB Outer f1r() { return null; } aoqi@0: @TB Outer.Inner f1ra() { return null; } aoqi@0: Outer. @TC Inner f1rb() { return null; } aoqi@0: @TB Outer. @TC Inner f1rc() { return null; } aoqi@0: aoqi@0: void f1param(@TB Outer p, aoqi@0: @TB Outer.Inner p1, aoqi@0: Outer. @TC Inner p2, aoqi@0: @TB Outer. @TC Inner p3) { } 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; aoqi@0: l = (Outer. @TC Inner) o; aoqi@0: l = (@TB Outer. @TC Inner) o; aoqi@0: } aoqi@0: aoqi@0: List<@TB Outer> g1; aoqi@0: List<@TB Outer.Inner> g1a; aoqi@0: List g1b; aoqi@0: List<@TB Outer. @TC Inner> g1c; aoqi@0: aoqi@0: List<@TA Top. @TB Outer> g2; aoqi@0: List<@TA Top. @TB Outer.Inner> g2a; aoqi@0: List<@TA Top. Outer. @TC Inner> g2b; aoqi@0: List<@TA Top. @TB Outer. @TC Inner> g2c; aoqi@0: aoqi@0: List<@TB Outer> g1r() { return null; } aoqi@0: List<@TB Outer.Inner> g1ra() { return null; } aoqi@0: List g1rb() { return null; } aoqi@0: List<@TB Outer. @TC Inner> g1rc() { return null; } aoqi@0: aoqi@0: void g1param(List<@TB Outer> p, aoqi@0: List<@TB Outer.Inner> p1, aoqi@0: List p2, aoqi@0: List<@TB Outer. @TC Inner> p3) { } 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>(); aoqi@0: l = new @TB HashMap(); aoqi@0: l = new @TB HashMap(); aoqi@0: l = new @TB HashMap(); aoqi@0: l = new @TB HashMap(); aoqi@0: l = new @TB HashMap(); aoqi@0: l = new @TB HashMap(); aoqi@0: } aoqi@0: }