blob: d2dc8b253f7309321a6a65f3643d86c4872db611 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2003 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/*
25* @test
26* @bug 4891872
27* @summary Some tests for the generic core reflection api.
28* @author Gilad Bracha
29* @compile -source 1.5 TestN1.java
30* @run main/othervm -ea TestN1
31*/
32
33
34import java.lang.reflect.*;
35
36
37class N1<T1, T2> {
38
39 public Inner1 i1;
40 public Inner2 i2;
41 public Inner2<? super Character> i2sc;
42
43 public class Inner1 {
44
45 }
46
47 public class Inner2<T1> {
48 public boolean x;
49 public byte b;
50 public short s;
51 public char c;
52 public int i;
53 public long l;
54 public float f;
55 public double d;
56
57 public boolean[] xa;
58 public byte[] ba;
59 public short[] sa;
60 public char[] ca;
61 public int[] ia;
62 public long[] la;
63 public float[] fa;
64 public double[] da;
65 }
66
67 public class Inner3<X1, X2, X3> {
68 X1 x1;
69
70 Inner3(X1 x1, X2 x2, X3 x3, T1 t1, T2 t2) {}
71
72 <T, R, S> Inner3(T t, R r, S s, X1 x1) {}
73
74 int shazam(boolean b, short s, int[] ia, Object[] oa, Inner1 i1,
75 Inner1 i1a, InnerInner<String,
76 Inner3<Object, String, Object[]>> ii)
77 { return 3;}
78
79 public class InnerInner<T2, X2> {
80
81 boolean b;
82 Inner2<X2> i2x;
83
84 void foo(X3 x3){}
85 <X3> X3[] bar(X1 x1, X3[] x3, T1 t1) { return x3;}
86 N1<X1, X2> baz(N1<X1, X2> n1) { return n1;}
87 N1<?, ?> bam(N1<T1, X2> n1) { return n1;}
88 N1<? extends T1, ?> boom(N1<T1, X2> n1) { return n1;}
89
90 }
91
92 }
93
94
95
96
97}
98
99
100public class TestN1 {
101
102 static Class<N1> cls = N1.class;
103
104
105 public static void main(String[] args) throws Throwable {
106 testTypeParameters();
107 testInner1();
108 testInner2();
109 testInner3();
110 }
111
112
113 static void testTypeParameters() {
114
115 System.out.println("testing type parameters");
116 TypeVariable[] tvs = cls.getTypeParameters();
117 assert
118 tvs.length == 2 :
119 "N1 should have two type parameters";
120 }
121
122
123 static void testInner1() {
124 System.out.println("testing non-generic inner class");
125 Class in1 = N1.Inner1.class;
126
127 TypeVariable[] tvs = in1.getTypeParameters();
128 assert
129 tvs.length == 0 :
130 "N1.Inner2 should have no type parameters";
131
132 }
133
134 static void testInner2() throws NoSuchFieldException {
135 System.out.println("testing generic inner class 1");
136 Class in1 = N1.Inner2.class;
137
138 TypeVariable[] tvs = in1.getTypeParameters();
139 assert
140 tvs.length == 1 :
141 "N1.Inner2 should have one type parameter";
142
143
144 assert
145 in1.getField("x").getGenericType() == boolean.class :
146 "Type of Inner2.x should be boolean";
147
148 assert
149 in1.getField("b").getGenericType() == byte.class :
150 "Type of Inner2.b should be byte";
151 assert
152 in1.getField("s").getGenericType() == short.class :
153 "Type of Inner2.s should be short";
154 assert
155 in1.getField("c").getGenericType() == char.class :
156 "Type of Inner2.x should be char";
157 assert
158 in1.getField("i").getGenericType() == int.class :
159 "Type of Inner2.i should be int";
160 assert
161 in1.getField("l").getGenericType() == long.class :
162 "Type of Inner2.l should be long";
163 assert
164 in1.getField("f").getGenericType() == float.class :
165 "Type of Inner2.f should be float";
166 assert
167 in1.getField("d").getGenericType() == double.class :
168 "Type of Inner2.d should be double";
169
170 assert
171 in1.getField("xa").getGenericType() == boolean[].class :
172 "Type of Inner2.xa should be boolean[]";
173
174 assert
175 in1.getField("ba").getGenericType() == byte[].class :
176 "Type of Inner2.ba should be byte[]";
177 assert
178 in1.getField("sa").getGenericType() == short[].class :
179 "Type of Inner2.sa should be short[]";
180 assert
181 in1.getField("ca").getGenericType() == char[].class :
182 "Type of Inner2.xa should be char[]";
183 assert
184 in1.getField("ia").getGenericType() == int[].class :
185 "Type of Inner2.ia should be int[]";
186 assert
187 in1.getField("la").getGenericType() == long[].class :
188 "Type of Inner2.la should be long[]";
189 assert
190 in1.getField("fa").getGenericType() == float[].class :
191 "Type of Inner2.fa should be float[]";
192 assert
193 in1.getField("da").getGenericType() == double[].class :
194 "Type of Inner2.da should be double[]";
195 }
196
197
198 static void testInner3() {
199 System.out.println("testing generic inner class 3");
200 Class in1 = N1.Inner3.class;
201
202 TypeVariable[] tvs = in1.getTypeParameters();
203 assert
204 tvs.length == 3 :
205 "N1.Inner2 should have three type parameters";
206 }
207}