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