Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/lang/reflect/Parameter/WithParameters.java
38828 views
/*1* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @compile -parameters WithParameters.java26* @run main WithParameters27* @summary javac should generate method parameters correctly.28*/2930import java.lang.*;31import java.lang.annotation.*;32import java.lang.reflect.*;33import java.util.List;3435public class WithParameters {3637private static final Class<?>[] qux_types = {38int.class, Foo.class, List.class, List.class, List.class, String[].class39};4041private static final String[] qux_names = {42"quux", "quuux", "l", "l2", "l3", "rest"43};4445public static void main(String argv[]) throws Exception {46int error = 0;47Method[] methods = Foo.class.getMethods();48for(Method m : methods) {49System.err.println("Inspecting method " + m.getName());50Parameter[] parameters = m.getParameters();51if(parameters == null)52throw new Exception("getParameters should never be null");53for(int i = 0; i < parameters.length; i++) {54Parameter p = parameters[i];55if(!p.getDeclaringExecutable().equals(m)) {56System.err.println(p + ".getDeclaringExecutable != " + m);57error++;58}59if(null == p.getType()) {60System.err.println(p + ".getType() == null");61error++;62}63if(null == p.getParameterizedType()) {64System.err.println(p + ".getParameterizedType == null");65error++;66}67}68if(m.getName().equals("qux")) {69if(6 != parameters.length) {70System.err.println("Wrong number of parameters for qux");71error++;72}73for(int i = 0; i < parameters.length; i++) {74Parameter p = parameters[i];75if(!p.isNamePresent()) {76System.err.println(p + ".isNamePresent == false");77error++;78}79if(!parameters[i].getName().equals(qux_names[i])) {80System.err.println("Wrong parameter name for " + parameters[i]);81error++;82}83// The getType family work with or without84// parameter attributes compiled in.85if(!parameters[i].getType().equals(qux_types[i])) {86System.err.println("Wrong parameter type for " + parameters[0] + ": expected " + qux_types[i] + ", but got " + parameters[i].getType());87error++;88}89}90if(!parameters[0].toString().equals("final int quux")) {91System.err.println("toString for quux is wrong, expected \"final int quux\", got \"" + parameters[0] + "\"");92error++;93}94if(parameters[0].getModifiers() != Modifier.FINAL) {95System.err.println("quux is not final");96error++;97}98if(parameters[0].isVarArgs()) {99System.err.println("isVarArg for quux is wrong");100error++;101}102if(!parameters[0].getParameterizedType().equals(int.class)) {103System.err.println("getParameterizedType for quux is wrong");104error++;105}106if(!parameters[1].toString().equals("WithParameters$Foo quuux")) {107System.err.println("toString for quuux is wrong, expected \"WithParameters$Foo quuux\", got \"" + parameters[1] + "\"");108error++;109}110if(parameters[1].isVarArgs()) {111System.err.println("isVarArg for quuux is wrong");112error++;113}114if(!parameters[1].getParameterizedType().equals(Foo.class)) {115System.err.println("getParameterizedType for quuux is wrong");116error++;117}118Annotation[] anns = parameters[1].getAnnotations();119if(1 != anns.length) {120System.err.println("getAnnotations missed an annotation");121error++;122} else if(!anns[0].annotationType().equals(Thing.class)) {123System.err.println("getAnnotations has the wrong annotation");124error++;125}126if(!parameters[2].toString().equals("java.util.List<?> l")) {127System.err.println("toString for l is wrong, expected \"java.util.List<?> l\", got \"" + parameters[2] + "\"");128error++;129}130if(parameters[2].isVarArgs()) {131System.err.println("isVarArg for l is wrong");132error++;133}134if(!(parameters[2].getParameterizedType() instanceof135ParameterizedType)) {136System.err.println("getParameterizedType for l is wrong");137error++;138} else {139ParameterizedType pt =140(ParameterizedType) parameters[2].getParameterizedType();141if(!pt.getRawType().equals(List.class)) {142System.err.println("Raw type for l is wrong");143error++;144}145if(1 != pt.getActualTypeArguments().length) {146System.err.println("Number of type parameters for l is wrong");147error++;148}149if(!(pt.getActualTypeArguments()[0] instanceof WildcardType)) {150System.err.println("Type parameter for l is wrong");151error++;152}153}154if(!parameters[3].toString().equals("java.util.List<WithParameters$Foo> l2")) {155System.err.println("toString for l2 is wrong, expected \"java.util.List<WithParameters$Foo> l2\", got \"" + parameters[3] + "\"");156error++;157}158if(parameters[3].isVarArgs()) {159System.err.println("isVarArg for l2 is wrong");160error++;161}162if(!(parameters[3].getParameterizedType() instanceof163ParameterizedType)) {164System.err.println("getParameterizedType for l2 is wrong");165error++;166} else {167ParameterizedType pt =168(ParameterizedType) parameters[3].getParameterizedType();169if(!pt.getRawType().equals(List.class)) {170System.err.println("Raw type for l2 is wrong");171error++;172}173if(1 != pt.getActualTypeArguments().length) {174System.err.println("Number of type parameters for l2 is wrong");175error++;176}177if(!(pt.getActualTypeArguments()[0].equals(Foo.class))) {178System.err.println("Type parameter for l2 is wrong");179error++;180}181}182if(!parameters[4].toString().equals("java.util.List<? extends WithParameters$Foo> l3")) {183System.err.println("toString for l3 is wrong, expected \"java.util.List<? extends WithParameters$Foo> l3\", got \"" + parameters[3] + "\"");184error++;185}186if(parameters[4].isVarArgs()) {187System.err.println("isVarArg for l3 is wrong");188error++;189}190if(!(parameters[4].getParameterizedType() instanceof191ParameterizedType)) {192System.err.println("getParameterizedType for l3 is wrong");193error++;194} else {195ParameterizedType pt =196(ParameterizedType) parameters[4].getParameterizedType();197if(!pt.getRawType().equals(List.class)) {198System.err.println("Raw type for l3 is wrong");199error++;200}201if(1 != pt.getActualTypeArguments().length) {202System.err.println("Number of type parameters for l3 is wrong");203error++;204}205if(!(pt.getActualTypeArguments()[0] instanceof WildcardType)) {206System.err.println("Type parameter for l3 is wrong");207error++;208} else {209WildcardType wt = (WildcardType)210pt.getActualTypeArguments()[0];211if(!wt.getUpperBounds()[0].equals(Foo.class)) {212System.err.println("Upper bounds on type parameter fol l3 is wrong");213error++;214}215}216}217if(!parameters[5].toString().equals("java.lang.String... rest")) {218System.err.println("toString for rest is wrong, expected \"java.lang.String... rest\", got \"" + parameters[5] + "\"");219error++;220}221if(!parameters[5].isVarArgs()) {222System.err.println("isVarArg for rest is wrong");223error++;224}225if(!(parameters[5].getParameterizedType().equals(String[].class))) {226System.err.println("getParameterizedType for rest is wrong");227error++;228}229}230}231if(0 != error)232throw new Exception("Failed " + error + " tests");233}234235void test(int test) {}236237public class Foo {238int thing;239public void qux(final int quux, @Thing Foo quuux,240List<?> l, List<Foo> l2,241List<? extends Foo> l3,242String... rest) {}243}244245@Retention(RetentionPolicy.RUNTIME)246public @interface Thing {}247248}249250251