1 /*
   2  * Copyright (c) 2010, 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 package pkg;
  25 
  26 import java.lang.annotation.*;
  27 import static java.lang.annotation.ElementType.*;
  28 import static java.lang.annotation.RetentionPolicy.*;
  29 
  30 import java.util.*;
  31 import java.io.*;
  32 
  33 /*
  34  * @summary compiler accepts all values
  35  * @author Mahmood Ali
  36  * @author Yuri Gaevsky
  37  */
  38 
  39 @Target(TYPE_USE)
  40 @Retention(RetentionPolicy.RUNTIME)
  41 @interface A {}
  42 
  43 @Target(TYPE_USE)
  44 @Retention(RetentionPolicy.RUNTIME)
  45 @Documented
  46 @interface DA {}
  47 
  48 @Target(TYPE_PARAMETER)
  49 @Retention(RetentionPolicy.RUNTIME)
  50 @Documented
  51 @interface DTPA {}
  52 
  53 /** typecast */
  54 class T0x00 {
  55     void m0x00(Long l1) {
  56         Object l2 = (@A @DA Long) l1;
  57     }
  58 }
  59 
  60 /** typecast generic/array */
  61 class T0x01<T> {
  62     void m0x01(List<T> list) {
  63         List<T> l = (List<@A @DA T>) list;
  64     }
  65 }
  66 
  67 /** instanceof */
  68 class T0x02 {
  69     boolean m0x02(String s) {
  70         return (s instanceof @A @DA String);
  71     }
  72 }
  73 
  74 /** type test (instanceof) generic/array */
  75 class T0x03<T> {
  76     void m0x03(T typeObj, Object obj) {
  77         boolean ok = obj instanceof String @A @DA [];
  78     }
  79 }
  80 
  81 /** object creation (new) */
  82 class T0x04 {
  83     void m0x04() {
  84         new @A @DA ArrayList<String>();
  85     }
  86 }
  87 
  88 /** object creation (new) generic/array */
  89 class T0x05<T> {
  90     void m0x05() {
  91         new ArrayList<@A @DA T>();
  92     }
  93 }
  94 
  95 /** method receiver */
  96 class T0x06 {
  97     void m0x06(@A @DA T0x06 this) {}
  98 }
  99 
 100 /** local variable */
 101 class T0x08 {
 102     void m0x08() {
 103       @A @DA String s = null;
 104     }
 105 }
 106 
 107 /** local variable generic/array */
 108 class T0x09<T> {
 109     void g() {
 110         List<@A @DA String> l = null;
 111     }
 112 
 113     void a() {
 114         String @A @DA [] as = null;
 115     }
 116 }
 117 
 118 /** method return type generic/array */
 119 class T0x0B {
 120     Class<@A @DA Object> m0x0B() { return null; }
 121 }
 122 
 123 /** method parameter generic/array */
 124 class T0x0D {
 125     void m0x0D(HashMap<@A @DA Object, List<@A @DA List<@A @DA Class>>> s1) {}
 126 }
 127 
 128 /** field generic/array */
 129 class T0x0F {
 130     HashMap<@A @DA Object, @A @DA Object> c1;
 131 }
 132 
 133 /** class type parameter bound */
 134 class T0x10<T extends @A @DA Cloneable> {
 135 }
 136 
 137 class T0x10A<T extends @A @DA Object> {
 138 }
 139 
 140 /** class type parameter bound generic/array */
 141 class T0x11<T extends List<@A @DA T>> {
 142 }
 143 
 144 /** method type parameter bound */
 145 class T0x12<T> {
 146     <T extends @A @DA Cloneable> void m0x12() {}
 147 }
 148 
 149 /** method type parameter bound generic/array */
 150 class T0x13 {
 151     static <T extends Comparable<@A @DA T>> T m0x13() {
 152         return null;
 153     }
 154 }
 155 
 156 /** class extends/implements */
 157 class T0x14 extends @A @DA Thread implements @A @DA Serializable, @A @DA Cloneable {
 158 }
 159 
 160 /** class extends/implements generic/array */
 161 class T0x15<T> extends ArrayList<@A @DA T> {
 162 }
 163 
 164 /** exception type in throws */
 165 class T0x16 {
 166     void m0x16() throws @A @DA Exception {}
 167 }
 168 
 169 /** type argument in constructor call */
 170 class T0x18<T> {
 171     <T> T0x18() {}
 172 
 173     void m() {
 174         new <@A @DA Integer> T0x18();
 175     }
 176 }
 177 
 178 /** type argument in constructor call generic/array */
 179 class T0x19 {
 180     <T> T0x19() {}
 181 
 182     void g() {
 183        new <List<@A @DA String>> T0x19();
 184     }
 185 }
 186 
 187 /** type argument in method call */
 188 class T0x1A<T,U> {
 189     public static <T, U> T m() { return null; }
 190     static void m0x1A() {
 191         T0x1A.<@A @DA Integer, @A @DA Short>m();
 192     }
 193 }
 194 
 195 /** type argument in method call generic/array */
 196 class T0x1B<T> {
 197     void m0x1B() {
 198         Collections.<T @A @DA []>emptyList();
 199     }
 200 }
 201 
 202 /** wildcard bound */
 203 class T0x1C {
 204     void m0x1C(List<? extends @A @DA String> lst) {}
 205 }
 206 
 207 /** wildcard bound generic/array */
 208 class T0x1D<T> {
 209     void m0x1D(List<? extends @A @DA List<int[]>> lst) {}
 210 }
 211 
 212 /** method type parameter */
 213 class T0x20 {
 214     <@A @DA T> void m0x20() {}
 215 }
 216 
 217 class T0x20A {
 218     <@A @DTPA T> void m0x20A() {}
 219 }
 220 
 221 class T0x20B {
 222     <T> void m0x20B(@A @DA T p) {}
 223 }
 224 
 225 /** class type parameter */
 226 class T0x22<@A @DA T> {
 227 }
 228 
 229 class T0x22A<@A @DTPA T> {
 230 }
 231 
 232 class T0x22B<T> {
 233     @A @DA T f;
 234 }