1 /* 2 * Copyright (c) 2012, 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 * @summary javac should generate method parameters correctly. 27 */ 28 29 import java.lang.*; 30 import java.lang.reflect.*; 31 import java.util.List; 32 33 public class WithoutParameters { 34 35 private static final Class<?>[] qux_types = { 36 int.class, 37 Foo.class, 38 List.class, 39 List.class, 40 List.class, 41 }; 42 43 public static void main(String argv[]) throws Exception { 44 int error = 0; 45 Method[] methods = Foo.class.getMethods(); 46 for(Method m : methods) { 47 System.err.println("Inspecting method " + m); 48 Parameter[] parameters = m.getParameters(); 49 if(parameters == null) 50 throw new Exception("getParameters should never be null"); 51 for(int i = 0; i < parameters.length; i++) { 52 Parameter p = parameters[i]; 53 if(!p.getDeclaringExecutable().equals(m)) { 54 System.err.println(p + ".getDeclaringExecutable != " + m); 55 error++; 56 } 57 if(null == p.getType()) { 58 System.err.println(p + ".getType() == null"); 59 error++; 60 } 61 if(null == p.getParameterizedType()) { 62 System.err.println(p + ".getParameterizedType == null"); 63 error++; 64 } 65 } 66 if(m.getName().equals("qux")) { 67 if(5 != parameters.length) { 68 System.err.println("Wrong number of parameters for qux"); 69 error++; 70 } 71 for(int i = 0; i < parameters.length; i++) { 72 Parameter p = parameters[i]; 73 // The getType family work with or without 74 // parameter attributes compiled in. 75 if(!parameters[i].getType().equals(qux_types[i])) { 76 System.err.println("Wrong parameter type for " + parameters[0] + ": expected " + qux_types[i] + ", but got " + parameters[i].getType()); 77 error++; 78 } 79 } 80 if(!parameters[0].getParameterizedType().equals(int.class)) { 81 System.err.println("getParameterizedType for quux is wrong"); 82 error++; 83 } 84 if(!parameters[1].getParameterizedType().equals(Foo.class)) { 85 System.err.println("getParameterizedType for quux is wrong"); 86 error++; 87 } 88 if(!(parameters[2].getParameterizedType() instanceof 89 ParameterizedType)) { 90 System.err.println("getParameterizedType for l is wrong"); 91 error++; 92 } else { 93 ParameterizedType pt = 94 (ParameterizedType) parameters[2].getParameterizedType(); 95 if(!pt.getRawType().equals(List.class)) { 96 System.err.println("Raw type for l is wrong"); 97 error++; 98 } 99 if(1 != pt.getActualTypeArguments().length) { 100 System.err.println("Number of type parameters for l is wrong"); 101 error++; 102 } 103 if(!(pt.getActualTypeArguments()[0] instanceof WildcardType)) { 104 System.err.println("Type parameter for l is wrong"); 105 error++; 106 } 107 } 108 if(!(parameters[3].getParameterizedType() instanceof 109 ParameterizedType)) { 110 System.err.println("getParameterizedType for l2 is wrong"); 111 error++; 112 } else { 113 ParameterizedType pt = 114 (ParameterizedType) parameters[3].getParameterizedType(); 115 if(!pt.getRawType().equals(List.class)) { 116 System.err.println("Raw type for l2 is wrong"); 117 error++; 118 } 119 if(1 != pt.getActualTypeArguments().length) { 120 System.err.println("Number of type parameters for l2 is wrong"); 121 error++; 122 } 123 if(!(pt.getActualTypeArguments()[0].equals(Foo.class))) { 124 System.err.println("Type parameter for l2 is wrong"); 125 error++; 126 } 127 } 128 if(!(parameters[4].getParameterizedType() instanceof 129 ParameterizedType)) { 130 System.err.println("getParameterizedType for l3 is wrong"); 131 error++; 132 } else { 133 ParameterizedType pt = 134 (ParameterizedType) parameters[4].getParameterizedType(); 135 if(!pt.getRawType().equals(List.class)) { 136 System.err.println("Raw type for l3 is wrong"); 137 error++; 138 } 139 if(1 != pt.getActualTypeArguments().length) { 140 System.err.println("Number of type parameters for l3 is wrong"); 141 error++; 142 } 143 if(!(pt.getActualTypeArguments()[0] instanceof WildcardType)) { 144 System.err.println("Type parameter for l3 is wrong"); 145 error++; 146 } else { 147 WildcardType wt = (WildcardType) 148 pt.getActualTypeArguments()[0]; 149 if(!wt.getUpperBounds()[0].equals(Foo.class)) { 150 System.err.println("Upper bounds on type parameter fol l3 is wrong"); 151 error++; 152 } 153 } 154 } 155 } 156 } 157 if(0 != error) 158 throw new Exception("Failed " + error + " tests"); 159 } 160 161 public class Foo { 162 public Foo(int bar, int baz) {} 163 public void qux(int quux, Foo quuux, 164 List<?> l, List<Foo> l2, 165 List<? extends Foo> l3) {} 166 } 167 168 }