langtools/test/tools/javac/MethodParameters/ReflectionVisitor.java
author vromero
Sat, 01 Jun 2013 21:57:56 +0100
changeset 17999 42ae6fe53718
parent 16307 3027c91f329a
child 18000 5d29ce00a7a2
permissions -rw-r--r--
8010737: javac, known parameter's names should be copied to automatically generated constructors for inner classes Reviewed-by: mcimadamore
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16307
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     1
/*
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     2
 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     4
 *
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     7
 * published by the Free Software Foundation.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     8
 *
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    13
 * accompanied this code).
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    14
 *
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    18
 *
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    21
 * questions.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    22
 */
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    23
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    24
import java.io.*;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    25
import java.util.*;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    26
import java.net.*;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    27
import java.lang.reflect.*;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    28
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    29
/**
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    30
 * Test MethodParameter attributs by reflection API
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    31
 */
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    32
public class ReflectionVisitor extends Tester.Visitor {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    33
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    34
    public ReflectionVisitor(Tester tester) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    35
        super(tester);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    36
    }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    37
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    38
    public void error(String msg) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    39
        super.error("reflection: " + msg);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    40
    }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    41
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    42
    public void warn(String msg) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    43
        super.warn("reflection: " + msg);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    44
    }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    45
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    46
    boolean isEnum;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    47
    boolean isInterface;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    48
    boolean isAnon;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    49
    boolean isLocal;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    50
    boolean isMember;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    51
    boolean isStatic;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    52
    boolean isPublic;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    53
    Class clazz;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    54
    StringBuilder sb;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    55
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    56
    /**
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    57
     * Read class using {@code ClassFile}, and generate a list of methods
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    58
     * with parameter names as available in the MethodParameters attribute.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    59
     */
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    60
    void visitClass(final String cl, final File cfile, final StringBuilder sb)
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    61
        throws Exception {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    62
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    63
        this.sb = sb;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    64
        clazz = Class.forName(cl);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    65
        isEnum = clazz.isEnum();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    66
        isInterface = clazz.isInterface();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    67
        isAnon = clazz.isAnonymousClass();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    68
        isLocal = clazz.isLocalClass();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    69
        isMember = clazz.isMemberClass();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    70
        isStatic = ((clazz.getModifiers() & Modifier.STATIC) != 0);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    71
        isPublic = ((clazz.getModifiers() & Modifier.PUBLIC) != 0);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    72
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    73
        sb.append(isStatic ? "static " : "")
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    74
            .append(isPublic ? "public " : "")
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    75
            .append(isEnum ? "enum " : isInterface ? "interface " : "class ")
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    76
            .append(cl).append(" -- ")
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    77
            .append(isMember? "member " : "" )
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    78
            .append(isLocal? "local " : "" )
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    79
            .append(isAnon ?  "anon" : "")
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    80
            .append("\n");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    81
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    82
        for (Constructor c : clazz.getDeclaredConstructors()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    83
            testConstructor(c);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    84
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    85
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    86
        for (Method m :clazz.getDeclaredMethods()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    87
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    88
            testMethod(m);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    89
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    90
    }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    91
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    92
    void testConstructor(Constructor c) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    93
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    94
        String prefix = clazz.getName() + "." + c.getName() + "() - ";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    95
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    96
        // Parameters must match parameter types
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    97
        Parameter params[] = c.getParameters();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    98
        int paramTypes =  c.getParameterTypes().length;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
    99
        if (paramTypes != params.length) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   100
            error(prefix + "number of parameter types (" + paramTypes
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   101
                  + ") != number of parameters (" + params.length + ")");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   102
            return;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   103
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   104
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   105
        sb.append(clazz.getName()).append(".").append("<init>").append("(");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   106
        String sep = "";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   107
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   108
        // Some paramters are expected
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   109
        if (params.length < 2 && isEnum) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   110
            error(prefix + "enum constuctor, two arguments expected");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   111
        } else if (params.length < 1 && (isAnon || isLocal ||
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   112
                                         (isMember && !isStatic ))) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   113
            error(prefix + "class constuctor,expected implicit argument");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   114
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   115
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   116
        int i = -1;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   117
        String param = null;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   118
        for (Parameter p : c.getParameters()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   119
            i++;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   120
            String pname = p.getName();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   121
            sb.append(sep).append(pname);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   122
            if (p.isImplicit()) sb.append("!");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   123
            if (p.isSynthetic()) sb.append("!!");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   124
            sep = ", ";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   125
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   126
            // Set expectations
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   127
            String expect = null;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   128
            boolean allowImplicit = false;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   129
            boolean allowSynthetic = false;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   130
            if (isEnum) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   131
                if (i == 0) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   132
                    expect = "\\$enum\\$name";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   133
                    allowSynthetic = true;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   134
                } else if(i == 1) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   135
                    expect = "\\$enum\\$ordinal";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   136
                    allowSynthetic = true;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   137
                }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   138
            } else if (i == 0) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   139
                if (isAnon) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   140
                    allowImplicit = true;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   141
                } else if (isLocal) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   142
                    allowImplicit = true;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   143
                    expect = "this\\$[0-n]*";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   144
                } else if ((isMember && !isStatic)) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   145
                    allowImplicit = true;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   146
                    if (!isPublic) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   147
                        // some but not all non-public inner classes
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   148
                        // have synthetic argument. For now we give
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   149
                        // the test a bit of slack and allow either.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   150
                        allowSynthetic = true;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   151
                    }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   152
                    expect = "this\\$[0-n]*";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   153
                }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   154
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   155
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   156
            // Check expected flags
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   157
            if (p.isSynthetic() && p.isImplicit()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   158
                error(prefix + "param[" + i + "]='" + pname +
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   159
                      "' both isImplicit() and isSynthetic()");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   160
                break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   161
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   162
            if (allowImplicit && allowSynthetic &&
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   163
                !(p.isSynthetic() || p.isImplicit())) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   164
                error(prefix + "param[" + i + "]='" + pname +
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   165
                      "' isImplicit() or isSynthetic() expected");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   166
                break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   167
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   168
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   169
            if (allowImplicit && !allowSynthetic && !p.isImplicit()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   170
                error(prefix + "param[" + i + "]='" + pname +
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   171
                      "' isImplicit() expected");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   172
                break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   173
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   174
            if (!allowImplicit && allowSynthetic && !p.isSynthetic()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   175
                error(prefix + "param[" + i + "]='" + pname +
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   176
                      "' isSynthetic() expected");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   177
                break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   178
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   179
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   180
            if (!allowImplicit && p.isImplicit()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   181
                error(prefix + "param[" + i + "]='" + pname +
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   182
                      "' isImplicit() unexpected");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   183
                break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   184
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   185
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   186
            if (!allowSynthetic && p.isSynthetic()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   187
                error(prefix + "param[" + i + "]='" + pname +
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   188
                      "' isSynthetic() unexpected");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   189
                break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   190
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   191
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   192
            // Check expected names
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   193
            if (expect != null) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   194
                if (pname.matches(expect))  continue;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   195
                error(prefix + "param[" + i + "]='" + pname +
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   196
                      "' expected '" + expect + "'");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   197
                break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   198
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   199
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   200
            // Test naming convention for explicit parameters.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   201
            boolean fidelity = !isAnon;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   202
            if (param != null && fidelity) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   203
                char ch = param.charAt(0);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   204
                expect =  (++ch) + param;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   205
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   206
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   207
            if (pname != null && fidelity) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   208
                param = pname;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   209
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   210
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   211
            if (expect != null && !expect.equals(pname)) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   212
                error(prefix + "param[" + i + "]='" + pname +
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   213
                      "' expected '" + expect + "'");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   214
                break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   215
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   216
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   217
        if  (c.isSynthetic()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   218
            sb.append(")!!\n");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   219
        } else {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   220
            sb.append(")\n");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   221
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   222
    }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   223
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   224
    void testMethod(Method m) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   225
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   226
        String prefix = clazz.getName() + "." + m.getName() + "() - ";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   227
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   228
        // Parameters must match parameter types
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   229
        int paramTypes =  m.getParameterTypes().length;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   230
        int params = m.getParameters().length;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   231
        if (paramTypes != params) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   232
            error(prefix + "number of parameter types (" + paramTypes
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   233
                  + ") != number of parameters (" + params + ")");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   234
            return;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   235
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   236
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   237
        sb.append(clazz.getName()).append(".").append(m.getName()).append("(");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   238
        String sep = "";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   239
        String param = null;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   240
        int i = -1;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   241
        // For methods we expect all parameters to follow
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   242
        // the test-case design pattern, except synthetic methods.
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   243
        for (Parameter p : m.getParameters()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   244
            i++;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   245
            if (param == null) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   246
                param = p.getName();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   247
                sb.append(sep).append(param);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   248
            } else  {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   249
                char c = param.charAt(0);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   250
                String expect =  m.isSynthetic() ? ("arg" + i) : ((++c) + param);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   251
                param = p.getName();
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   252
                sb.append(sep).append(param);
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   253
                if (!expect.equals(param)) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   254
                    error(prefix + "param[" + i + "]='"
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   255
                          + param + "' expected '" + expect + "'");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   256
                    break;
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   257
                }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   258
            }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   259
            sep = ", ";
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   260
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   261
        if  (m.isSynthetic()) {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   262
            sb.append(")!!\n");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   263
        } else {
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   264
            sb.append(")\n");
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   265
        }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   266
    }
3027c91f329a 8006582: Test for parameter names feature
strarup
parents:
diff changeset
   267
}