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) @interface TA {} 16 @Target(ElementType.TYPE_USE) @interface TB1 {} 17 @Target(ElementType.TYPE_USE) @interface TB2 {} 18 @Target(ElementType.TYPE_USE) @interface TB3 {} 19 @Target(ElementType.TYPE_USE) @interface TB4 {} 20 @Target(ElementType.TYPE_USE) @interface TB5 {} 21 @Target(ElementType.TYPE_USE) @interface TB6 {} 22 @Target(ElementType.TYPE_USE) @interface TB7 {} 23 @Target(ElementType.TYPE_USE) @interface TB8 {} 24 @Target(ElementType.TYPE_USE) @interface TB9 {} 25 @Target(ElementType.TYPE_USE) @interface TB10 {} 26 @Target(ElementType.TYPE_USE) @interface TB11 {} 27 @Target(ElementType.TYPE_USE) @interface TB12 {} 28 @Target(ElementType.TYPE_USE) @interface TB13 {} 29 @Target(ElementType.TYPE_USE) @interface TB14 {} 30 @Target(ElementType.TYPE_USE) @interface TB15 {} 31 @Target(ElementType.TYPE_USE) @interface TB16 {} 32 @Target(ElementType.TYPE_USE) @interface TB17 {} 33 @Target(ElementType.TYPE_USE) @interface TB18 {} 34 @Target(ElementType.TYPE_USE) @interface TB19 {} 35 @Target(ElementType.TYPE_USE) @interface TB20 {} 36 @Target(ElementType.TYPE_USE) @interface TB21 {} 37 @Target(ElementType.TYPE_USE) @interface TB22 {} 38 @Target(ElementType.TYPE_USE) @interface TB23 {} 39 @Target(ElementType.TYPE_USE) @interface TB24 {} 40 @Target(ElementType.TYPE_USE) @interface TB25 {} 41 @Target(ElementType.TYPE_USE) @interface TB26 {} 42 @Target(ElementType.TYPE_USE) @interface TB27 {} 43 @Target(ElementType.TYPE_USE) @interface TB28 {} 44 @Target(ElementType.TYPE_USE) @interface TB29 {} 45 @Target(ElementType.TYPE_USE) @interface TB30 {} 46 @Target(ElementType.TYPE_USE) @interface TB31 {} 47 @Target(ElementType.TYPE_USE) @interface TB32 {} 48 @Target(ElementType.TYPE_USE) @interface TB33 {} 49 @Target(ElementType.TYPE_USE) @interface TB34 {} 50 @Target(ElementType.TYPE_USE) @interface TB35 {} 51 @Target(ElementType.TYPE_USE) @interface TB36 {} 52 @Target(ElementType.TYPE_USE) @interface TB37 {} 53 @Target(ElementType.TYPE_USE) @interface TB38 {} 54 @Target(ElementType.TYPE_USE) @interface TB39 {} 55 @Target(ElementType.TYPE_USE) @interface TB40 {} 56 @Target(ElementType.TYPE_USE) @interface TB41 {} 57 @Target(ElementType.TYPE_USE) @interface TC {} 58 59 class Outer { 60 class Inner { 61 Object o1 = Top.this; 62 Object o2 = Outer.this; 63 Object o3 = this; 64 } 65 // Illegal 66 // static class SInner {} 67 // interface IInner {} 68 } 69 70 // All combinations are OK 71 72 Top.@TB1 Outer f1; 73 @TB2 Outer.Inner f1a; 74 Outer. @TC Inner f1b; 75 @TB3 Outer. @TC Inner f1c; 76 77 @TA Top. @TB4 Outer f2; 78 @TA Top. @TB5 Outer.Inner f2a; 79 @TA Top. Outer. @TC Inner f2b; 80 @TA Top. @TB6 Outer. @TC Inner f2c; 81 82 @TB7 Outer f1r() { return null; } 83 @TB8 Outer.Inner f1ra() { return null; } 84 Outer. @TC Inner f1rb() { return null; } 85 @TB9 Outer. @TC Inner f1rc() { return null; } 86 87 void f1param(@TB41 Outer p, 88 @TB10 Outer.Inner p1, 89 Outer. @TC Inner p2, 90 @TB11 Outer. @TC Inner p3) { } 91 92 void f1cast(Object o) { 93 Object l; 94 l = (@TB12 Outer) o; 95 l = (@TB13 Outer.Inner) o; 96 l = (Outer. @TC Inner) o; 97 l = (@TB14 Outer. @TC Inner) o; 98 } 99 100 List<@TB15 Outer> g1; 101 List<@TB16 Outer.Inner> g1a; 102 List<Outer. @TC Inner> g1b; 103 List<@TB17 Outer. @TC Inner> g1c; 104 105 List<@TA Top. @TB18 Outer> g2; 106 List<@TA Top. @TB19 Outer.Inner> g2a; 107 List<@TA Top. Outer. @TC Inner> g2b; 108 List<@TA Top. @TB20 Outer. @TC Inner> g2c; 109 110 List<@TB21 Outer> g1r() { return null; } 111 List<@TB22 Outer.Inner> g1ra() { return null; } 112 List<Outer. @TC Inner> g1rb() { return null; } 113 List<@TB23 Outer. @TC Inner> g1rc() { return null; } 114 115 void g1param(List<@TB24 Outer> p, 116 List<@TB25 Outer.Inner> p1, 117 List<Outer. @TC Inner> p2, 118 List<@TB26 Outer. @TC Inner> p3) { } 119 120 void g1new(Object o) { 121 Object l; 122 l = new @TB27 ArrayList<@TB28 Outer>(); 123 l = new @TB29 ArrayList<@TB30 Outer.Inner>(); 124 l = new @TB31 HashMap<String, Outer. @TC Inner>(); 125 l = new @TB32 HashMap<String, @TB33 Outer. Inner>(); 126 l = new @TB34 HashMap<String, @TB35 Outer. @TC Inner>(); 127 l = new @TB36 HashMap<String, @TA Top. Outer. @TC Inner>(); 128 l = new @TB37 HashMap<String, @TA Top. @TB38 Outer. Inner>(); 129 l = new @TB39 HashMap<String, @TA Top. @TB40 Outer. @TC Inner>(); 130 } 131 }