test/jdk/java/lang/invoke/MethodHandlesGeneralTest.java
author afarley
Tue, 26 Mar 2019 15:53:36 -0700
changeset 54295 49c4b23d8d0a
parent 51754 594919232b8f
child 54445 a5da0277d9bb
permissions -rw-r--r--
8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields Reviewed-by: mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     1
/*
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     4
 *
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     7
 * published by the Free Software Foundation.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     8
 *
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    13
 * accompanied this code).
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    14
 *
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    18
 *
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    21
 * questions.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    22
 */
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    23
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    24
/* @test
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
    25
 * @bug 8216558
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    26
 * @summary unit tests for java.lang.invoke.MethodHandles
51754
594919232b8f 8210732: remove jdk.testlibrary.Utils
iignatyev
parents: 50037
diff changeset
    27
 * @library /test/lib /java/lang/invoke/common
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    28
 * @compile MethodHandlesTest.java MethodHandlesGeneralTest.java remote/RemoteExample.java
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    29
 * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    30
 *                                 -XX:-VerifyDependencies
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    31
 *                                 -esa
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    32
 *                                 test.java.lang.invoke.MethodHandlesGeneralTest
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    33
 */
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    34
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    35
package test.java.lang.invoke;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    36
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    37
import org.junit.*;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    38
import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    39
import test.java.lang.invoke.remote.RemoteExample;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    40
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    41
import java.lang.invoke.MethodHandle;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    42
import java.lang.invoke.MethodHandleProxies;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    43
import java.lang.invoke.MethodHandles;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    44
import java.lang.invoke.MethodType;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    45
import java.lang.invoke.WrongMethodTypeException;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    46
import java.lang.invoke.MethodHandles.Lookup;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    47
import java.lang.reflect.Array;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    48
import java.lang.reflect.Field;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    49
import java.lang.reflect.Method;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    50
import java.lang.reflect.Modifier;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    51
import java.lang.reflect.UndeclaredThrowableException;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    52
import java.util.ArrayList;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    53
import java.util.Arrays;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    54
import java.util.Collections;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    55
import java.util.Formatter;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    56
import java.util.HashMap;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    57
import java.util.List;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    58
import java.util.Map;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    59
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    60
import static java.lang.invoke.MethodType.methodType;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    61
import static org.junit.Assert.*;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    62
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    63
public class MethodHandlesGeneralTest extends MethodHandlesTest {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    64
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    65
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    66
    public void testFirst() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    67
        verbosity += 9;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    68
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    69
            // left blank for debugging
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    70
        } finally { printCounts(); verbosity -= 9; }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    71
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    72
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    73
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    74
    public void testFindStatic() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    75
        CodeCacheOverflowProcessor.runMHTest(this::testFindStatic0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    76
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    77
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    78
    public void testFindStatic0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    79
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    80
        startTest("findStatic");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    81
        testFindStatic(PubExample.class, void.class, "s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    82
        testFindStatic(Example.class, void.class, "s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    83
        testFindStatic(Example.class, void.class, "pkg_s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    84
        testFindStatic(Example.class, void.class, "pri_s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    85
        testFindStatic(Example.class, void.class, "pro_s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    86
        testFindStatic(PubExample.class, void.class, "Pub/pro_s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    87
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    88
        testFindStatic(Example.class, Object.class, "s1", Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    89
        testFindStatic(Example.class, Object.class, "s2", int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    90
        testFindStatic(Example.class, Object.class, "s3", long.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    91
        testFindStatic(Example.class, Object.class, "s4", int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    92
        testFindStatic(Example.class, Object.class, "s5", long.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    93
        testFindStatic(Example.class, Object.class, "s6", int.class, long.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    94
        testFindStatic(Example.class, Object.class, "s7", float.class, double.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    95
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    96
        testFindStatic(false, PRIVATE, Example.class, void.class, "bogus");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    97
        testFindStatic(false, PRIVATE, Example.class, void.class, "<init>", int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    98
        testFindStatic(false, PRIVATE, Example.class, void.class, "<init>", Void.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
    99
        testFindStatic(false, PRIVATE, Example.class, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   100
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   101
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   102
    void testFindStatic(Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   103
        for (Object[] ac : accessCases(defc, name)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   104
            testFindStatic((Boolean)ac[0], (Lookup)ac[1], defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   105
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   106
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   107
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   108
    void testFindStatic(Lookup lookup, Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   109
        testFindStatic(true, lookup, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   110
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   111
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   112
    void testFindStatic(boolean positive, Lookup lookup, Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   113
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   114
        String methodName = name.substring(1 + name.indexOf('/'));  // foo/bar => foo
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   115
        MethodType type = MethodType.methodType(ret, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   116
        MethodHandle target = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   117
        Exception noAccess = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   118
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   119
            if (verbosity >= 4)  System.out.println("lookup via "+lookup+" of "+defc+" "+name+type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   120
            target = maybeMoveIn(lookup, defc).findStatic(defc, methodName, type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   121
        } catch (ReflectiveOperationException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   122
            noAccess = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   123
            assertExceptionClass(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   124
                (name.contains("bogus") || INIT_REF_CAUSES_NSME && name.contains("<init>"))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   125
                ?   NoSuchMethodException.class
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   126
                :   IllegalAccessException.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   127
                noAccess);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   128
            if (verbosity >= 5)  ex.printStackTrace(System.out);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   129
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   130
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   131
            System.out.println("findStatic "+lookup+": "+defc.getName()+"."+name+"/"+type+" => "+target
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   132
                    +(noAccess == null ? "" : " !! "+noAccess));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   133
        if (positive && noAccess != null)  throw noAccess;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   134
        assertEquals(positive ? "positive test" : "negative test erroneously passed", positive, target != null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   135
        if (!positive)  return; // negative test failed as expected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   136
        assertEquals(type, target.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   137
        assertNameStringContains(target, methodName);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   138
        Object[] args = randomArgs(params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   139
        printCalled(target, name, args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   140
        target.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   141
        assertCalled(name, args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   142
        if (verbosity >= 1)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   143
            System.out.print(':');
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   144
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   145
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   146
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   147
    public void testFindVirtual() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   148
        CodeCacheOverflowProcessor.runMHTest(this::testFindVirtual0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   149
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   150
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   151
    public void testFindVirtual0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   152
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   153
        startTest("findVirtual");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   154
        testFindVirtual(Example.class, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   155
        testFindVirtual(Example.class, void.class, "pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   156
        testFindVirtual(Example.class, void.class, "pri_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   157
        testFindVirtual(Example.class, Object.class, "v1", Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   158
        testFindVirtual(Example.class, Object.class, "v2", Object.class, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   159
        testFindVirtual(Example.class, Object.class, "v2", Object.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   160
        testFindVirtual(Example.class, Object.class, "v2", int.class, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   161
        testFindVirtual(Example.class, Object.class, "v2", int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   162
        testFindVirtual(Example.class, void.class, "pro_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   163
        testFindVirtual(PubExample.class, void.class, "Pub/pro_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   164
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   165
        testFindVirtual(false, PRIVATE, Example.class, Example.class, void.class, "bogus");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   166
        testFindVirtual(false, PRIVATE, Example.class, Example.class, void.class, "<init>", int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   167
        testFindVirtual(false, PRIVATE, Example.class, Example.class, void.class, "<init>", Void.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   168
        testFindVirtual(false, PRIVATE, Example.class, Example.class, void.class, "s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   169
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   170
        // test dispatch
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   171
        testFindVirtual(SubExample.class, SubExample.class, void.class, "Sub/v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   172
        testFindVirtual(SubExample.class, Example.class, void.class, "Sub/v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   173
        testFindVirtual(SubExample.class, IntExample.class, void.class, "Sub/v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   174
        testFindVirtual(SubExample.class, SubExample.class, void.class, "Sub/pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   175
        testFindVirtual(SubExample.class, Example.class, void.class, "Sub/pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   176
        testFindVirtual(Example.class, IntExample.class, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   177
        testFindVirtual(IntExample.Impl.class, IntExample.class, void.class, "Int/v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   178
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   179
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   180
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   181
    public void testFindVirtualClone() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   182
        CodeCacheOverflowProcessor.runMHTest(this::testFindVirtualClone0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   183
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   184
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   185
    public void testFindVirtualClone0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   186
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   187
        // test some ad hoc system methods
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   188
        testFindVirtual(false, PUBLIC, Object.class, Object.class, "clone");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   189
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   190
        // ##### FIXME - disable tests for clone until we figure out how they should work with modules
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   191
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   192
        /*
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   193
        testFindVirtual(true, PUBLIC, Object[].class, Object.class, "clone");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   194
        testFindVirtual(true, PUBLIC, int[].class, Object.class, "clone");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   195
        for (Class<?> cls : new Class<?>[]{ boolean[].class, long[].class, float[].class, char[].class })
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   196
            testFindVirtual(true, PUBLIC, cls, Object.class, "clone");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   197
         */
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   198
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   199
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   200
    void testFindVirtual(Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   201
        Class<?> rcvc = defc;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   202
        testFindVirtual(rcvc, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   203
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   204
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   205
    void testFindVirtual(Class<?> rcvc, Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   206
        for (Object[] ac : accessCases(defc, name)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   207
            testFindVirtual((Boolean)ac[0], (Lookup)ac[1], rcvc, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   208
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   209
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   210
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   211
    void testFindVirtual(Lookup lookup, Class<?> rcvc, Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   212
        testFindVirtual(true, lookup, rcvc, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   213
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   214
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   215
    void testFindVirtual(boolean positive, Lookup lookup, Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   216
        testFindVirtual(positive, lookup, defc, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   217
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   218
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   219
    void testFindVirtual(boolean positive, Lookup lookup, Class<?> rcvc, Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   220
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   221
        String methodName = name.substring(1 + name.indexOf('/'));  // foo/bar => foo
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   222
        MethodType type = MethodType.methodType(ret, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   223
        MethodHandle target = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   224
        Exception noAccess = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   225
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   226
            if (verbosity >= 4)  System.out.println("lookup via "+lookup+" of "+defc+" "+name+type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   227
            target = maybeMoveIn(lookup, defc).findVirtual(defc, methodName, type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   228
        } catch (ReflectiveOperationException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   229
            noAccess = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   230
            assertExceptionClass(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   231
                (name.contains("bogus") || INIT_REF_CAUSES_NSME && name.contains("<init>"))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   232
                ? NoSuchMethodException.class
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   233
                : IllegalAccessException.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   234
                noAccess);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   235
            if (verbosity >= 5)  ex.printStackTrace(System.out);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   236
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   237
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   238
            System.out.println("findVirtual "+lookup+": "+defc.getName()+"."+name+"/"+type+" => "+target
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   239
                    +(noAccess == null ? "" : " !! "+noAccess));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   240
        if (positive && noAccess != null)  throw noAccess;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   241
        assertEquals(positive ? "positive test" : "negative test erroneously passed", positive, target != null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   242
        if (!positive)  return; // negative test failed as expected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   243
        Class<?> selfc = defc;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   244
        // predict receiver type narrowing:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   245
        if (lookup == SUBCLASS &&
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   246
                name.contains("pro_") &&
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   247
                selfc.isAssignableFrom(lookup.lookupClass())) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   248
            selfc = lookup.lookupClass();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   249
            if (name.startsWith("Pub/"))  name = "Rem/"+name.substring(4);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   250
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   251
        Class<?>[] paramsWithSelf = cat(array(Class[].class, (Class)selfc), params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   252
        MethodType typeWithSelf = MethodType.methodType(ret, paramsWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   253
        assertEquals(typeWithSelf, target.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   254
        assertNameStringContains(target, methodName);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   255
        Object[] argsWithSelf = randomArgs(paramsWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   256
        if (selfc.isAssignableFrom(rcvc) && rcvc != selfc)  argsWithSelf[0] = randomArg(rcvc);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   257
        printCalled(target, name, argsWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   258
        Object res = target.invokeWithArguments(argsWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   259
        if (Example.class.isAssignableFrom(defc) || IntExample.class.isAssignableFrom(defc)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   260
            assertCalled(name, argsWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   261
        } else if (name.equals("clone")) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   262
            // Ad hoc method call outside Example.  For Object[].clone.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   263
            printCalled(target, name, argsWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   264
            assertEquals(MethodType.methodType(Object.class, rcvc), target.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   265
            Object orig = argsWithSelf[0];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   266
            assertEquals(orig.getClass(), res.getClass());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   267
            if (res instanceof Object[])
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   268
                assertArrayEquals((Object[])res, (Object[])argsWithSelf[0]);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   269
            assert(Arrays.deepEquals(new Object[]{res}, new Object[]{argsWithSelf[0]}));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   270
        } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   271
            assert(false) : Arrays.asList(positive, lookup, rcvc, defc, ret, name, deepToString(params));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   272
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   273
        if (verbosity >= 1)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   274
            System.out.print(':');
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   275
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   276
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   277
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   278
    public void testFindSpecial() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   279
        CodeCacheOverflowProcessor.runMHTest(this::testFindSpecial0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   280
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   281
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   282
    public void testFindSpecial0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   283
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   284
        startTest("findSpecial");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   285
        testFindSpecial(SubExample.class, Example.class, void.class, false, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   286
        testFindSpecial(SubExample.class, Example.class, void.class, false, "pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   287
        testFindSpecial(RemoteExample.class, PubExample.class, void.class, false, "Pub/pro_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   288
        testFindSpecial(Example.class, IntExample.class, void.class, true, "vd");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   289
        // Do some negative testing:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   290
        for (Lookup lookup : new Lookup[]{ PRIVATE, EXAMPLE, PACKAGE, PUBLIC }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   291
            testFindSpecial(false, lookup, Object.class, Example.class, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   292
            testFindSpecial(false, lookup, SubExample.class, Example.class, void.class, "bogus");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   293
            testFindSpecial(false, lookup, SubExample.class, Example.class, void.class, "<init>", int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   294
            testFindSpecial(false, lookup, SubExample.class, Example.class, void.class, "<init>", Void.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   295
            testFindSpecial(false, lookup, SubExample.class, Example.class, void.class, "s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   296
            testFindSpecial(false, lookup, Example.class, IntExample.class, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   297
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   298
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   299
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   300
    void testFindSpecial(Class<?> specialCaller,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   301
                         Class<?> defc, Class<?> ret, boolean dflt, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   302
        if (specialCaller == RemoteExample.class) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   303
            testFindSpecial(false, EXAMPLE, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   304
            testFindSpecial(false, PRIVATE, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   305
            testFindSpecial(false, PACKAGE, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   306
            testFindSpecial(true, SUBCLASS, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   307
            testFindSpecial(false, PUBLIC, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   308
            return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   309
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   310
        testFindSpecial(true, EXAMPLE, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   311
        testFindSpecial(true, PRIVATE, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   312
        testFindSpecial(false || dflt, PACKAGE,  specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   313
        testFindSpecial(false, SUBCLASS, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   314
        testFindSpecial(false, PUBLIC, specialCaller, defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   315
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   316
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   317
    void testFindSpecial(boolean positive, Lookup lookup, Class<?> specialCaller,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   318
                         Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   319
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   320
        String methodName = name.substring(1 + name.indexOf('/'));  // foo/bar => foo
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   321
        MethodType type = MethodType.methodType(ret, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   322
        Lookup specialLookup = maybeMoveIn(lookup, specialCaller);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   323
        boolean specialAccessOK = (specialLookup.lookupClass() == specialCaller &&
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   324
                                  (specialLookup.lookupModes() & Lookup.PRIVATE) != 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   325
        MethodHandle target = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   326
        Exception noAccess = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   327
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   328
            if (verbosity >= 4)  System.out.println("lookup via "+lookup+" of "+defc+" "+name+type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   329
            if (verbosity >= 5)  System.out.println("  lookup => "+specialLookup);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   330
            target = specialLookup.findSpecial(defc, methodName, type, specialCaller);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   331
        } catch (ReflectiveOperationException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   332
            noAccess = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   333
            assertExceptionClass(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   334
                (!specialAccessOK)  // this check should happen first
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   335
                ? IllegalAccessException.class
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   336
                : (name.contains("bogus") || INIT_REF_CAUSES_NSME && name.contains("<init>"))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   337
                ? NoSuchMethodException.class
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   338
                : IllegalAccessException.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   339
                noAccess);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   340
            if (verbosity >= 5)  ex.printStackTrace(System.out);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   341
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   342
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   343
            System.out.println("findSpecial from "+specialCaller.getName()+" to "+defc.getName()+"."+name+"/"+type+" => "+target
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   344
                               +(target == null ? "" : target.type())
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   345
                               +(noAccess == null ? "" : " !! "+noAccess));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   346
        if (positive && noAccess != null)  throw noAccess;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   347
        assertEquals(positive ? "positive test" : "negative test erroneously passed", positive, target != null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   348
        if (!positive)  return; // negative test failed as expected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   349
        assertEquals(specialCaller, target.type().parameterType(0));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   350
        assertEquals(type, target.type().dropParameterTypes(0,1));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   351
        Class<?>[] paramsWithSelf = cat(array(Class[].class, (Class)specialCaller), params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   352
        MethodType typeWithSelf = MethodType.methodType(ret, paramsWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   353
        assertNameStringContains(target, methodName);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   354
        Object[] args = randomArgs(paramsWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   355
        printCalled(target, name, args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   356
        target.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   357
        assertCalled(name, args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   358
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   359
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   360
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   361
    public void testFindConstructor() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   362
        CodeCacheOverflowProcessor.runMHTest(this::testFindConstructor0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   363
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   364
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   365
    public void testFindConstructor0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   366
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   367
        startTest("findConstructor");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   368
        testFindConstructor(true, EXAMPLE, Example.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   369
        testFindConstructor(true, EXAMPLE, Example.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   370
        testFindConstructor(true, EXAMPLE, Example.class, int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   371
        testFindConstructor(true, EXAMPLE, Example.class, int.class, long.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   372
        testFindConstructor(true, EXAMPLE, Example.class, int.class, float.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   373
        testFindConstructor(true, EXAMPLE, Example.class, int.class, double.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   374
        testFindConstructor(true, EXAMPLE, Example.class, String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   375
        testFindConstructor(true, EXAMPLE, Example.class, int.class, int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   376
        testFindConstructor(true, EXAMPLE, Example.class, int.class, int.class, int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   377
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   378
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   379
    void testFindConstructor(boolean positive, Lookup lookup,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   380
                             Class<?> defc, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   381
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   382
        MethodType type = MethodType.methodType(void.class, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   383
        MethodHandle target = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   384
        Exception noAccess = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   385
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   386
            if (verbosity >= 4)  System.out.println("lookup via "+lookup+" of "+defc+" <init>"+type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   387
            target = lookup.findConstructor(defc, type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   388
        } catch (ReflectiveOperationException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   389
            noAccess = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   390
            assertTrue(noAccess.getClass().getName(), noAccess instanceof IllegalAccessException);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   391
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   392
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   393
            System.out.println("findConstructor "+defc.getName()+".<init>/"+type+" => "+target
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   394
                               +(target == null ? "" : target.type())
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   395
                               +(noAccess == null ? "" : " !! "+noAccess));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   396
        if (positive && noAccess != null)  throw noAccess;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   397
        assertEquals(positive ? "positive test" : "negative test erroneously passed", positive, target != null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   398
        if (!positive)  return; // negative test failed as expected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   399
        assertEquals(type.changeReturnType(defc), target.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   400
        Object[] args = randomArgs(params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   401
        printCalled(target, defc.getSimpleName(), args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   402
        Object obj = target.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   403
        if (!(defc == Example.class && params.length < 2))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   404
            assertCalled(defc.getSimpleName()+".<init>", args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   405
        assertTrue("instance of "+defc.getName(), defc.isInstance(obj));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   406
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   407
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   408
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   409
    public void testBind() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   410
        CodeCacheOverflowProcessor.runMHTest(this::testBind0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   411
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   412
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   413
    public void testBind0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   414
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   415
        startTest("bind");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   416
        testBind(Example.class, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   417
        testBind(Example.class, void.class, "pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   418
        testBind(Example.class, void.class, "pri_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   419
        testBind(Example.class, Object.class, "v1", Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   420
        testBind(Example.class, Object.class, "v2", Object.class, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   421
        testBind(Example.class, Object.class, "v2", Object.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   422
        testBind(Example.class, Object.class, "v2", int.class, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   423
        testBind(Example.class, Object.class, "v2", int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   424
        testBind(false, PRIVATE, Example.class, void.class, "bogus");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   425
        testBind(false, PRIVATE, Example.class, void.class, "<init>", int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   426
        testBind(false, PRIVATE, Example.class, void.class, "<init>", Void.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   427
        testBind(SubExample.class, void.class, "Sub/v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   428
        testBind(SubExample.class, void.class, "Sub/pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   429
        testBind(IntExample.Impl.class, void.class, "Int/v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   430
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   431
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   432
    void testBind(Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   433
        for (Object[] ac : accessCases(defc, name)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   434
            testBind((Boolean)ac[0], (Lookup)ac[1], defc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   435
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   436
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   437
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   438
    void testBind(boolean positive, Lookup lookup, Class<?> defc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   439
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   440
        String methodName = name.substring(1 + name.indexOf('/'));  // foo/bar => foo
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   441
        MethodType type = MethodType.methodType(ret, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   442
        Object receiver = randomArg(defc);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   443
        MethodHandle target = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   444
        Exception noAccess = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   445
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   446
            if (verbosity >= 4)  System.out.println("lookup via "+lookup+" of "+defc+" "+name+type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   447
            target = maybeMoveIn(lookup, defc).bind(receiver, methodName, type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   448
        } catch (ReflectiveOperationException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   449
            noAccess = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   450
            assertExceptionClass(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   451
                (name.contains("bogus") || INIT_REF_CAUSES_NSME && name.contains("<init>"))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   452
                ? NoSuchMethodException.class
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   453
                : IllegalAccessException.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   454
                noAccess);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   455
            if (verbosity >= 5)  ex.printStackTrace(System.out);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   456
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   457
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   458
            System.out.println("bind "+receiver+"."+name+"/"+type+" => "+target
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   459
                    +(noAccess == null ? "" : " !! "+noAccess));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   460
        if (positive && noAccess != null)  throw noAccess;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   461
        assertEquals(positive ? "positive test" : "negative test erroneously passed", positive, target != null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   462
        if (!positive)  return; // negative test failed as expected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   463
        assertEquals(type, target.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   464
        Object[] args = randomArgs(params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   465
        printCalled(target, name, args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   466
        target.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   467
        Object[] argsWithReceiver = cat(array(Object[].class, receiver), args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   468
        assertCalled(name, argsWithReceiver);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   469
        if (verbosity >= 1)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   470
            System.out.print(':');
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   471
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   472
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   473
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   474
    public void testUnreflect() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   475
        CodeCacheOverflowProcessor.runMHTest(this::testUnreflect0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   476
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   477
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   478
    public void testUnreflect0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   479
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   480
        startTest("unreflect");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   481
        testUnreflect(Example.class, true, void.class, "s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   482
        testUnreflect(Example.class, true, void.class, "pro_s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   483
        testUnreflect(Example.class, true, void.class, "pkg_s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   484
        testUnreflect(Example.class, true, void.class, "pri_s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   485
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   486
        testUnreflect(Example.class, true, Object.class, "s1", Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   487
        testUnreflect(Example.class, true, Object.class, "s2", int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   488
        testUnreflect(Example.class, true, Object.class, "s3", long.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   489
        testUnreflect(Example.class, true, Object.class, "s4", int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   490
        testUnreflect(Example.class, true, Object.class, "s5", long.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   491
        testUnreflect(Example.class, true, Object.class, "s6", int.class, long.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   492
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   493
        testUnreflect(Example.class, false, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   494
        testUnreflect(Example.class, false, void.class, "pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   495
        testUnreflect(Example.class, false, void.class, "pri_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   496
        testUnreflect(Example.class, false, Object.class, "v1", Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   497
        testUnreflect(Example.class, false, Object.class, "v2", Object.class, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   498
        testUnreflect(Example.class, false, Object.class, "v2", Object.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   499
        testUnreflect(Example.class, false, Object.class, "v2", int.class, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   500
        testUnreflect(Example.class, false, Object.class, "v2", int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   501
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   502
        // Test a public final member in another package:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   503
        testUnreflect(RemoteExample.class, false, void.class, "Rem/fin_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   504
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   505
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   506
    void testUnreflect(Class<?> defc, boolean isStatic, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   507
        for (Object[] ac : accessCases(defc, name)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   508
            testUnreflectMaybeSpecial(null, (Boolean)ac[0], (Lookup)ac[1], defc, (isStatic ? null : defc), ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   509
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   510
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   511
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   512
    void testUnreflect(Class<?> defc, Class<?> rcvc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   513
        for (Object[] ac : accessCases(defc, name)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   514
            testUnreflectMaybeSpecial(null, (Boolean)ac[0], (Lookup)ac[1], defc, rcvc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   515
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   516
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   517
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   518
    void testUnreflectMaybeSpecial(Class<?> specialCaller,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   519
                                   boolean positive, Lookup lookup,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   520
                                   Class<?> defc, Class<?> rcvc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   521
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   522
        String methodName = name.substring(1 + name.indexOf('/'));  // foo/bar => foo
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   523
        MethodType type = MethodType.methodType(ret, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   524
        Lookup specialLookup = (specialCaller != null ? maybeMoveIn(lookup, specialCaller) : null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   525
        boolean specialAccessOK = (specialCaller != null &&
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   526
                                  specialLookup.lookupClass() == specialCaller &&
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   527
                                  (specialLookup.lookupModes() & Lookup.PRIVATE) != 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   528
        Method rmethod = defc.getDeclaredMethod(methodName, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   529
        MethodHandle target = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   530
        Exception noAccess = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   531
        boolean isStatic = (rcvc == null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   532
        boolean isSpecial = (specialCaller != null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   533
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   534
            if (verbosity >= 4)  System.out.println("lookup via "+lookup+" of "+defc+" "+name+type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   535
            if (isSpecial)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   536
                target = specialLookup.unreflectSpecial(rmethod, specialCaller);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   537
            else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   538
                target = maybeMoveIn(lookup, defc).unreflect(rmethod);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   539
        } catch (ReflectiveOperationException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   540
            noAccess = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   541
            assertExceptionClass(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   542
                IllegalAccessException.class,  // NSME is impossible, since it was already reflected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   543
                noAccess);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   544
            if (verbosity >= 5)  ex.printStackTrace(System.out);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   545
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   546
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   547
            System.out.println("unreflect"+(isSpecial?"Special":"")+" "+defc.getName()+"."+name+"/"+type
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   548
                               +(!isSpecial ? "" : " specialCaller="+specialCaller)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   549
                               +( isStatic  ? "" : " receiver="+rcvc)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   550
                               +" => "+target
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   551
                               +(noAccess == null ? "" : " !! "+noAccess));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   552
        if (positive && noAccess != null)  throw noAccess;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   553
        assertEquals(positive ? "positive test" : "negative test erroneously passed", positive, target != null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   554
        if (!positive)  return; // negative test failed as expected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   555
        assertEquals(isStatic, Modifier.isStatic(rmethod.getModifiers()));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   556
        Class<?>[] paramsMaybeWithSelf = params;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   557
        if (!isStatic) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   558
            paramsMaybeWithSelf = cat(array(Class[].class, (Class)rcvc), params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   559
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   560
        MethodType typeMaybeWithSelf = MethodType.methodType(ret, paramsMaybeWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   561
        if (isStatic) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   562
            assertEquals(typeMaybeWithSelf, target.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   563
        } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   564
            if (isSpecial)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   565
                assertEquals(specialCaller, target.type().parameterType(0));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   566
            else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   567
                assertEquals(defc, target.type().parameterType(0));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   568
            assertEquals(typeMaybeWithSelf, target.type().changeParameterType(0, rcvc));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   569
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   570
        Object[] argsMaybeWithSelf = randomArgs(paramsMaybeWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   571
        printCalled(target, name, argsMaybeWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   572
        target.invokeWithArguments(argsMaybeWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   573
        assertCalled(name, argsMaybeWithSelf);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   574
        if (verbosity >= 1)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   575
            System.out.print(':');
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   576
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   577
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   578
    void testUnreflectSpecial(Class<?> defc, Class<?> rcvc, Class<?> ret, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   579
        for (Object[] ac : accessCases(defc, name, true)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   580
            Class<?> specialCaller = rcvc;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   581
            testUnreflectMaybeSpecial(specialCaller, (Boolean)ac[0], (Lookup)ac[1], defc, rcvc, ret, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   582
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   583
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   584
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   585
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   586
    public void testUnreflectSpecial() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   587
        CodeCacheOverflowProcessor.runMHTest(this::testUnreflectSpecial0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   588
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   589
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   590
    public void testUnreflectSpecial0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   591
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   592
        startTest("unreflectSpecial");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   593
        testUnreflectSpecial(Example.class, Example.class, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   594
        testUnreflectSpecial(Example.class, SubExample.class, void.class, "v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   595
        testUnreflectSpecial(Example.class, Example.class, void.class, "pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   596
        testUnreflectSpecial(Example.class, SubExample.class, void.class, "pkg_v0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   597
        testUnreflectSpecial(Example.class, Example.class, Object.class, "v2", int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   598
        testUnreflectSpecial(Example.class, SubExample.class, Object.class, "v2", int.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   599
        testUnreflectMaybeSpecial(Example.class, false, PRIVATE, Example.class, Example.class, void.class, "s0");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   600
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   601
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   602
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   603
    public void testUnreflectGetter() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   604
        CodeCacheOverflowProcessor.runMHTest(this::testUnreflectGetter0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   605
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   606
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   607
    public void testUnreflectGetter0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   608
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   609
        startTest("unreflectGetter");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   610
        testGetter(TEST_UNREFLECT);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   611
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   612
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   613
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   614
    public void testFindGetter() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   615
        CodeCacheOverflowProcessor.runMHTest(this::testFindGetter0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   616
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   617
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   618
    public void testFindGetter0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   619
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   620
        startTest("findGetter");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   621
        testGetter(TEST_FIND_FIELD);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   622
        testGetter(TEST_FIND_FIELD | TEST_BOUND);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   623
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   624
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   625
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   626
    public void testFindStaticGetter() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   627
        CodeCacheOverflowProcessor.runMHTest(this::testFindStaticGetter0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   628
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   629
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   630
    public void testFindStaticGetter0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   631
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   632
        startTest("findStaticGetter");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   633
        testGetter(TEST_FIND_STATIC);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   634
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   635
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   636
    public void testGetter(int testMode) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   637
        Lookup lookup = PRIVATE;  // FIXME: test more lookups than this one
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   638
        for (Object[] c : HasFields.CASES) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   639
            boolean positive = (c[1] != Error.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   640
            testGetter(positive, lookup, c[0], c[1], testMode);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   641
            if (positive)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   642
                testGetter(positive, lookup, c[0], c[1], testMode | TEST_NPE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   643
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   644
        testGetter(true, lookup,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   645
                   new Object[]{ true,  System.class, "out", java.io.PrintStream.class },
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   646
                   System.out, testMode);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   647
        for (int isStaticN = 0; isStaticN <= 1; isStaticN++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   648
            testGetter(false, lookup,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   649
                       new Object[]{ (isStaticN != 0), System.class, "bogus", char.class },
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   650
                       null, testMode);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   651
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   652
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   653
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   654
    public void testGetter(boolean positive, MethodHandles.Lookup lookup,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   655
                           Object fieldRef, Object value, int testMode) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   656
        testAccessor(positive, lookup, fieldRef, value, testMode);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   657
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   658
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   659
    public void testAccessor(boolean positive0, MethodHandles.Lookup lookup,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   660
                             Object fieldRef, Object value, int testMode0) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   661
        if (verbosity >= 4)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   662
            System.out.println("testAccessor"+Arrays.deepToString(new Object[]{positive0, lookup, fieldRef, value, testMode0}));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   663
        boolean isGetter = ((testMode0 & TEST_SETTER) == 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   664
        boolean doBound  = ((testMode0 & TEST_BOUND) != 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   665
        boolean testNPE  = ((testMode0 & TEST_NPE) != 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   666
        int testMode = testMode0 & ~(TEST_SETTER | TEST_BOUND | TEST_NPE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   667
        boolean positive = positive0 && !testNPE;
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   668
        boolean isFinal;
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   669
        boolean isStatic;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   670
        Class<?> fclass;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   671
        String   fname;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   672
        Class<?> ftype;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   673
        Field f = (fieldRef instanceof Field ? (Field)fieldRef : null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   674
        if (f != null) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   675
            isStatic = Modifier.isStatic(f.getModifiers());
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   676
            isFinal  = Modifier.isFinal(f.getModifiers());
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   677
            fclass   = f.getDeclaringClass();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   678
            fname    = f.getName();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   679
            ftype    = f.getType();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   680
        } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   681
            Object[] scnt = (Object[]) fieldRef;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   682
            isStatic = (Boolean)  scnt[0];
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   683
            isFinal  = false;
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   684
            fclass   = (Class<?>) scnt[1];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   685
            fname    = (String)   scnt[2];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   686
            ftype    = (Class<?>) scnt[3];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   687
            try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   688
                f = fclass.getDeclaredField(fname);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   689
            } catch (ReflectiveOperationException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   690
                f = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   691
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   692
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   693
        if (!testModeMatches(testMode, isStatic))  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   694
        if (f == null && testMode == TEST_UNREFLECT)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   695
        if (testNPE && isStatic)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   696
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   697
        MethodType expType;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   698
        if (isGetter)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   699
            expType = MethodType.methodType(ftype, HasFields.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   700
        else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   701
            expType = MethodType.methodType(void.class, HasFields.class, ftype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   702
        if (isStatic)  expType = expType.dropParameterTypes(0, 1);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   703
        Exception noAccess = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   704
        MethodHandle mh;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   705
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   706
            switch (testMode0 & ~(TEST_BOUND | TEST_NPE)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   707
            case TEST_UNREFLECT:   mh = lookup.unreflectGetter(f);                      break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   708
            case TEST_FIND_FIELD:  mh = lookup.findGetter(fclass, fname, ftype);        break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   709
            case TEST_FIND_STATIC: mh = lookup.findStaticGetter(fclass, fname, ftype);  break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   710
            case TEST_SETTER|
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   711
                 TEST_UNREFLECT:   mh = lookup.unreflectSetter(f);                      break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   712
            case TEST_SETTER|
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   713
                 TEST_FIND_FIELD:  mh = lookup.findSetter(fclass, fname, ftype);        break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   714
            case TEST_SETTER|
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   715
                 TEST_FIND_STATIC: mh = lookup.findStaticSetter(fclass, fname, ftype);  break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   716
            default:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   717
                throw new InternalError("testMode="+testMode);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   718
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   719
        } catch (ReflectiveOperationException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   720
            mh = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   721
            noAccess = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   722
            assertExceptionClass(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   723
                (fname.contains("bogus"))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   724
                ?   NoSuchFieldException.class
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   725
                :   IllegalAccessException.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   726
                noAccess);
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   727
            if (((testMode0 & TEST_SETTER) != 0) && (isFinal && isStatic)) return; // Final static field setter test failed as intended.
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   728
            if (verbosity >= 5)  ex.printStackTrace(System.out);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   729
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   730
        if (verbosity >= 3)
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   731
            System.out.println((((testMode0 & TEST_UNREFLECT) != 0)?"unreflect":"find")
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   732
                              +(((testMode0 & TEST_FIND_STATIC) != 0)?"Static":"")
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   733
                              +(isGetter?"Getter":"Setter")
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   734
                              +" "+fclass.getName()+"."+fname+"/"+ftype
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   735
                              +" => "+mh
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   736
                              +(noAccess == null ? "" : " !! "+noAccess));
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   737
        if (positive && !testNPE && noAccess != null)  throw new RuntimeException(noAccess);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   738
        assertEquals(positive0 ? "positive test" : "negative test erroneously passed", positive0, mh != null);
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   739
        assertFalse("Setter methods should throw an exception if passed a final static field.", ((testMode0 & TEST_SETTER) != 0) && (isFinal && isStatic));
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   740
        if (!positive && !testNPE)  return; // negative access test failed as expected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   741
        assertEquals((isStatic ? 0 : 1)+(isGetter ? 0 : 1), mh.type().parameterCount());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   742
        assertSame(mh.type(), expType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   743
        //assertNameStringContains(mh, fname);  // This does not hold anymore with LFs
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   744
        HasFields fields = new HasFields();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   745
        HasFields fieldsForMH = fields;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   746
        if (testNPE)  fieldsForMH = null;  // perturb MH argument to elicit expected error
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   747
        if (doBound)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   748
            mh = mh.bindTo(fieldsForMH);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   749
        Object sawValue;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   750
        Class<?> vtype = ftype;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   751
        if (ftype != int.class)  vtype = Object.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   752
        if (isGetter) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   753
            mh = mh.asType(mh.type().generic()
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   754
                           .changeReturnType(vtype));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   755
        } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   756
            int last = mh.type().parameterCount() - 1;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   757
            mh = mh.asType(mh.type().generic()
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   758
                           .changeReturnType(void.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   759
                           .changeParameterType(last, vtype));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   760
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   761
        if (f != null && f.getDeclaringClass() == HasFields.class) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   762
            assertEquals(f.get(fields), value);  // clean to start with
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   763
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   764
        Throwable caughtEx = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   765
        if (isGetter) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   766
            Object expValue = value;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   767
            for (int i = 0; i <= 1; i++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   768
                sawValue = null;  // make DA rules happy under try/catch
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   769
                try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   770
                    if (isStatic || doBound) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   771
                        if (ftype == int.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   772
                            sawValue = (int) mh.invokeExact();  // do these exactly
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   773
                        else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   774
                            sawValue = mh.invokeExact();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   775
                    } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   776
                        if (ftype == int.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   777
                            sawValue = (int) mh.invokeExact((Object) fieldsForMH);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   778
                        else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   779
                            sawValue = mh.invokeExact((Object) fieldsForMH);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   780
                    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   781
                } catch (RuntimeException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   782
                    if (ex instanceof NullPointerException && testNPE) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   783
                        caughtEx = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   784
                        break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   785
                    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   786
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   787
                assertEquals(sawValue, expValue);
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   788
                if (f != null && f.getDeclaringClass() == HasFields.class && !isFinal) {
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   789
                    Object random = randomArg(ftype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   790
                    f.set(fields, random);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   791
                    expValue = random;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   792
                } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   793
                    break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   794
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   795
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   796
        } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   797
            for (int i = 0; i <= 1; i++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   798
                Object putValue = randomArg(ftype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   799
                try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   800
                    if (isStatic || doBound) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   801
                        if (ftype == int.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   802
                            mh.invokeExact((int)putValue);  // do these exactly
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   803
                        else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   804
                            mh.invokeExact(putValue);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   805
                    } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   806
                        if (ftype == int.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   807
                            mh.invokeExact((Object) fieldsForMH, (int)putValue);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   808
                        else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   809
                            mh.invokeExact((Object) fieldsForMH, putValue);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   810
                    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   811
                } catch (RuntimeException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   812
                    if (ex instanceof NullPointerException && testNPE) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   813
                        caughtEx = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   814
                        break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   815
                    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   816
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   817
                if (f != null && f.getDeclaringClass() == HasFields.class) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   818
                    assertEquals(f.get(fields), putValue);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   819
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   820
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   821
        }
54295
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   822
        if ((f != null) && (f.getDeclaringClass() == HasFields.class) && !isFinal) {
49c4b23d8d0a 8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
afarley
parents: 51754
diff changeset
   823
            f.set(fields, value);  // put it back if we changed it.
50037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   824
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   825
        if (testNPE) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   826
            if (caughtEx == null || !(caughtEx instanceof NullPointerException))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   827
                throw new RuntimeException("failed to catch NPE exception"+(caughtEx == null ? " (caughtEx=null)" : ""), caughtEx);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   828
            caughtEx = null;  // nullify expected exception
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   829
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   830
        if (caughtEx != null) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   831
            throw new RuntimeException("unexpected exception", caughtEx);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   832
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   833
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   834
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   835
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   836
    public void testUnreflectSetter() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   837
        CodeCacheOverflowProcessor.runMHTest(this::testUnreflectSetter0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   838
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   839
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   840
    public void testUnreflectSetter0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   841
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   842
        startTest("unreflectSetter");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   843
        testSetter(TEST_UNREFLECT);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   844
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   845
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   846
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   847
    public void testFindSetter() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   848
        CodeCacheOverflowProcessor.runMHTest(this::testFindSetter0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   849
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   850
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   851
    public void testFindSetter0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   852
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   853
        startTest("findSetter");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   854
        testSetter(TEST_FIND_FIELD);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   855
        testSetter(TEST_FIND_FIELD | TEST_BOUND);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   856
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   857
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   858
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   859
    public void testFindStaticSetter() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   860
        CodeCacheOverflowProcessor.runMHTest(this::testFindStaticSetter0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   861
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   862
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   863
    public void testFindStaticSetter0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   864
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   865
        startTest("findStaticSetter");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   866
        testSetter(TEST_FIND_STATIC);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   867
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   868
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   869
    public void testSetter(int testMode) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   870
        Lookup lookup = PRIVATE;  // FIXME: test more lookups than this one
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   871
        for (Object[] c : HasFields.CASES) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   872
            boolean positive = (c[1] != Error.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   873
            testSetter(positive, lookup, c[0], c[1], testMode);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   874
            if (positive)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   875
                testSetter(positive, lookup, c[0], c[1], testMode | TEST_NPE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   876
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   877
        for (int isStaticN = 0; isStaticN <= 1; isStaticN++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   878
            testSetter(false, lookup,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   879
                       new Object[]{ (isStaticN != 0), System.class, "bogus", char.class },
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   880
                       null, testMode);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   881
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   882
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   883
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   884
    public void testSetter(boolean positive, MethodHandles.Lookup lookup,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   885
                           Object fieldRef, Object value, int testMode) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   886
        testAccessor(positive, lookup, fieldRef, value, testMode | TEST_SETTER);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   887
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   888
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   889
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   890
    public void testArrayElementGetter() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   891
        CodeCacheOverflowProcessor.runMHTest(this::testArrayElementGetter0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   892
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   893
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   894
    public void testArrayElementGetter0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   895
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   896
        startTest("arrayElementGetter");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   897
        testArrayElementGetterSetter(false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   898
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   899
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   900
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   901
    public void testArrayElementSetter() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   902
        CodeCacheOverflowProcessor.runMHTest(this::testArrayElementSetter0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   903
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   904
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   905
    public void testArrayElementSetter0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   906
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   907
        startTest("arrayElementSetter");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   908
        testArrayElementGetterSetter(true);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   909
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   910
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   911
    private static final int TEST_ARRAY_NONE = 0, TEST_ARRAY_NPE = 1, TEST_ARRAY_OOB = 2, TEST_ARRAY_ASE = 3;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   912
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   913
    public void testArrayElementGetterSetter(boolean testSetter) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   914
        testArrayElementGetterSetter(testSetter, TEST_ARRAY_NONE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   915
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   916
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   917
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   918
    public void testArrayElementErrors() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   919
        CodeCacheOverflowProcessor.runMHTest(this::testArrayElementErrors0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   920
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   921
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   922
    public void testArrayElementErrors0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   923
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   924
        startTest("arrayElementErrors");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   925
        testArrayElementGetterSetter(false, TEST_ARRAY_NPE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   926
        testArrayElementGetterSetter(true, TEST_ARRAY_NPE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   927
        testArrayElementGetterSetter(false, TEST_ARRAY_OOB);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   928
        testArrayElementGetterSetter(true, TEST_ARRAY_OOB);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   929
        testArrayElementGetterSetter(new Object[10], true, TEST_ARRAY_ASE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   930
        testArrayElementGetterSetter(new Example[10], true, TEST_ARRAY_ASE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   931
        testArrayElementGetterSetter(new IntExample[10], true, TEST_ARRAY_ASE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   932
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   933
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   934
    public void testArrayElementGetterSetter(boolean testSetter, int negTest) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   935
        testArrayElementGetterSetter(new String[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   936
        testArrayElementGetterSetter(new Iterable<?>[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   937
        testArrayElementGetterSetter(new Example[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   938
        testArrayElementGetterSetter(new IntExample[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   939
        testArrayElementGetterSetter(new Object[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   940
        testArrayElementGetterSetter(new boolean[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   941
        testArrayElementGetterSetter(new byte[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   942
        testArrayElementGetterSetter(new char[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   943
        testArrayElementGetterSetter(new short[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   944
        testArrayElementGetterSetter(new int[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   945
        testArrayElementGetterSetter(new float[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   946
        testArrayElementGetterSetter(new long[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   947
        testArrayElementGetterSetter(new double[10], testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   948
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   949
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   950
    public void testArrayElementGetterSetter(Object array, boolean testSetter, int negTest) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   951
        boolean positive = (negTest == TEST_ARRAY_NONE);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   952
        int length = Array.getLength(array);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   953
        Class<?> arrayType = array.getClass();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   954
        Class<?> elemType = arrayType.getComponentType();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   955
        Object arrayToMH = array;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   956
        // this stanza allows negative tests to make argument perturbations:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   957
        switch (negTest) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   958
        case TEST_ARRAY_NPE:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   959
            arrayToMH = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   960
            break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   961
        case TEST_ARRAY_OOB:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   962
            assert(length > 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   963
            arrayToMH = Array.newInstance(elemType, 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   964
            break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   965
        case TEST_ARRAY_ASE:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   966
            assert(testSetter && !elemType.isPrimitive());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   967
            if (elemType == Object.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   968
                arrayToMH = new StringBuffer[length];  // very random subclass of Object!
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   969
            else if (elemType == Example.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   970
                arrayToMH = new SubExample[length];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   971
            else if (elemType == IntExample.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   972
                arrayToMH = new SubIntExample[length];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   973
            else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   974
                return;  // can't make an ArrayStoreException test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   975
            assert(arrayType.isInstance(arrayToMH))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   976
                : Arrays.asList(arrayType, arrayToMH.getClass(), testSetter, negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   977
            break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   978
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   979
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   980
        if (verbosity > 2)  System.out.println("array type = "+array.getClass().getComponentType().getName()+"["+length+"]"+(positive ? "" : " negative test #"+negTest+" using "+Arrays.deepToString(new Object[]{arrayToMH})));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   981
        MethodType expType = !testSetter
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   982
                ? MethodType.methodType(elemType,   arrayType, int.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   983
                : MethodType.methodType(void.class, arrayType, int.class, elemType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   984
        MethodHandle mh = !testSetter
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   985
                ? MethodHandles.arrayElementGetter(arrayType)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   986
                : MethodHandles.arrayElementSetter(arrayType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   987
        assertSame(mh.type(), expType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   988
        if (elemType != int.class && elemType != boolean.class) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   989
            MethodType gtype = mh.type().generic().changeParameterType(1, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   990
            if (testSetter)  gtype = gtype.changeReturnType(void.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   991
            mh = mh.asType(gtype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   992
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   993
        Object sawValue, expValue;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   994
        List<Object> model = array2list(array);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   995
        Throwable caughtEx = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   996
        for (int i = 0; i < length; i++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   997
            // update array element
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   998
            Object random = randomArg(elemType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
   999
            model.set(i, random);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1000
            if (testSetter) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1001
                try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1002
                    if (elemType == int.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1003
                        mh.invokeExact((int[]) arrayToMH, i, (int)random);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1004
                    else if (elemType == boolean.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1005
                        mh.invokeExact((boolean[]) arrayToMH, i, (boolean)random);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1006
                    else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1007
                        mh.invokeExact(arrayToMH, i, random);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1008
                } catch (RuntimeException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1009
                    caughtEx = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1010
                    break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1011
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1012
                assertEquals(model, array2list(array));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1013
            } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1014
                Array.set(array, i, random);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1015
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1016
            if (verbosity >= 5) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1017
                List<Object> array2list = array2list(array);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1018
                System.out.println("a["+i+"]="+random+" => "+array2list);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1019
                if (!array2list.equals(model))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1020
                    System.out.println("***   != "+model);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1021
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1022
            // observe array element
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1023
            sawValue = Array.get(array, i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1024
            if (!testSetter) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1025
                expValue = sawValue;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1026
                try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1027
                    if (elemType == int.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1028
                        sawValue = (int) mh.invokeExact((int[]) arrayToMH, i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1029
                    else if (elemType == boolean.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1030
                        sawValue = (boolean) mh.invokeExact((boolean[]) arrayToMH, i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1031
                    else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1032
                        sawValue = mh.invokeExact(arrayToMH, i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1033
                } catch (RuntimeException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1034
                    caughtEx = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1035
                    break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1036
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1037
                assertEquals(sawValue, expValue);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1038
                assertEquals(model, array2list(array));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1039
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1040
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1041
        if (!positive) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1042
            if (caughtEx == null)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1043
                throw new RuntimeException("failed to catch exception for negTest="+negTest);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1044
            // test the kind of exception
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1045
            Class<?> reqType = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1046
            switch (negTest) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1047
            case TEST_ARRAY_ASE:  reqType = ArrayStoreException.class; break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1048
            case TEST_ARRAY_OOB:  reqType = ArrayIndexOutOfBoundsException.class; break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1049
            case TEST_ARRAY_NPE:  reqType = NullPointerException.class; break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1050
            default:              assert(false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1051
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1052
            if (reqType.isInstance(caughtEx)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1053
                caughtEx = null;  // nullify expected exception
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1054
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1055
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1056
        if (caughtEx != null) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1057
            throw new RuntimeException("unexpected exception", caughtEx);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1058
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1059
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1060
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1061
    List<Object> array2list(Object array) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1062
        int length = Array.getLength(array);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1063
        ArrayList<Object> model = new ArrayList<>(length);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1064
        for (int i = 0; i < length; i++)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1065
            model.add(Array.get(array, i));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1066
        return model;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1067
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1068
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1069
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1070
    public void testConvertArguments() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1071
        CodeCacheOverflowProcessor.runMHTest(this::testConvertArguments0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1072
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1073
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1074
    public void testConvertArguments0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1075
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1076
        startTest("convertArguments");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1077
        testConvert(Callee.ofType(1), null, "id", int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1078
        testConvert(Callee.ofType(1), null, "id", String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1079
        testConvert(Callee.ofType(1), null, "id", Integer.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1080
        testConvert(Callee.ofType(1), null, "id", short.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1081
        testConvert(Callee.ofType(1), null, "id", char.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1082
        testConvert(Callee.ofType(1), null, "id", byte.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1083
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1084
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1085
    void testConvert(MethodHandle id, Class<?> rtype, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1086
        testConvert(true, id, rtype, name, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1087
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1088
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1089
    void testConvert(boolean positive,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1090
                     MethodHandle id, Class<?> rtype, String name, Class<?>... params) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1091
        countTest(positive);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1092
        MethodType idType = id.type();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1093
        if (rtype == null)  rtype = idType.returnType();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1094
        for (int i = 0; i < params.length; i++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1095
            if (params[i] == null)  params[i] = idType.parameterType(i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1096
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1097
        // simulate the pairwise conversion
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1098
        MethodType newType = MethodType.methodType(rtype, params);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1099
        Object[] args = randomArgs(newType.parameterArray());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1100
        Object[] convArgs = args.clone();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1101
        for (int i = 0; i < args.length; i++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1102
            Class<?> src = newType.parameterType(i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1103
            Class<?> dst = idType.parameterType(i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1104
            if (src != dst)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1105
                convArgs[i] = castToWrapper(convArgs[i], dst);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1106
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1107
        Object convResult = id.invokeWithArguments(convArgs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1108
        {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1109
            Class<?> dst = newType.returnType();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1110
            Class<?> src = idType.returnType();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1111
            if (src != dst)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1112
                convResult = castToWrapper(convResult, dst);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1113
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1114
        MethodHandle target = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1115
        RuntimeException error = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1116
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1117
            target = id.asType(newType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1118
        } catch (WrongMethodTypeException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1119
            error = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1120
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1121
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1122
            System.out.println("convert "+id+ " to "+newType+" => "+target
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1123
                    +(error == null ? "" : " !! "+error));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1124
        if (positive && error != null)  throw error;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1125
        assertEquals(positive ? "positive test" : "negative test erroneously passed", positive, target != null);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1126
        if (!positive)  return; // negative test failed as expected
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1127
        assertEquals(newType, target.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1128
        printCalled(target, id.toString(), args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1129
        Object result = target.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1130
        assertCalled(name, convArgs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1131
        assertEquals(convResult, result);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1132
        if (verbosity >= 1)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1133
            System.out.print(':');
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1134
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1135
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1136
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1137
    public void testVarargsCollector() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1138
        CodeCacheOverflowProcessor.runMHTest(this::testVarargsCollector0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1139
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1140
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1141
    public void testVarargsCollector0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1142
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1143
        startTest("varargsCollector");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1144
        MethodHandle vac0 = PRIVATE.findStatic(MethodHandlesTest.class, "called",
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1145
                               MethodType.methodType(Object.class, String.class, Object[].class));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1146
        vac0 = vac0.bindTo("vac");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1147
        MethodHandle vac = vac0.asVarargsCollector(Object[].class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1148
        testConvert(true, vac.asType(MethodType.genericMethodType(0)), null, "vac");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1149
        testConvert(true, vac.asType(MethodType.genericMethodType(0)), null, "vac");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1150
        for (Class<?> at : new Class<?>[] { Object.class, String.class, Integer.class }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1151
            testConvert(true, vac.asType(MethodType.genericMethodType(1)), null, "vac", at);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1152
            testConvert(true, vac.asType(MethodType.genericMethodType(2)), null, "vac", at, at);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1153
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1154
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1155
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1156
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1157
    public void testFilterReturnValue() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1158
        CodeCacheOverflowProcessor.runMHTest(this::testFilterReturnValue0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1159
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1160
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1161
    public void testFilterReturnValue0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1162
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1163
        startTest("filterReturnValue");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1164
        Class<?> classOfVCList = varargsList(1).invokeWithArguments(0).getClass();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1165
        assertTrue(List.class.isAssignableFrom(classOfVCList));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1166
        for (int nargs = 0; nargs <= 3; nargs++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1167
            for (Class<?> rtype : new Class<?>[] { Object.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1168
                                                   List.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1169
                                                   int.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1170
                                                   byte.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1171
                                                   long.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1172
                                                   CharSequence.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1173
                                                   String.class }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1174
                testFilterReturnValue(nargs, rtype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1175
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1176
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1177
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1178
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1179
    void testFilterReturnValue(int nargs, Class<?> rtype) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1180
        countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1181
        MethodHandle target = varargsList(nargs, rtype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1182
        MethodHandle filter;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1183
        if (List.class.isAssignableFrom(rtype) || rtype.isAssignableFrom(List.class))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1184
            filter = varargsList(1);  // add another layer of list-ness
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1185
        else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1186
            filter = MethodHandles.identity(rtype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1187
        filter = filter.asType(MethodType.methodType(target.type().returnType(), rtype));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1188
        Object[] argsToPass = randomArgs(nargs, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1189
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1190
            System.out.println("filter "+target+" to "+rtype.getSimpleName()+" with "+filter);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1191
        MethodHandle target2 = MethodHandles.filterReturnValue(target, filter);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1192
        if (verbosity >= 4)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1193
            System.out.println("filtered target: "+target2);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1194
        // Simulate expected effect of filter on return value:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1195
        Object unfiltered = target.invokeWithArguments(argsToPass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1196
        Object expected = filter.invokeWithArguments(unfiltered);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1197
        if (verbosity >= 4)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1198
            System.out.println("unfiltered: "+unfiltered+" : "+unfiltered.getClass().getSimpleName());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1199
        if (verbosity >= 4)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1200
            System.out.println("expected: "+expected+" : "+expected.getClass().getSimpleName());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1201
        Object result = target2.invokeWithArguments(argsToPass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1202
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1203
            System.out.println("result: "+result+" : "+result.getClass().getSimpleName());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1204
        if (!expected.equals(result))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1205
            System.out.println("*** fail at n/rt = "+nargs+"/"+rtype.getSimpleName()+": "+
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1206
                               Arrays.asList(argsToPass)+" => "+result+" != "+expected);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1207
        assertEquals(expected, result);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1208
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1209
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1210
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1211
    public void testFilterArguments() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1212
        CodeCacheOverflowProcessor.runMHTest(this::testFilterArguments0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1213
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1214
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1215
    public void testFilterArguments0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1216
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1217
        startTest("filterArguments");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1218
        for (int nargs = 1; nargs <= 6; nargs++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1219
            for (int pos = 0; pos < nargs; pos++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1220
                testFilterArguments(nargs, pos);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1221
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1222
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1223
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1224
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1225
    void testFilterArguments(int nargs, int pos) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1226
        countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1227
        MethodHandle target = varargsList(nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1228
        MethodHandle filter = varargsList(1);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1229
        filter = filter.asType(filter.type().generic());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1230
        Object[] argsToPass = randomArgs(nargs, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1231
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1232
            System.out.println("filter "+target+" at "+pos+" with "+filter);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1233
        MethodHandle target2 = MethodHandles.filterArguments(target, pos, filter);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1234
        // Simulate expected effect of filter on arglist:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1235
        Object[] filteredArgs = argsToPass.clone();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1236
        filteredArgs[pos] = filter.invokeExact(filteredArgs[pos]);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1237
        List<Object> expected = Arrays.asList(filteredArgs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1238
        Object result = target2.invokeWithArguments(argsToPass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1239
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1240
            System.out.println("result: "+result);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1241
        if (!expected.equals(result))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1242
            System.out.println("*** fail at n/p = "+nargs+"/"+pos+": "+Arrays.asList(argsToPass)+" => "+result+" != "+expected);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1243
        assertEquals(expected, result);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1244
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1245
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1246
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1247
    public void testCollectArguments() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1248
        CodeCacheOverflowProcessor.runMHTest(this::testCollectArguments0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1249
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1250
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1251
    public void testCollectArguments0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1252
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1253
        startTest("collectArguments");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1254
        testFoldOrCollectArguments(true, false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1255
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1256
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1257
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1258
    public void testFoldArguments() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1259
        CodeCacheOverflowProcessor.runMHTest(this::testFoldArguments0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1260
        CodeCacheOverflowProcessor.runMHTest(this::testFoldArguments1);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1261
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1262
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1263
    public void testFoldArguments0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1264
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1265
        startTest("foldArguments");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1266
        testFoldOrCollectArguments(false, false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1267
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1268
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1269
    public void testFoldArguments1() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1270
        if (CAN_SKIP_WORKING) return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1271
        startTest("foldArguments/pos");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1272
        testFoldOrCollectArguments(false, true);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1273
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1274
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1275
    void testFoldOrCollectArguments(boolean isCollect, boolean withFoldPos) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1276
        assert !(isCollect && withFoldPos); // exclude illegal argument combination
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1277
        for (Class<?> lastType : new Class<?>[]{ Object.class, String.class, int.class }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1278
            for (Class<?> collectType : new Class<?>[]{ Object.class, String.class, int.class, void.class }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1279
                int maxArity = 10;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1280
                if (collectType != String.class)  maxArity = 5;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1281
                if (lastType != Object.class)  maxArity = 4;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1282
                for (int nargs = 0; nargs <= maxArity; nargs++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1283
                    ArrayList<Class<?>> argTypes = new ArrayList<>(Collections.nCopies(nargs, Object.class));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1284
                    int maxMix = 20;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1285
                    if (collectType != Object.class)  maxMix = 0;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1286
                    Map<Object,Integer> argTypesSeen = new HashMap<>();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1287
                    for (int mix = 0; mix <= maxMix; mix++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1288
                        if (!mixArgs(argTypes, mix, argTypesSeen))  continue;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1289
                        for (int collect = 0; collect <= nargs; collect++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1290
                            for (int pos = 0; pos <= nargs - collect; pos++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1291
                                testFoldOrCollectArguments(argTypes, pos, collect, collectType, lastType, isCollect, withFoldPos);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1292
                            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1293
                        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1294
                    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1295
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1296
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1297
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1298
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1299
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1300
    boolean mixArgs(List<Class<?>> argTypes, int mix, Map<Object,Integer> argTypesSeen) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1301
        assert(mix >= 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1302
        if (mix == 0)  return true;  // no change
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1303
        if ((mix >>> argTypes.size()) != 0)  return false;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1304
        for (int i = 0; i < argTypes.size(); i++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1305
            if (i >= 31)  break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1306
            boolean bit = (mix & (1 << i)) != 0;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1307
            if (bit) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1308
                Class<?> type = argTypes.get(i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1309
                if (type == Object.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1310
                    type = String.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1311
                else if (type == String.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1312
                    type = int.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1313
                else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1314
                    type = Object.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1315
                argTypes.set(i, type);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1316
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1317
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1318
        Integer prev = argTypesSeen.put(new ArrayList<>(argTypes), mix);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1319
        if (prev != null) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1320
            if (verbosity >= 4)  System.out.println("mix "+prev+" repeated "+mix+": "+argTypes);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1321
            return false;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1322
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1323
        if (verbosity >= 3)  System.out.println("mix "+mix+" = "+argTypes);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1324
        return true;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1325
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1326
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1327
    void testFoldOrCollectArguments(List<Class<?>> argTypes,  // argument types minus the inserted combineType
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1328
                                    int pos, int fold, // position and length of the folded arguments
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1329
                                    Class<?> combineType, // type returned from the combiner
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1330
                                    Class<?> lastType,  // type returned from the target
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1331
                                    boolean isCollect,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1332
                                    boolean withFoldPos) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1333
        int nargs = argTypes.size();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1334
        if (pos != 0 && !isCollect && !withFoldPos)  return;  // test MethodHandles.foldArguments(MH,MH) only for pos=0
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1335
        countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1336
        List<Class<?>> combineArgTypes = argTypes.subList(pos, pos + fold);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1337
        List<Class<?>> targetArgTypes = new ArrayList<>(argTypes);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1338
        if (isCollect)  // does target see arg[pos..pos+cc-1]?
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1339
            targetArgTypes.subList(pos, pos + fold).clear();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1340
        if (combineType != void.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1341
            targetArgTypes.add(pos, combineType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1342
        MethodHandle target = varargsList(targetArgTypes, lastType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1343
        MethodHandle combine = varargsList(combineArgTypes, combineType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1344
        List<Object> argsToPass = Arrays.asList(randomArgs(argTypes));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1345
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1346
            System.out.println((isCollect ? "collect" : "fold")+" "+target+" with "+combine);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1347
        MethodHandle target2;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1348
        if (isCollect)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1349
            target2 = MethodHandles.collectArguments(target, pos, combine);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1350
        else
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1351
            target2 = withFoldPos ? MethodHandles.foldArguments(target, pos, combine) : MethodHandles.foldArguments(target, combine);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1352
        // Simulate expected effect of combiner on arglist:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1353
        List<Object> expectedList = new ArrayList<>(argsToPass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1354
        List<Object> argsToFold = expectedList.subList(pos, pos + fold);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1355
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1356
            System.out.println((isCollect ? "collect" : "fold")+": "+argsToFold+" into "+target2);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1357
        Object foldedArgs = combine.invokeWithArguments(argsToFold);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1358
        if (isCollect)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1359
            argsToFold.clear();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1360
        if (combineType != void.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1361
            argsToFold.add(0, foldedArgs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1362
        Object result = target2.invokeWithArguments(argsToPass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1363
        if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1364
            System.out.println("result: "+result);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1365
        Object expected = target.invokeWithArguments(expectedList);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1366
        if (!expected.equals(result))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1367
            System.out.println("*** fail at n/p/f = "+nargs+"/"+pos+"/"+fold+": "+argsToPass+" => "+result+" != "+expected);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1368
        assertEquals(expected, result);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1369
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1370
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1371
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1372
    public void testDropArguments() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1373
        CodeCacheOverflowProcessor.runMHTest(this::testDropArguments0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1374
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1375
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1376
    public void testDropArguments0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1377
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1378
        startTest("dropArguments");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1379
        for (int nargs = 0; nargs <= 4; nargs++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1380
            for (int drop = 1; drop <= 4; drop++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1381
                for (int pos = 0; pos <= nargs; pos++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1382
                    testDropArguments(nargs, pos, drop);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1383
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1384
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1385
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1386
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1387
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1388
    void testDropArguments(int nargs, int pos, int drop) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1389
        countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1390
        MethodHandle target = varargsArray(nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1391
        Object[] args = randomArgs(target.type().parameterArray());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1392
        MethodHandle target2 = MethodHandles.dropArguments(target, pos,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1393
                Collections.nCopies(drop, Object.class).toArray(new Class<?>[0]));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1394
        List<Object> resList = Arrays.asList(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1395
        List<Object> argsToDrop = new ArrayList<>(resList);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1396
        for (int i = drop; i > 0; i--) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1397
            argsToDrop.add(pos, "blort#"+i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1398
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1399
        Object res2 = target2.invokeWithArguments(argsToDrop);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1400
        Object res2List = Arrays.asList((Object[])res2);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1401
        //if (!resList.equals(res2List))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1402
        //    System.out.println("*** fail at n/p/d = "+nargs+"/"+pos+"/"+drop+": "+argsToDrop+" => "+res2List);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1403
        assertEquals(resList, res2List);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1404
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1405
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1406
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1407
    public void testGuardWithTest() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1408
        CodeCacheOverflowProcessor.runMHTest(this::testGuardWithTest0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1409
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1410
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1411
    public void testGuardWithTest0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1412
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1413
        startTest("guardWithTest");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1414
        for (int nargs = 0; nargs <= 50; nargs++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1415
            if (CAN_TEST_LIGHTLY && nargs > 7)  break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1416
            testGuardWithTest(nargs, Object.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1417
            testGuardWithTest(nargs, String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1418
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1419
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1420
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1421
    void testGuardWithTest(int nargs, Class<?> argClass) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1422
        testGuardWithTest(nargs, 0, argClass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1423
        if (nargs <= 5 || nargs % 10 == 3) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1424
            for (int testDrops = 1; testDrops <= nargs; testDrops++)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1425
                testGuardWithTest(nargs, testDrops, argClass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1426
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1427
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1428
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1429
    void testGuardWithTest(int nargs, int testDrops, Class<?> argClass) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1430
        countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1431
        int nargs1 = Math.min(3, nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1432
        MethodHandle test = PRIVATE.findVirtual(Object.class, "equals", MethodType.methodType(boolean.class, Object.class));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1433
        MethodHandle target = PRIVATE.findStatic(MethodHandlesTest.class, "targetIfEquals", MethodType.genericMethodType(nargs1));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1434
        MethodHandle fallback = PRIVATE.findStatic(MethodHandlesTest.class, "fallbackIfNotEquals", MethodType.genericMethodType(nargs1));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1435
        while (test.type().parameterCount() > nargs)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1436
            // 0: test = constant(MISSING_ARG.equals(MISSING_ARG))
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1437
            // 1: test = lambda (_) MISSING_ARG.equals(_)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1438
            test = MethodHandles.insertArguments(test, 0, MISSING_ARG);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1439
        if (argClass != Object.class) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1440
            test = changeArgTypes(test, argClass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1441
            target = changeArgTypes(target, argClass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1442
            fallback = changeArgTypes(fallback, argClass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1443
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1444
        int testArgs = nargs - testDrops;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1445
        assert(testArgs >= 0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1446
        test = addTrailingArgs(test, Math.min(testArgs, nargs), argClass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1447
        target = addTrailingArgs(target, nargs, argClass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1448
        fallback = addTrailingArgs(fallback, nargs, argClass);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1449
        Object[][] argLists = {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1450
            { },
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1451
            { "foo" }, { MethodHandlesTest.MISSING_ARG },
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1452
            { "foo", "foo" }, { "foo", "bar" },
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1453
            { "foo", "foo", "baz" }, { "foo", "bar", "baz" }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1454
        };
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1455
        for (Object[] argList : argLists) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1456
            Object[] argList1 = argList;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1457
            if (argList.length != nargs) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1458
                if (argList.length != nargs1)  continue;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1459
                argList1 = Arrays.copyOf(argList, nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1460
                Arrays.fill(argList1, nargs1, nargs, MethodHandlesTest.MISSING_ARG_2);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1461
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1462
            MethodHandle test1 = test;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1463
            if (test1.type().parameterCount() > testArgs) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1464
                int pc = test1.type().parameterCount();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1465
                test1 = MethodHandles.insertArguments(test, testArgs, Arrays.copyOfRange(argList1, testArgs, pc));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1466
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1467
            MethodHandle mh = MethodHandles.guardWithTest(test1, target, fallback);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1468
            assertEquals(target.type(), mh.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1469
            boolean equals;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1470
            switch (nargs) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1471
            case 0:   equals = true; break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1472
            case 1:   equals = MethodHandlesTest.MISSING_ARG.equals(argList[0]); break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1473
            default:  equals = argList[0].equals(argList[1]); break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1474
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1475
            String willCall = (equals ? "targetIfEquals" : "fallbackIfNotEquals");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1476
            if (verbosity >= 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1477
                System.out.println(logEntry(willCall, argList));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1478
            Object result = mh.invokeWithArguments(argList1);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1479
            assertCalled(willCall, argList);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1480
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1481
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1482
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1483
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1484
    public void testGenericLoopCombinator() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1485
        CodeCacheOverflowProcessor.runMHTest(this::testGenericLoopCombinator0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1486
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1487
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1488
    public void testGenericLoopCombinator0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1489
        if (CAN_SKIP_WORKING) return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1490
        startTest("loop");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1491
        // Test as follows:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1492
        // * Have an increasing number of loop-local state. Local state type diversity grows with the number.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1493
        // * Initializers set the starting value of loop-local state from the corresponding loop argument.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1494
        // * For each local state element, there is a predicate - for all state combinations, exercise all predicates.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1495
        // * Steps modify each local state element in each iteration.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1496
        // * Finalizers group all local state elements into a resulting array. Verify end values.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1497
        // * Exercise both pre- and post-checked loops.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1498
        // Local state types, start values, predicates, and steps:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1499
        // * int a, 0, a < 7, a = a + 1
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1500
        // * double b, 7.0, b > 0.5, b = b / 2.0
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1501
        // * String c, "start", c.length <= 9, c = c + a
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1502
        final Class<?>[] argTypes = new Class<?>[] {int.class, double.class, String.class};
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1503
        final Object[][] args = new Object[][] {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1504
            new Object[]{0              },
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1505
            new Object[]{0, 7.0         },
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1506
            new Object[]{0, 7.0, "start"}
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1507
        };
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1508
        // These are the expected final state tuples for argument type tuple / predicate combinations, for pre- and
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1509
        // post-checked loops:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1510
        final Object[][] preCheckedResults = new Object[][] {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1511
            new Object[]{7                           }, // (int) / int
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1512
            new Object[]{7, 0.0546875                }, // (int,double) / int
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1513
            new Object[]{5, 0.4375                   }, // (int,double) / double
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1514
            new Object[]{7, 0.0546875, "start1234567"}, // (int,double,String) / int
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1515
            new Object[]{5, 0.4375,    "start1234"   }, // (int,double,String) / double
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1516
            new Object[]{6, 0.109375,  "start12345"  }  // (int,double,String) / String
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1517
        };
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1518
        final Object[][] postCheckedResults = new Object[][] {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1519
            new Object[]{7                         }, // (int) / int
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1520
            new Object[]{7, 0.109375               }, // (int,double) / int
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1521
            new Object[]{4, 0.4375                 }, // (int,double) / double
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1522
            new Object[]{7, 0.109375, "start123456"}, // (int,double,String) / int
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1523
            new Object[]{4, 0.4375,   "start123"   }, // (int,double,String) / double
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1524
            new Object[]{5, 0.21875,  "start12345" }  // (int,double,String) / String
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1525
        };
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1526
        final Lookup l = MethodHandles.lookup();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1527
        final Class<?> MHT = MethodHandlesTest.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1528
        final Class<?> B = boolean.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1529
        final Class<?> I = int.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1530
        final Class<?> D = double.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1531
        final Class<?> S = String.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1532
        final MethodHandle hip = l.findStatic(MHT, "loopIntPred", methodType(B, I));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1533
        final MethodHandle hdp = l.findStatic(MHT, "loopDoublePred", methodType(B, I, D));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1534
        final MethodHandle hsp = l.findStatic(MHT, "loopStringPred", methodType(B, I, D, S));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1535
        final MethodHandle his = l.findStatic(MHT, "loopIntStep", methodType(I, I));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1536
        final MethodHandle hds = l.findStatic(MHT, "loopDoubleStep", methodType(D, I, D));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1537
        final MethodHandle hss = l.findStatic(MHT, "loopStringStep", methodType(S, I, D, S));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1538
        final MethodHandle[] preds = new MethodHandle[] {hip, hdp, hsp};
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1539
        final MethodHandle[] steps = new MethodHandle[] {his, hds, hss};
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1540
        for (int nargs = 1, useResultsStart = 0; nargs <= argTypes.length; useResultsStart += nargs++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1541
            Class<?>[] useArgTypes = Arrays.copyOf(argTypes, nargs, Class[].class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1542
            MethodHandle[] usePreds = Arrays.copyOf(preds, nargs, MethodHandle[].class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1543
            MethodHandle[] useSteps = Arrays.copyOf(steps, nargs, MethodHandle[].class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1544
            Object[] useArgs = args[nargs - 1];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1545
            Object[][] usePreCheckedResults = new Object[nargs][];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1546
            Object[][] usePostCheckedResults = new Object[nargs][];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1547
            System.arraycopy(preCheckedResults, useResultsStart, usePreCheckedResults, 0, nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1548
            System.arraycopy(postCheckedResults, useResultsStart, usePostCheckedResults, 0, nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1549
            testGenericLoopCombinator(nargs, useArgTypes, usePreds, useSteps, useArgs, usePreCheckedResults,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1550
                    usePostCheckedResults);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1551
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1552
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1553
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1554
    void testGenericLoopCombinator(int nargs, Class<?>[] argTypes, MethodHandle[] preds, MethodHandle[] steps,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1555
                                   Object[] args, Object[][] preCheckedResults, Object[][] postCheckedResults)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1556
            throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1557
        List<Class<?>> lArgTypes = Arrays.asList(argTypes);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1558
        // Predicate and step handles are passed in as arguments, initializer and finalizer handles are constructed here
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1559
        // from the available information.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1560
        MethodHandle[] inits = new MethodHandle[nargs];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1561
        for (int i = 0; i < nargs; ++i) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1562
            MethodHandle h;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1563
            // Initializers are meant to return whatever they are passed at a given argument position. This means that
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1564
            // additional arguments may have to be appended and prepended.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1565
            h = MethodHandles.identity(argTypes[i]);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1566
            if (i < nargs - 1) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1567
                h = MethodHandles.dropArguments(h, 1, lArgTypes.subList(i + 1, nargs));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1568
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1569
            if (i > 0) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1570
                h = MethodHandles.dropArguments(h, 0, lArgTypes.subList(0, i));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1571
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1572
            inits[i] = h;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1573
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1574
        // Finalizers are all meant to collect all of the loop-local state in a single array and return that. Local
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1575
        // state is passed before the loop args. Construct such a finalizer by first taking a varargsArray collector for
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1576
        // the number of local state arguments, and then appending the loop args as to-be-dropped arguments.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1577
        MethodHandle[] finis = new MethodHandle[nargs];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1578
        MethodHandle genericFini = MethodHandles.dropArguments(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1579
                varargsArray(nargs).asType(methodType(Object[].class, lArgTypes)), nargs, lArgTypes);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1580
        Arrays.fill(finis, genericFini);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1581
        // The predicate and step handles' signatures need to be extended. They currently just accept local state args;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1582
        // append possibly missing local state args and loop args using dropArguments.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1583
        for (int i = 0; i < nargs; ++i) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1584
            List<Class<?>> additionalLocalStateArgTypes = lArgTypes.subList(i + 1, nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1585
            preds[i] = MethodHandles.dropArguments(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1586
                    MethodHandles.dropArguments(preds[i], i + 1, additionalLocalStateArgTypes), nargs, lArgTypes);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1587
            steps[i] = MethodHandles.dropArguments(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1588
                    MethodHandles.dropArguments(steps[i], i + 1, additionalLocalStateArgTypes), nargs, lArgTypes);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1589
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1590
        // Iterate over all of the predicates, using only one of them at a time.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1591
        for (int i = 0; i < nargs; ++i) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1592
            MethodHandle[] usePreds;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1593
            if (nargs == 1) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1594
                usePreds = preds;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1595
            } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1596
                // Create an all-null preds array, and only use one predicate in this iteration. The null entries will
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1597
                // be substituted with true predicates by the loop combinator.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1598
                usePreds = new MethodHandle[nargs];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1599
                usePreds[i] = preds[i];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1600
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1601
            // Go for it.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1602
            if (verbosity >= 3) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1603
                System.out.println("calling loop for argument types " + lArgTypes + " with predicate at index " + i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1604
                if (verbosity >= 5) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1605
                    System.out.println("predicates: " + Arrays.asList(usePreds));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1606
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1607
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1608
            MethodHandle[] preInits = new MethodHandle[nargs + 1];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1609
            MethodHandle[] prePreds = new MethodHandle[nargs + 1];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1610
            MethodHandle[] preSteps = new MethodHandle[nargs + 1];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1611
            MethodHandle[] preFinis = new MethodHandle[nargs + 1];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1612
            System.arraycopy(inits, 0, preInits, 1, nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1613
            System.arraycopy(usePreds, 0, prePreds, 0, nargs); // preds are offset by 1 for pre-checked loops
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1614
            System.arraycopy(steps, 0, preSteps, 1, nargs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1615
            System.arraycopy(finis, 0, preFinis, 0, nargs); // finis are also offset by 1 for pre-checked loops
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1616
            // Convert to clause-major form.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1617
            MethodHandle[][] preClauses = new MethodHandle[nargs + 1][4];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1618
            MethodHandle[][] postClauses = new MethodHandle[nargs][4];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1619
            toClauseMajor(preClauses, preInits, preSteps, prePreds, preFinis);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1620
            toClauseMajor(postClauses, inits, steps, usePreds, finis);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1621
            MethodHandle pre = MethodHandles.loop(preClauses);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1622
            MethodHandle post = MethodHandles.loop(postClauses);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1623
            if (verbosity >= 6) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1624
                System.out.println("pre-handle: " + pre);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1625
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1626
            Object[] preResults = (Object[]) pre.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1627
            if (verbosity >= 4) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1628
                System.out.println("pre-checked: expected " + Arrays.asList(preCheckedResults[i]) + ", actual " +
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1629
                        Arrays.asList(preResults));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1630
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1631
            if (verbosity >= 6) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1632
                System.out.println("post-handle: " + post);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1633
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1634
            Object[] postResults = (Object[]) post.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1635
            if (verbosity >= 4) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1636
                System.out.println("post-checked: expected " + Arrays.asList(postCheckedResults[i]) + ", actual " +
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1637
                        Arrays.asList(postResults));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1638
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1639
            assertArrayEquals(preCheckedResults[i], preResults);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1640
            assertArrayEquals(postCheckedResults[i], postResults);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1641
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1642
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1643
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1644
    static void toClauseMajor(MethodHandle[][] clauses, MethodHandle[] init, MethodHandle[] step, MethodHandle[] pred, MethodHandle[] fini) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1645
        for (int i = 0; i < clauses.length; ++i) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1646
            clauses[i][0] = init[i];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1647
            clauses[i][1] = step[i];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1648
            clauses[i][2] = pred[i];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1649
            clauses[i][3] = fini[i];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1650
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1651
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1652
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1653
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1654
    public void testThrowException() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1655
        CodeCacheOverflowProcessor.runMHTest(this::testThrowException0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1656
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1657
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1658
    public void testThrowException0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1659
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1660
        startTest("throwException");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1661
        testThrowException(int.class, new ClassCastException("testing"));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1662
        testThrowException(void.class, new java.io.IOException("testing"));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1663
        testThrowException(String.class, new LinkageError("testing"));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1664
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1665
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1666
    void testThrowException(Class<?> returnType, Throwable thrown) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1667
        countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1668
        Class<? extends Throwable> exType = thrown.getClass();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1669
        MethodHandle target = MethodHandles.throwException(returnType, exType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1670
        //System.out.println("throwing with "+target+" : "+thrown);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1671
        MethodType expectedType = MethodType.methodType(returnType, exType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1672
        assertEquals(expectedType, target.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1673
        target = target.asType(target.type().generic());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1674
        Throwable caught = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1675
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1676
            Object res = target.invokeExact((Object) thrown);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1677
            fail("got "+res+" instead of throwing "+thrown);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1678
        } catch (Throwable ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1679
            if (ex != thrown) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1680
                if (ex instanceof Error)  throw (Error)ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1681
                if (ex instanceof RuntimeException)  throw (RuntimeException)ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1682
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1683
            caught = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1684
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1685
        assertSame(thrown, caught);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1686
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1687
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1688
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1689
    public void testTryFinally() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1690
        CodeCacheOverflowProcessor.runMHTest(this::testTryFinally0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1691
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1692
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1693
    public void testTryFinally0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1694
        if (CAN_SKIP_WORKING) return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1695
        startTest("tryFinally");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1696
        String inputMessage = "returned";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1697
        String augmentedMessage = "augmented";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1698
        String thrownMessage = "thrown";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1699
        String rethrownMessage = "rethrown";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1700
        // Test these cases:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1701
        // * target returns, cleanup passes through
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1702
        // * target returns, cleanup augments
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1703
        // * target throws, cleanup augments and returns
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1704
        // * target throws, cleanup augments and rethrows
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1705
        MethodHandle target = MethodHandles.identity(String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1706
        MethodHandle targetThrow = MethodHandles.dropArguments(
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1707
                MethodHandles.throwException(String.class, Exception.class).bindTo(new Exception(thrownMessage)), 0, String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1708
        MethodHandle cleanupPassThrough = MethodHandles.dropArguments(MethodHandles.identity(String.class), 0,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1709
                Throwable.class, String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1710
        MethodHandle cleanupAugment = MethodHandles.dropArguments(MethodHandles.constant(String.class, augmentedMessage),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1711
                0, Throwable.class, String.class, String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1712
        MethodHandle cleanupCatch = MethodHandles.dropArguments(MethodHandles.constant(String.class, thrownMessage), 0,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1713
                Throwable.class, String.class, String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1714
        MethodHandle cleanupThrow = MethodHandles.dropArguments(MethodHandles.throwException(String.class, Exception.class).
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1715
                bindTo(new Exception(rethrownMessage)), 0, Throwable.class, String.class, String.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1716
        testTryFinally(target, cleanupPassThrough, inputMessage, inputMessage, false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1717
        testTryFinally(target, cleanupAugment, inputMessage, augmentedMessage, false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1718
        testTryFinally(targetThrow, cleanupCatch, inputMessage, thrownMessage, true);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1719
        testTryFinally(targetThrow, cleanupThrow, inputMessage, rethrownMessage, true);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1720
        // Test the same cases as above for void targets and cleanups.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1721
        MethodHandles.Lookup lookup = MethodHandles.lookup();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1722
        Class<?> C = this.getClass();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1723
        MethodType targetType = methodType(void.class, String[].class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1724
        MethodType cleanupType = methodType(void.class, Throwable.class, String[].class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1725
        MethodHandle vtarget = lookup.findStatic(C, "vtarget", targetType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1726
        MethodHandle vtargetThrow = lookup.findStatic(C, "vtargetThrow", targetType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1727
        MethodHandle vcleanupPassThrough = lookup.findStatic(C, "vcleanupPassThrough", cleanupType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1728
        MethodHandle vcleanupAugment = lookup.findStatic(C, "vcleanupAugment", cleanupType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1729
        MethodHandle vcleanupCatch = lookup.findStatic(C, "vcleanupCatch", cleanupType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1730
        MethodHandle vcleanupThrow = lookup.findStatic(C, "vcleanupThrow", cleanupType);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1731
        testTryFinally(vtarget, vcleanupPassThrough, inputMessage, inputMessage, false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1732
        testTryFinally(vtarget, vcleanupAugment, inputMessage, augmentedMessage, false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1733
        testTryFinally(vtargetThrow, vcleanupCatch, inputMessage, thrownMessage, true);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1734
        testTryFinally(vtargetThrow, vcleanupThrow, inputMessage, rethrownMessage, true);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1735
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1736
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1737
    void testTryFinally(MethodHandle target, MethodHandle cleanup, String input, String msg, boolean mustCatch)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1738
            throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1739
        countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1740
        MethodHandle tf = MethodHandles.tryFinally(target, cleanup);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1741
        String result = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1742
        boolean isVoid = target.type().returnType() == void.class;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1743
        String[] argArray = new String[]{input};
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1744
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1745
            if (isVoid) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1746
                tf.invoke(argArray);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1747
            } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1748
                result = (String) tf.invoke(input);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1749
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1750
        } catch (Throwable t) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1751
            assertTrue(mustCatch);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1752
            assertEquals(msg, t.getMessage());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1753
            return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1754
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1755
        assertFalse(mustCatch);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1756
        if (isVoid) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1757
            assertEquals(msg, argArray[0]);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1758
        } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1759
            assertEquals(msg, result);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1760
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1761
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1762
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1763
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1764
    public void testAsInterfaceInstance() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1765
        CodeCacheOverflowProcessor.runMHTest(this::testAsInterfaceInstance0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1766
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1767
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1768
    public void testAsInterfaceInstance0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1769
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1770
        startTest("asInterfaceInstance");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1771
        Lookup lookup = MethodHandles.lookup();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1772
        // test typical case:  Runnable.run
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1773
        {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1774
            countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1775
            if (verbosity >= 2)  System.out.println("Runnable");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1776
            MethodType mt = MethodType.methodType(void.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1777
            MethodHandle mh = lookup.findStatic(MethodHandlesGeneralTest.class, "runForRunnable", mt);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1778
            Runnable proxy = MethodHandleProxies.asInterfaceInstance(Runnable.class, mh);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1779
            proxy.run();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1780
            assertCalled("runForRunnable");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1781
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1782
        // well known single-name overloaded interface:  Appendable.append
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1783
        {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1784
            countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1785
            if (verbosity >= 2)  System.out.println("Appendable");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1786
            ArrayList<List<?>> appendResults = new ArrayList<>();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1787
            MethodHandle append = lookup.bind(appendResults, "add", MethodType.methodType(boolean.class, Object.class));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1788
            append = append.asType(MethodType.methodType(void.class, List.class)); // specialize the type
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1789
            MethodHandle asList = lookup.findStatic(Arrays.class, "asList", MethodType.methodType(List.class, Object[].class));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1790
            MethodHandle mh = MethodHandles.filterReturnValue(asList, append).asVarargsCollector(Object[].class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1791
            Appendable proxy = MethodHandleProxies.asInterfaceInstance(Appendable.class, mh);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1792
            proxy.append("one");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1793
            proxy.append("two", 3, 4);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1794
            proxy.append('5');
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1795
            assertEquals(Arrays.asList(Arrays.asList("one"),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1796
                                       Arrays.asList("two", 3, 4),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1797
                                       Arrays.asList('5')),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1798
                         appendResults);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1799
            if (verbosity >= 3)  System.out.println("appendResults="+appendResults);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1800
            appendResults.clear();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1801
            Formatter formatter = new Formatter(proxy);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1802
            String fmt = "foo str=%s char='%c' num=%d";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1803
            Object[] fmtArgs = { "str!", 'C', 42 };
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1804
            String expect = String.format(fmt, fmtArgs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1805
            formatter.format(fmt, fmtArgs);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1806
            String actual = "";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1807
            if (verbosity >= 3)  System.out.println("appendResults="+appendResults);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1808
            for (List<?> l : appendResults) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1809
                Object x = l.get(0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1810
                switch (l.size()) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1811
                case 1:  actual += x; continue;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1812
                case 3:  actual += ((String)x).substring((int)(Object)l.get(1), (int)(Object)l.get(2)); continue;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1813
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1814
                actual += l;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1815
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1816
            if (verbosity >= 3)  System.out.println("expect="+expect);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1817
            if (verbosity >= 3)  System.out.println("actual="+actual);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1818
            assertEquals(expect, actual);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1819
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1820
        // test case of an single name which is overloaded:  Fooable.foo(...)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1821
        {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1822
            if (verbosity >= 2)  System.out.println("Fooable");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1823
            MethodHandle mh = lookup.findStatic(MethodHandlesGeneralTest.class, "fooForFooable",
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1824
                                                MethodType.methodType(Object.class, String.class, Object[].class));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1825
            Fooable proxy = MethodHandleProxies.asInterfaceInstance(Fooable.class, mh);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1826
            for (Method m : Fooable.class.getDeclaredMethods()) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1827
                countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1828
                assertSame("foo", m.getName());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1829
                if (verbosity > 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1830
                    System.out.println("calling "+m);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1831
                MethodHandle invoker = lookup.unreflect(m);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1832
                MethodType mt = invoker.type();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1833
                Class<?>[] types = mt.parameterArray();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1834
                types[0] = int.class;  // placeholder
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1835
                Object[] args = randomArgs(types);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1836
                args[0] = proxy;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1837
                if (verbosity > 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1838
                    System.out.println("calling "+m+" on "+Arrays.asList(args));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1839
                Object result = invoker.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1840
                if (verbosity > 4)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1841
                    System.out.println("result = "+result);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1842
                String name = "fooForFooable/"+args[1];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1843
                Object[] argTail = Arrays.copyOfRange(args, 2, args.length);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1844
                assertCalled(name, argTail);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1845
                assertEquals(result, logEntry(name, argTail));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1846
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1847
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1848
        // test processing of thrown exceptions:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1849
        for (Throwable ex : new Throwable[] { new NullPointerException("ok"),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1850
                                              new InternalError("ok"),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1851
                                              new Throwable("fail"),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1852
                                              new Exception("fail"),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1853
                                              new MyCheckedException()
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1854
                                            }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1855
            MethodHandle mh = MethodHandles.throwException(void.class, Throwable.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1856
            mh = MethodHandles.insertArguments(mh, 0, ex);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1857
            WillThrow proxy = MethodHandleProxies.asInterfaceInstance(WillThrow.class, mh);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1858
            try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1859
                countTest();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1860
                proxy.willThrow();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1861
                System.out.println("Failed to throw: "+ex);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1862
                assertTrue(false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1863
            } catch (Throwable ex1) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1864
                if (verbosity > 3) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1865
                    System.out.println("throw "+ex);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1866
                    System.out.println("catch "+(ex == ex1 ? "UNWRAPPED" : ex1));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1867
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1868
                if (ex instanceof RuntimeException ||
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1869
                    ex instanceof Error) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1870
                    assertSame("must pass unchecked exception out without wrapping", ex, ex1);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1871
                } else if (ex instanceof MyCheckedException) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1872
                    assertSame("must pass declared exception out without wrapping", ex, ex1);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1873
                } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1874
                    assertNotSame("must pass undeclared checked exception with wrapping", ex, ex1);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1875
                    if (!(ex1 instanceof UndeclaredThrowableException) || ex1.getCause() != ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1876
                        ex1.printStackTrace(System.out);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1877
                    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1878
                    assertSame(ex, ex1.getCause());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1879
                    UndeclaredThrowableException utex = (UndeclaredThrowableException) ex1;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1880
                }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1881
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1882
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1883
        // Test error checking on bad interfaces:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1884
        for (Class<?> nonSMI : new Class<?>[] { Object.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1885
                                             String.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1886
                                             CharSequence.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1887
                                             java.io.Serializable.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1888
                                             PrivateRunnable.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1889
                                             Example.class }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1890
            if (verbosity > 2)  System.out.println(nonSMI.getName());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1891
            try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1892
                countTest(false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1893
                MethodHandleProxies.asInterfaceInstance(nonSMI, varargsArray(0));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1894
                assertTrue("Failed to throw on "+nonSMI.getName(), false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1895
            } catch (IllegalArgumentException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1896
                if (verbosity > 2)  System.out.println(nonSMI.getSimpleName()+": "+ex);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1897
                // Object: java.lang.IllegalArgumentException:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1898
                //     not a public interface: java.lang.Object
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1899
                // String: java.lang.IllegalArgumentException:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1900
                //     not a public interface: java.lang.String
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1901
                // CharSequence: java.lang.IllegalArgumentException:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1902
                //     not a single-method interface: java.lang.CharSequence
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1903
                // Serializable: java.lang.IllegalArgumentException:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1904
                //     not a single-method interface: java.io.Serializable
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1905
                // PrivateRunnable: java.lang.IllegalArgumentException:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1906
                //     not a public interface: test.java.lang.invoke.MethodHandlesTest$PrivateRunnable
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1907
                // Example: java.lang.IllegalArgumentException:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1908
                //     not a public interface: test.java.lang.invoke.MethodHandlesTest$Example
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1909
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1910
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1911
        // Test error checking on interfaces with the wrong method type:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1912
        for (Class<?> intfc : new Class<?>[] { Runnable.class /*arity 0*/,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1913
                                            Fooable.class /*arity 1 & 2*/ }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1914
            int badArity = 1;  // known to be incompatible
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1915
            if (verbosity > 2)  System.out.println(intfc.getName());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1916
            try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1917
                countTest(false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1918
                MethodHandleProxies.asInterfaceInstance(intfc, varargsArray(badArity));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1919
                assertTrue("Failed to throw on "+intfc.getName(), false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1920
            } catch (WrongMethodTypeException ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1921
                if (verbosity > 2)  System.out.println(intfc.getSimpleName()+": "+ex);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1922
                // Runnable: java.lang.invoke.WrongMethodTypeException:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1923
                //     cannot convert MethodHandle(Object)Object[] to ()void
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1924
                // Fooable: java.lang.invoke.WrongMethodTypeException:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1925
                //     cannot convert MethodHandle(Object)Object[] to (Object,String)Object
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1926
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1927
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1928
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1929
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1930
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1931
    public void testInterfaceCast() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1932
        CodeCacheOverflowProcessor.runMHTest(this::testInterfaceCast0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1933
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1934
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1935
    public void testInterfaceCast0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1936
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1937
        startTest("interfaceCast");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1938
        assert( (((Object)"foo") instanceof CharSequence));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1939
        assert(!(((Object)"foo") instanceof Iterable));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1940
        for (MethodHandle mh : new MethodHandle[]{
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1941
            MethodHandles.identity(String.class),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1942
            MethodHandles.identity(CharSequence.class),
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1943
            MethodHandles.identity(Iterable.class)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1944
        }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1945
            if (verbosity > 0)  System.out.println("-- mh = "+mh);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1946
            for (Class<?> ctype : new Class<?>[]{
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1947
                Object.class, String.class, CharSequence.class,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1948
                Number.class, Iterable.class
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1949
            }) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1950
                if (verbosity > 0)  System.out.println("---- ctype = "+ctype.getName());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1951
                //                           doret  docast
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1952
                testInterfaceCast(mh, ctype, false, false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1953
                testInterfaceCast(mh, ctype, true,  false);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1954
                testInterfaceCast(mh, ctype, false, true);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1955
                testInterfaceCast(mh, ctype, true,  true);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1956
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1957
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1958
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1959
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1960
    private static Class<?> i2o(Class<?> c) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1961
        return (c.isInterface() ? Object.class : c);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1962
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1963
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1964
    public void testInterfaceCast(MethodHandle mh, Class<?> ctype,
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1965
                                                   boolean doret, boolean docast) throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1966
        MethodHandle mh0 = mh;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1967
        if (verbosity > 1)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1968
            System.out.println("mh="+mh+", ctype="+ctype.getName()+", doret="+doret+", docast="+docast);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1969
        String normalRetVal = "normal return value";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1970
        MethodType mt = mh.type();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1971
        MethodType mt0 = mt;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1972
        if (doret)  mt = mt.changeReturnType(ctype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1973
        else        mt = mt.changeParameterType(0, ctype);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1974
        if (docast) mh = MethodHandles.explicitCastArguments(mh, mt);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1975
        else        mh = mh.asType(mt);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1976
        assertEquals(mt, mh.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1977
        MethodType mt1 = mt;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1978
        // this bit is needed to make the interface types disappear for invokeWithArguments:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1979
        mh = MethodHandles.explicitCastArguments(mh, mt.generic());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1980
        Class<?>[] step = {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1981
            mt1.parameterType(0),  // param as passed to mh at first
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1982
            mt0.parameterType(0),  // param after incoming cast
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1983
            mt0.returnType(),      // return value before cast
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1984
            mt1.returnType(),      // return value after outgoing cast
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1985
        };
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1986
        // where might a checkCast occur?
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1987
        boolean[] checkCast = new boolean[step.length];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1988
        // the string value must pass each step without causing an exception
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1989
        if (!docast) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1990
            if (!doret) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1991
                if (step[0] != step[1])
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1992
                    checkCast[1] = true;  // incoming value is cast
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1993
            } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1994
                if (step[2] != step[3])
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1995
                    checkCast[3] = true;  // outgoing value is cast
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1996
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1997
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1998
        boolean expectFail = false;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  1999
        for (int i = 0; i < step.length; i++) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2000
            Class<?> c = step[i];
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2001
            if (!checkCast[i])  c = i2o(c);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2002
            if (!c.isInstance(normalRetVal)) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2003
                if (verbosity > 3)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2004
                    System.out.println("expect failure at step "+i+" in "+Arrays.toString(step)+Arrays.toString(checkCast));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2005
                expectFail = true;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2006
                break;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2007
            }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2008
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2009
        countTest(!expectFail);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2010
        if (verbosity > 2)
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2011
            System.out.println("expectFail="+expectFail+", mt="+mt);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2012
        Object res;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2013
        try {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2014
            res = mh.invokeWithArguments(normalRetVal);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2015
        } catch (Exception ex) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2016
            res = ex;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2017
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2018
        boolean sawFail = !(res instanceof String);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2019
        if (sawFail != expectFail) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2020
            System.out.println("*** testInterfaceCast: mh0 = "+mh0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2021
            System.out.println("  retype using "+(docast ? "explicitCastArguments" : "asType")+" to "+mt+" => "+mh);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2022
            System.out.println("  call returned "+res);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2023
            System.out.println("  expected "+(expectFail ? "an exception" : normalRetVal));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2024
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2025
        if (!expectFail) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2026
            assertFalse(res.toString(), sawFail);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2027
            assertEquals(normalRetVal, res);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2028
        } else {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2029
            assertTrue(res.toString(), sawFail);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2030
        }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2031
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2032
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2033
    static Example userMethod(Object o, String s, int i) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2034
        called("userMethod", o, s, i);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2035
        return null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2036
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2037
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2038
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2039
    public void testUserClassInSignature() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2040
        CodeCacheOverflowProcessor.runMHTest(this::testUserClassInSignature0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2041
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2042
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2043
    public void testUserClassInSignature0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2044
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2045
        startTest("testUserClassInSignature");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2046
        Lookup lookup = MethodHandles.lookup();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2047
        String name; MethodType mt; MethodHandle mh;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2048
        Object[] args;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2049
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2050
        // Try a static method.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2051
        name = "userMethod";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2052
        mt = MethodType.methodType(Example.class, Object.class, String.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2053
        mh = lookup.findStatic(lookup.lookupClass(), name, mt);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2054
        assertEquals(mt, mh.type());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2055
        assertEquals(Example.class, mh.type().returnType());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2056
        args = randomArgs(mh.type().parameterArray());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2057
        mh.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2058
        assertCalled(name, args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2059
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2060
        // Try a virtual method.
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2061
        name = "v2";
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2062
        mt = MethodType.methodType(Object.class, Object.class, int.class);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2063
        mh = lookup.findVirtual(Example.class, name, mt);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2064
        assertEquals(mt, mh.type().dropParameterTypes(0,1));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2065
        assertTrue(mh.type().parameterList().contains(Example.class));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2066
        args = randomArgs(mh.type().parameterArray());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2067
        mh.invokeWithArguments(args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2068
        assertCalled(name, args);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2069
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2070
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2071
    static void runForRunnable() {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2072
        called("runForRunnable");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2073
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2074
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2075
    public interface Fooable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2076
        // overloads:
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2077
        Object  foo(Object x, String y);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2078
        List<?> foo(String x, int y);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2079
        Object  foo(String x);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2080
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2081
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2082
    static Object fooForFooable(String x, Object... y) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2083
        return called("fooForFooable/"+x, y);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2084
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2085
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2086
    @SuppressWarnings("serial")  // not really a public API, just a test case
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2087
    public static class MyCheckedException extends Exception {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2088
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2089
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2090
    public interface WillThrow {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2091
        void willThrow() throws MyCheckedException;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2092
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2093
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2094
    /*non-public*/ interface PrivateRunnable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2095
        public void run();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2096
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2097
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2098
    @Test
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2099
    public void testRunnableProxy() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2100
        CodeCacheOverflowProcessor.runMHTest(this::testRunnableProxy0);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2101
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2102
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2103
    public void testRunnableProxy0() throws Throwable {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2104
        if (CAN_SKIP_WORKING)  return;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2105
        startTest("testRunnableProxy");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2106
        MethodHandles.Lookup lookup = MethodHandles.lookup();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2107
        MethodHandle run = lookup.findStatic(lookup.lookupClass(), "runForRunnable", MethodType.methodType(void.class));
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2108
        Runnable r = MethodHandleProxies.asInterfaceInstance(Runnable.class, run);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2109
        testRunnableProxy(r);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2110
        assertCalled("runForRunnable");
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2111
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2112
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2113
    private static void testRunnableProxy(Runnable r) {
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2114
        //7058630: JSR 292 method handle proxy violates contract for Object methods
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2115
        r.run();
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2116
        Object o = r;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2117
        r = null;
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2118
        boolean eq = (o == o);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2119
        int     hc = System.identityHashCode(o);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2120
        String  st = o.getClass().getName() + "@" + Integer.toHexString(hc);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2121
        Object expect = Arrays.asList(st, eq, hc);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2122
        if (verbosity >= 2)  System.out.println("expect st/eq/hc = "+expect);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2123
        Object actual = Arrays.asList(o.toString(), o.equals(o), o.hashCode());
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2124
        if (verbosity >= 2)  System.out.println("actual st/eq/hc = "+actual);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2125
        assertEquals(expect, actual);
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2126
    }
92ec6aec6f06 8195717: test java/lang/invoke/MethodHandlesTest timed out running testAsCollector1
vtheeyarath
parents:
diff changeset
  2127
}