MethodParameterTest.java revision 3294:9adfb22ff08f
1/*
2 * Copyright (c) 2015, 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/*
25 * @test
26 * @bug 8049238
27 * @summary Checks Signature attribute for method parameters.
28 * @library /tools/lib /tools/javac/lib ../lib
29 * @modules jdk.compiler/com.sun.tools.javac.api
30 *          jdk.compiler/com.sun.tools.javac.file
31 *          jdk.compiler/com.sun.tools.javac.main
32 *          jdk.jdeps/com.sun.tools.classfile
33 *          jdk.jdeps/com.sun.tools.javap
34 * @build TestBase TestResult InMemoryFileManager ToolBox
35 * @build MethodParameterTest Driver ExpectedSignature ExpectedSignatureContainer
36 * @run main Driver MethodParameterTest
37 */
38
39import java.util.ArrayList;
40import java.util.List;
41import java.util.Map;
42import java.util.Set;
43
44@ExpectedSignature(descriptor = "MethodParameterTest", signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;")
45public class MethodParameterTest<T> {
46
47    @ExpectedSignature(descriptor = "<init>(java.lang.Object, java.util.Set, java.util.ArrayList)",
48            signature = "<E:TT;U::Ljava/util/List<TE;>;:Ljava/lang/Runnable;>" +
49                    "(TT;Ljava/util/Set<-TE;>;Ljava/util/ArrayList<+Ljava/util/Set<TU;>;>;)V")
50    <E extends T, U extends List<E> & Runnable>
51    MethodParameterTest(T a, Set<? super E> b, ArrayList<? extends Set<U>> c) {
52    }
53
54    @ExpectedSignature(descriptor = "method(java.lang.Object, java.util.List, java.util.ArrayList)",
55            signature = "<E:TT;U::Ljava/util/List<TE;>;:Ljava/lang/Runnable;>" +
56                    "(TT;TU;Ljava/util/ArrayList<+Ljava/util/Set<TU;>;>;)V")
57    <E extends T, U extends List<E> & Runnable>
58    void method(T a, U b, ArrayList<? extends Set<U>> c) {
59    }
60
61    @ExpectedSignature(descriptor = "staticMethod(java.util.Set, java.util.List[], java.util.Map)",
62            signature = "<T::Ljava/util/List<*>;E::Ljava/util/Set<-TT;>;>(TE;[TT;Ljava/util/Map<*+TE;>;)TE;")
63    static <T extends List<?>, E extends Set<? super T>> E staticMethod(E a, T[] b, Map<?, ? extends E> c) {
64        return null;
65    }
66
67    @ExpectedSignature(descriptor = "<init>(java.lang.Object, boolean[])", signature = "(TT;[Z)V")
68    MethodParameterTest(T a, boolean...b) {
69    }
70
71    @ExpectedSignature(descriptor = "<init>(java.lang.Object, char[])", signature = "(TT;[C)V")
72    MethodParameterTest(T a, char...b) {
73    }
74
75    @ExpectedSignature(descriptor = "<init>(java.lang.Object, byte[])", signature = "(TT;[B)V")
76    MethodParameterTest(T a, byte...b) {
77    }
78
79    @ExpectedSignature(descriptor = "<init>(java.lang.Object, short[])", signature = "(TT;[S)V")
80    MethodParameterTest(T a, short...b) {
81    }
82
83    @ExpectedSignature(descriptor = "<init>(java.lang.Object, int[])", signature = "(TT;[I)V")
84    MethodParameterTest(T a, int...b) {
85    }
86
87    @ExpectedSignature(descriptor = "<init>(java.lang.Object, long[])", signature = "(TT;[J)V")
88    MethodParameterTest(T a, long...b) {
89    }
90
91    @ExpectedSignature(descriptor = "<init>(java.lang.Object, float[])", signature = "(TT;[F)V")
92    MethodParameterTest(T a, float...b) {
93    }
94
95    @ExpectedSignature(descriptor = "<init>(java.lang.Object, double[])", signature = "(TT;[D)V")
96    MethodParameterTest(T a, double...b) {
97    }
98
99    @ExpectedSignature(descriptor = "<init>(java.lang.Object, java.lang.Object[])",
100            signature = "(TT;[Ljava/lang/Object;)V")
101    MethodParameterTest(T a, Object...b) {
102    }
103
104    @ExpectedSignature(descriptor = "<init>(java.lang.Object[])", signature = "([TT;)V")
105    MethodParameterTest(T...a) {
106    }
107
108    // no Signature attribute
109    MethodParameterTest(int...a) {
110    }
111
112    @ExpectedSignature(descriptor = "genericBooleanMethod(java.lang.Object, boolean[])", signature = "(TT;[Z)V")
113    void genericBooleanMethod(T a, boolean...b) {
114    }
115
116    @ExpectedSignature(descriptor = "genericCharMethod(java.lang.Object, char[])", signature = "(TT;[C)V")
117    void genericCharMethod(T a, char...b) {
118    }
119
120    @ExpectedSignature(descriptor = "genericByteMethod(java.lang.Object, byte[])", signature = "(TT;[B)V")
121    void genericByteMethod(T a, byte...b) {
122    }
123
124    @ExpectedSignature(descriptor = "genericShortMethod(java.lang.Object, short[])", signature = "(TT;[S)V")
125    void genericShortMethod(T a, short...b) {
126    }
127
128    @ExpectedSignature(descriptor = "genericIntMethod(java.lang.Object, int[])", signature = "(TT;[I)V")
129    void genericIntMethod(T a, int...b) {
130    }
131
132    @ExpectedSignature(descriptor = "genericLongMethod(java.lang.Object, long[])", signature = "(TT;[J)V")
133    void genericLongMethod(T a, long...b) {
134    }
135
136    @ExpectedSignature(descriptor = "genericFloatMethod(java.lang.Object, float[])", signature = "(TT;[F)V")
137    void genericFloatMethod(T a, float...b) {
138    }
139
140    @ExpectedSignature(descriptor = "genericDoubleMethod(java.lang.Object, double[])", signature = "(TT;[D)V")
141    void genericDoubleMethod(T a, double...b) {
142    }
143
144    @ExpectedSignature(descriptor = "genericObjectMethod(java.lang.Object, java.lang.Object[])",
145            signature = "(TT;[Ljava/lang/Object;)V")
146    void genericObjectMethod(T a, Object...b) {
147    }
148
149    @ExpectedSignature(descriptor = "genericMethod(java.lang.Object[])", signature = "([TT;)V")
150    void genericMethod(T...a) {
151    }
152
153    void noSignature(int...a) {
154    }
155
156    @ExpectedSignature(descriptor = "staticGenericBooleanMethod(java.lang.Object, boolean[])",
157            signature = "<T:Ljava/lang/Object;>(TT;[Z)V")
158    static <T> void staticGenericBooleanMethod(T a, boolean...b) {
159    }
160
161    @ExpectedSignature(descriptor = "staticGenericCharMethod(java.lang.Object, char[])",
162            signature = "<T:Ljava/lang/Object;>(TT;[C)V")
163    static <T> void staticGenericCharMethod(T a, char...b) {
164    }
165
166    @ExpectedSignature(descriptor = "staticGenericByteMethod(java.lang.Object, byte[])",
167            signature = "<T:Ljava/lang/Object;>(TT;[B)V")
168    static <T> void staticGenericByteMethod(T a, byte...b) {
169    }
170
171    @ExpectedSignature(descriptor = "staticGenericShortMethod(java.lang.Object, short[])",
172            signature = "<T:Ljava/lang/Object;>(TT;[S)V")
173    static <T> void staticGenericShortMethod(T a, short...b) {
174    }
175
176    @ExpectedSignature(descriptor = "staticGenericIntMethod(java.lang.Object, int[])",
177            signature = "<T:Ljava/lang/Object;>(TT;[I)V")
178    static <T> void staticGenericIntMethod(T a, int...b) {
179    }
180
181    @ExpectedSignature(descriptor = "staticGenericLongMethod(java.lang.Object, long[])",
182            signature = "<T:Ljava/lang/Object;>(TT;[J)V")
183    static <T> void staticGenericLongMethod(T a, long...b) {
184    }
185
186    @ExpectedSignature(descriptor = "staticGenericFloatMethod(java.lang.Object, float[])",
187            signature = "<T:Ljava/lang/Object;>(TT;[F)V")
188    static <T> void staticGenericFloatMethod(T a, float...b) {
189    }
190
191    @ExpectedSignature(descriptor = "staticGenericDoubleMethod(java.lang.Object, double[])",
192            signature = "<T:Ljava/lang/Object;>(TT;[D)V")
193    static <T> void staticGenericDoubleMethod(T a, double...b) {
194    }
195
196    @ExpectedSignature(descriptor = "staticGenericObjectMethod(java.lang.Object, java.lang.Object[])",
197            signature = "<T:Ljava/lang/Object;>(TT;[Ljava/lang/Object;)V")
198    static <T> void staticGenericObjectMethod(T a, Object...b) {
199    }
200
201    @ExpectedSignature(descriptor = "staticGenericMethod(java.lang.Object[])",
202            signature = "<T:Ljava/lang/Object;>([TT;)V")
203    static <T> void staticGenericMethod(T...a) {
204    }
205
206    static void staticNoSignatureAttribute(int...a) {
207    }
208}
209