1 /* 2 * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 import java.lang.annotation.*; 25 import static java.lang.annotation.ElementType.*; 26 import static java.lang.annotation.RetentionPolicy.*; 27 28 import java.util.*; 29 import java.io.*; 30 31 /* 32 * @test 33 * @summary compiler accepts all values 34 * @author Mahmood Ali 35 * @author Yuri Gaevsky 36 * @compile TargetTypes.java 37 */ 38 39 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface A {} 40 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface B {} 41 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface C {} 42 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface D {} 43 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface E {} 44 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface F {} 45 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface G {} 46 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface H {} 47 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface I {} 48 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface J {} 49 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface K {} 50 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface L {} 51 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface M {} 52 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface N {} 53 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface O {} 54 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface P {} 55 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface Q {} 56 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface R {} 57 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface S {} 58 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface U {} 59 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface V {} 60 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface W {} 61 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface X {} 62 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface Y {} 63 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface Z {} 64 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AA {} 65 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AB {} 66 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AC {} 67 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AD {} 68 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AE {} 69 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AF {} 70 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AG {} 71 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AH {} 72 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AI {} 73 @Target({TYPE_USE, TYPE_PARAMETER, TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AJ {} 74 75 /** wildcard bound */ 76 class T0x1C { m0x1C(List<? extends @A String> lst)77 void m0x1C(List<? extends @A String> lst) {} 78 } 79 80 /** wildcard bound generic/array */ 81 class T0x1D<T> { m0x1D(List<? extends @B List<int[]>> lst)82 void m0x1D(List<? extends @B List<int[]>> lst) {} 83 } 84 85 /** typecast */ 86 class T0x00 { m0x00(Long l1)87 void m0x00(Long l1) { 88 Object l2 = (@C Long) l1; 89 } 90 } 91 92 /** typecast generic/array */ 93 class T0x01<T> { m0x01(List<T> list)94 void m0x01(List<T> list) { 95 List<T> l = (List<@D T>) list; 96 } 97 } 98 99 /** instanceof */ 100 class T0x02 { m0x02(String s)101 boolean m0x02(String s) { 102 return (s instanceof @E String); 103 } 104 } 105 106 /** object creation (new) */ 107 class T0x04 { m0x04()108 void m0x04() { 109 new @F ArrayList<String>(); 110 } 111 } 112 113 /** local variable */ 114 class T0x08 { m0x08()115 void m0x08() { 116 @G String s = null; 117 } 118 } 119 120 /** method parameter generic/array */ 121 class T0x0D { m0x0D(HashMap<@H Object, List<@I List<@J Class>>> s1)122 void m0x0D(HashMap<@H Object, List<@I List<@J Class>>> s1) {} 123 } 124 125 /** method receiver */ 126 class T0x06 { m0x06(@ T0x06 this)127 void m0x06(@K T0x06 this) {} 128 } 129 130 /** method return type generic/array */ 131 class T0x0B { m0x0B()132 Class<@L Object> m0x0B() { return null; } 133 } 134 135 /** field generic/array */ 136 class T0x0F { 137 HashMap<@M Object, @N Object> c1; 138 } 139 140 /** method type parameter */ 141 class T0x20<T, U> { m0x20()142 <@O T, @P U> void m0x20() {} 143 } 144 145 /** class type parameter */ 146 class T0x22<@Q T, @R U> { 147 } 148 149 /** class type parameter bound */ 150 class T0x10<T extends @S Object> { 151 } 152 153 /** method type parameter bound */ 154 class T0x12<T> { m0x12()155 <T extends @A Object> void m0x12() {} 156 } 157 158 /** class type parameter bound generic/array */ 159 class T0x11<T extends List<@U T>> { 160 } 161 162 163 /** method type parameter bound generic/array */ 164 class T0x13 { m0x13()165 static <T extends Comparable<@V T>> T m0x13() { 166 return null; 167 } 168 } 169 170 /** class extends/implements generic/array */ 171 class T0x15<T> extends ArrayList<@W T> { 172 } 173 174 /** type test (instanceof) generic/array */ 175 class T0x03<T> { m0x03(T typeObj, Object obj)176 void m0x03(T typeObj, Object obj) { 177 boolean ok = obj instanceof String @X []; 178 } 179 } 180 181 /** object creation (new) generic/array */ 182 class T0x05<T> { m0x05()183 void m0x05() { 184 new ArrayList<@Y T>(); 185 } 186 } 187 188 /** local variable generic/array */ 189 class T0x09<T> { g()190 void g() { 191 List<@Z String> l = null; 192 } 193 a()194 void a() { 195 String @AA [] as = null; 196 } 197 } 198 199 /** type argument in constructor call generic/array */ 200 class T0x19 { T0x19()201 <T> T0x19() {} 202 g()203 void g() { 204 new <List<@AB String>> T0x19(); 205 } 206 } 207 208 /** type argument in method call generic/array */ 209 class T0x1B<T> { m0x1B()210 void m0x1B() { 211 Collections.<T @AC []>emptyList(); 212 } 213 } 214 215 /** type argument in constructor call */ 216 class T0x18<T> { T0x18()217 <T> T0x18() {} 218 m()219 void m() { 220 new <@AD Integer> T0x18(); 221 } 222 } 223 224 /** type argument in method call */ 225 class T0x1A<T,U> { m()226 public static <T, U> T m() { return null; } m0x1A()227 static void m0x1A() { 228 T0x1A.<@AE Integer, @AF Short>m(); 229 } 230 } 231 232 /** class extends/implements */ 233 class T0x14 extends @AG Object implements @AH Serializable, @AI Cloneable { 234 } 235 236 /** exception type in throws */ 237 class T0x16 { 238 void m0x16() throws @AJ Exception {} 239 } 240