CantAnnotateStaticClass3.java revision 2453:3dfd962149b2
1/* 2 * @test /nodynamiccopyright/ 3 * @bug 8006733 8006775 8027262 4 * @summary Ensure behavior for nested types is correct. 5 * @author Werner Dietl 6 * @compile/fail/ref=CantAnnotateStaticClass3.out -XDrawDiagnostics CantAnnotateStaticClass3.java 7 */ 8 9import java.util.List; 10import java.util.ArrayList; 11import java.util.HashMap; 12import java.lang.annotation.*; 13 14class 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 interface Outer { 25 class Inner { 26 // Object o1 = Top.this; 27 // Object o2 = Outer.this; 28 Object o3 = this; 29 } 30 static class SInner { 31 // Object o1 = Top.this; 32 // Object o2 = Outer.this; 33 Object o3 = this; 34 } 35 interface IInner { 36 // Object o1 = Top.this; 37 // Object o2 = Outer.this; 38 // Object o3 = this; 39 } 40 } 41 42 43 @TB Outer f1; 44 @TB Outer.Inner f1a; // err 45 @TB Outer.SInner f2a; // err 46 @TB Outer.IInner f3a; // err 47 48 Outer. @TC Inner f1b; 49 Outer. @TC SInner f2b; 50 Outer. @TC IInner f3b; 51 52 @TB Outer. @TC Inner f1c; // err 53 @TB Outer. @TC SInner f2c; // err 54 @TB Outer. @TC IInner f3c; // err 55 56 @TA Top. @TB Outer g1; // err 57 @TA Top. @TB Outer.Inner g1a; // err 58 @TA Top. @TB Outer.SInner g2a; // err 59 @TA Top. @TB Outer.IInner g3a; // err 60 61 @TA Top. Outer. @TC Inner g1b; // err 62 @TA Top. Outer. @TC SInner g2b; // err 63 @TA Top. Outer. @TC IInner g3b; // err 64 65 @TA Top. @TB Outer. @TC Inner g1c; // err 66 @TA Top. @TB Outer. @TC SInner g2c; // err 67 @TA Top. @TB Outer. @TC IInner g3c; // err 68 69 @TB Outer f1r() { return null; } 70 71 @TB Outer.Inner f1ra() { return null; } // err 72 @TB Outer.SInner f2ra() { return null; } // err 73 @TB Outer.IInner f3ra() { return null; } // err 74 75 Outer. @TC Inner f1rb() { return null; } 76 Outer. @TC SInner f2rb() { return null; } 77 Outer. @TC IInner f3rb() { return null; } 78 79 @TB Outer. @TC Inner f1rc() { return null; } // err 80 @TB Outer. @TC SInner f2rc() { return null; } // err 81 @TB Outer. @TC IInner f3rc() { return null; } // err 82 83 void f1param(@TB Outer p, 84 @TB Outer.Inner p1, // err 85 Outer. @TC Inner p2, 86 @TB Outer. @TC Inner p3) { } // err 87 void f2param(@TB Outer p, 88 @TB Outer.SInner p1, // err 89 Outer. @TC SInner p2, 90 @TB Outer. @TC SInner p3) { } // err 91 void f3param(@TB Outer p, 92 @TB Outer.IInner p1, // err 93 Outer. @TC IInner p2, 94 @TB Outer. @TC IInner p3) { } // err 95 96 void f1cast(Object o) { 97 Object l; 98 l = (@TB Outer) o; 99 l = (@TB Outer.Inner) o; // err 100 l = (Outer. @TC Inner) o; 101 l = (@TB Outer. @TC Inner) o; // err 102 } 103 void f2cast(Object o) { 104 Object l; 105 l = (@TB Outer) o; 106 l = (@TB Outer.SInner) o; // err 107 l = (Outer. @TC SInner) o; 108 l = (@TB Outer. @TC SInner) o; // err 109 } 110 void f3cast(Object o) { 111 Object l; 112 l = (@TB Outer) o; 113 l = (@TB Outer.IInner) o; // err 114 l = (Outer. @TC IInner) o; 115 l = (@TB Outer. @TC IInner) o; // err 116 } 117 118 List<@TB Outer> h1; 119 120 List<@TB Outer.Inner> h1a; // err 121 List<@TB Outer.SInner> h2a; // err 122 List<@TB Outer.IInner> h3a; // err 123 124 List<Outer. @TC Inner> h1b; 125 List<Outer. @TC SInner> h2b; 126 List<Outer. @TC IInner> h3b; 127 128 List<@TB Outer. @TC Inner> h1c; // err 129 List<@TB Outer. @TC SInner> h2c; // err 130 List<@TB Outer. @TC IInner> h3c; // err 131 132 List<@TA Top. @TB Outer> k1; // err 133 134 List<@TA Top. @TB Outer.Inner> k1a; // err 135 List<@TA Top. @TB Outer.SInner> k2a; // err 136 List<@TA Top. @TB Outer.IInner> k3a; // err 137 138 List<@TA Top. Outer. @TC Inner> k1b; // err 139 List<@TA Top. Outer. @TC SInner> k2b; // err 140 List<@TA Top. Outer. @TC IInner> k3b; // err 141 142 List<@TA Top. @TB Outer. @TC Inner> k1c; // err 143 List<@TA Top. @TB Outer. @TC SInner> k2c; // err 144 List<@TA Top. @TB Outer. @TC IInner> k3c; // err 145 146 147 List<@TB Outer> g1r() { return null; } 148 149 List<@TB Outer.Inner> g1ra() { return null; } // err 150 List<@TB Outer.SInner> g2ra() { return null; } // err 151 List<@TB Outer.IInner> g3ra() { return null; } // err 152 153 List<Outer. @TC Inner> g1rb() { return null; } 154 List<Outer. @TC SInner> g2rb() { return null; } 155 List<Outer. @TC IInner> g3rb() { return null; } 156 157 List<@TB Outer. @TC Inner> g1rc() { return null; } // err 158 List<@TB Outer. @TC SInner> g2rc() { return null; } // err 159 List<@TB Outer. @TC IInner> g3rc() { return null; } // err 160 161 void g1param(List<@TB Outer> p, 162 List<@TB Outer.Inner> p1, // err 163 List<Outer. @TC Inner> p2, 164 List<@TB Outer. @TC Inner> p3) { } // err 165 void g2param(List<@TB Outer> p, 166 List<@TB Outer.SInner> p1, // err 167 List<Outer. @TC SInner> p2, 168 List<@TB Outer. @TC SInner> p3) { } // err 169 void g3param(List<@TB Outer> p, 170 List<@TB Outer.IInner> p1, // err 171 List<Outer. @TC IInner> p2, 172 List<@TB Outer. @TC IInner> p3) { } // err 173 174 void g1new(Object o) { 175 Object l; 176 l = new @TB ArrayList<@TB Outer>(); 177 l = new @TB ArrayList<@TB Outer.Inner>(); // err 178 l = new @TB HashMap<String, Outer. @TC Inner>(); 179 l = new @TB HashMap<String, @TB Outer. Inner>(); // err 180 l = new @TB HashMap<String, @TB Outer. @TC Inner>(); // err 181 } 182 void g2new(Object o) { 183 Object l; 184 l = new @TB ArrayList<@TB Outer>(); 185 l = new @TB ArrayList<@TB Outer.SInner>(); // err 186 l = new @TB HashMap<String, Outer. @TC SInner>(); 187 l = new @TB HashMap<String, @TB Outer. SInner>(); // err 188 l = new @TB HashMap<String, @TB Outer. @TC SInner>(); // err 189 } 190 void g3new(Object o) { 191 Object l; 192 l = new @TB ArrayList<@TB Outer>(); 193 l = new @TB ArrayList<@TB Outer.IInner>(); // err 194 l = new @TB HashMap<String, Outer. @TC IInner>(); 195 l = new @TB HashMap<String, @TB Outer. IInner>(); // err 196 l = new @TB HashMap<String, @TB Outer. @TC IInner>(); // err 197 } 198 void g4new(Object o) { 199 Object l; 200 l = new @TB ArrayList<@TA Top. @TB Outer>(); // err 201 l = new @TB ArrayList<@TA Top. @TB Outer.IInner>(); // err 202 l = new @TB HashMap<String, @TA Top. Outer. @TC IInner>(); // err 203 l = new @TB HashMap<String, @TA Top. @TB Outer. IInner>(); // err 204 l = new @TB HashMap<String, @TA Top. @TB Outer. @TC IInner>(); // err 205 } 206} 207