1 /* 2 * @test /nodynamiccopyright/ 3 * @bug 8006733 8006775 4 * @summary Ensure behavior for nested types is correct. 5 * @author Werner Dietl 6 * @compile CantAnnotateStaticClass.java 7 */ 8 9 import java.util.List; 10 import java.util.ArrayList; 11 import java.util.HashMap; 12 import java.lang.annotation.*; 13 14 class Top { 15 @Target(ElementType.TYPE_USE) 16 @interface TA {} 17 18 @Target(ElementType.TYPE_USE) 19 @interface TB {} 20 21 @Target(ElementType.TYPE_USE) 22 @interface TC {} 23 24 class Outer { 25 class Inner { 26 Object o1 = Top.this; 27 Object o2 = Outer.this; 28 Object o3 = this; 29 } 30 // Illegal 31 // static class SInner {} 32 // interface IInner {} 33 } 34 35 // All combinations are OK 36 37 Top.@TB Outer f1; 38 @TB Outer.Inner f1a; 39 Outer. @TC Inner f1b; 40 @TB Outer. @TC Inner f1c; 41 42 @TA Top. @TB Outer f2; 43 @TA Top. @TB Outer.Inner f2a; 44 @TA Top. Outer. @TC Inner f2b; 45 @TA Top. @TB Outer. @TC Inner f2c; 46 47 @TB Outer f1r() { return null; } 48 @TB Outer.Inner f1ra() { return null; } 49 Outer. @TC Inner f1rb() { return null; } 50 @TB Outer. @TC Inner f1rc() { return null; } 51 52 void f1param(@TB Outer p, 53 @TB Outer.Inner p1, 54 Outer. @TC Inner p2, 55 @TB Outer. @TC Inner p3) { } 56 57 void f1cast(Object o) { 58 Object l; 59 l = (@TB Outer) o; 60 l = (@TB Outer.Inner) o; 61 l = (Outer. @TC Inner) o; 62 l = (@TB Outer. @TC Inner) o; 63 } 64 65 List<@TB Outer> g1; 66 List<@TB Outer.Inner> g1a; 67 List<Outer. @TC Inner> g1b; 68 List<@TB Outer. @TC Inner> g1c; 69 70 List<@TA Top. @TB Outer> g2; 71 List<@TA Top. @TB Outer.Inner> g2a; 72 List<@TA Top. Outer. @TC Inner> g2b; 73 List<@TA Top. @TB Outer. @TC Inner> g2c; 74 75 List<@TB Outer> g1r() { return null; } 76 List<@TB Outer.Inner> g1ra() { return null; } 77 List<Outer. @TC Inner> g1rb() { return null; } 78 List<@TB Outer. @TC Inner> g1rc() { return null; } 79 80 void g1param(List<@TB Outer> p, 81 List<@TB Outer.Inner> p1, 82 List<Outer. @TC Inner> p2, 83 List<@TB Outer. @TC Inner> p3) { } 84 85 void g1new(Object o) { 86 Object l; 87 l = new @TB ArrayList<@TB Outer>(); 88 l = new @TB ArrayList<@TB Outer.Inner>(); 89 l = new @TB HashMap<String, Outer. @TC Inner>(); 90 l = new @TB HashMap<String, @TB Outer. Inner>(); 91 l = new @TB HashMap<String, @TB Outer. @TC Inner>(); 92 l = new @TB HashMap<String, @TA Top. Outer. @TC Inner>(); 93 l = new @TB HashMap<String, @TA Top. @TB Outer. Inner>(); 94 l = new @TB HashMap<String, @TA Top. @TB Outer. @TC Inner>(); 95 } 96 }