author | afarley |
Tue, 26 Mar 2019 15:53:36 -0700 | |
changeset 54295 | 49c4b23d8d0a |
parent 51754 | 594919232b8f |
child 54445 | a5da0277d9bb |
permissions | -rw-r--r-- |
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 | 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 |
} |