Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/lang/invoke/MethodHandles/TestCatchException.java
41152 views
1
/*
2
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
/**
27
* @test
28
* @bug 8027823
29
* @run junit test.java.lang.invoke.TestCatchException
30
*/
31
package test.java.lang.invoke;
32
33
import java.lang.invoke.*;
34
import org.junit.*;
35
import static org.junit.Assert.*;
36
37
public class TestCatchException {
38
static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
39
static final MethodType M_TYPE = MethodType.methodType(int.class, Object.class, Object.class, int.class, int.class, int.class, int.class, int.class, int.class, int.class);
40
41
private static int noThrow(Object o1, Object o2, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
42
return 42;
43
}
44
45
private static int throwEx(Object o1, Object o2, int i1, int i2, int i3, int i4, int i5, int i6, int i7) throws Exception {
46
throw new Exception();
47
}
48
49
private static int handler(Exception e) {
50
return 17;
51
}
52
53
@Test
54
public void testNoThrowPath() throws Throwable {
55
MethodHandle target = LOOKUP.findStatic(TestCatchException.class, "noThrow", M_TYPE);
56
MethodHandle handler = LOOKUP.findStatic(TestCatchException.class, "handler", MethodType.methodType(int.class, Exception.class));
57
58
MethodHandle h = MethodHandles.catchException(target, Exception.class, handler);
59
60
int x = (int)h.invokeExact(new Object(), new Object(), 1, 2, 3, 4, 5, 6, 7);
61
assertEquals(x, 42);
62
}
63
64
@Test
65
public void testThrowPath() throws Throwable {
66
MethodHandle target = LOOKUP.findStatic(TestCatchException.class, "throwEx", M_TYPE);
67
MethodHandle handler = LOOKUP.findStatic(TestCatchException.class, "handler", MethodType.methodType(int.class, Exception.class));
68
69
MethodHandle h = MethodHandles.catchException(target, Exception.class, handler);
70
71
int x = (int)h.invokeExact(new Object(), new Object(), 1, 2, 3, 4, 5, 6, 7);
72
assertEquals(x, 17);
73
}
74
75
static final Object masterParam = new Object();
76
static final Object[] masterTail = new Object[] { "str" };
77
static Exception masterEx = new Exception();
78
79
public static Object m1(Object o1, Object o2, Object o3, Object o4, Object o5,
80
Object o6, Object o7, Object o8, Object... tail) {
81
assertEquals(masterParam, o1);
82
assertEquals(masterParam, o2);
83
assertEquals(masterParam, o3);
84
assertEquals(masterParam, o4);
85
assertEquals(masterParam, o5);
86
assertEquals(masterParam, o6);
87
assertEquals(masterParam, o7);
88
assertEquals(masterParam, o8);
89
assertEquals(masterTail, tail);
90
return tail;
91
}
92
93
public static Object m2(Exception e, Object o1, Object o2, Object o3, Object o4,
94
Object o5, Object o6, Object o7, Object o8, Object... tail) {
95
assertEquals(masterEx, e);
96
assertEquals(masterParam, o1);
97
assertEquals(masterParam, o2);
98
assertEquals(masterParam, o3);
99
assertEquals(masterParam, o4);
100
assertEquals(masterParam, o5);
101
assertEquals(masterParam, o6);
102
assertEquals(masterParam, o7);
103
assertEquals(masterParam, o8);
104
assertEquals(masterTail, tail);
105
return tail;
106
}
107
108
public static Object throwEx(Object o1, Object o2, Object o3, Object o4, Object o5,
109
Object o6, Object o7, Object o8, Object... tail) throws Exception {
110
assertEquals(masterParam, o1);
111
assertEquals(masterParam, o2);
112
assertEquals(masterParam, o3);
113
assertEquals(masterParam, o4);
114
assertEquals(masterParam, o5);
115
assertEquals(masterParam, o6);
116
assertEquals(masterParam, o7);
117
assertEquals(masterParam, o8);
118
assertEquals(masterTail, tail);
119
throw masterEx;
120
}
121
122
@Test
123
public void testVarargsCollectorNoThrow() throws Throwable {
124
MethodType t1 = MethodType.methodType(Object.class, Object.class, Object.class, Object.class, Object.class,
125
Object.class, Object.class, Object.class, Object.class, Object[].class);
126
127
MethodType t2 = t1.insertParameterTypes(0, Exception.class);
128
129
MethodHandle target = LOOKUP.findStatic(TestCatchException.class, "m1", t1)
130
.asVarargsCollector(Object[].class);
131
MethodHandle catcher = LOOKUP.findStatic(TestCatchException.class, "m2", t2)
132
.asVarargsCollector(Object[].class);
133
MethodHandle gwc = MethodHandles.catchException(target, Exception.class, catcher);
134
135
Object o = masterParam;
136
Object[] obj1 = masterTail;
137
138
Object r2 = gwc.invokeExact(o, o, o, o, o, o, o, o, obj1);
139
assertEquals(r2, obj1);
140
}
141
142
@Test
143
public void testVarargsCollectorThrow() throws Throwable {
144
MethodType t1 = MethodType.methodType(Object.class, Object.class, Object.class, Object.class, Object.class,
145
Object.class, Object.class, Object.class, Object.class, Object[].class);
146
147
MethodType t2 = t1.insertParameterTypes(0, Exception.class);
148
149
MethodHandle target = LOOKUP.findStatic(TestCatchException.class, "throwEx", t1)
150
.asVarargsCollector(Object[].class);
151
MethodHandle catcher = LOOKUP.findStatic(TestCatchException.class, "m2", t2)
152
.asVarargsCollector(Object[].class);
153
MethodHandle gwc = MethodHandles.catchException(target, Exception.class, catcher);
154
155
Object o = masterParam;
156
Object[] obj1 = masterTail;
157
158
Object r2 = gwc.invokeExact(o, o, o, o, o, o, o, o, obj1);
159
assertEquals(r2, obj1);
160
}
161
162
public static void main(String[] args) throws Throwable {
163
TestCatchException test = new TestCatchException();
164
test.testNoThrowPath();
165
test.testThrowPath();
166
test.testVarargsCollectorNoThrow();
167
test.testVarargsCollectorThrow();
168
System.out.println("TEST PASSED");
169
}
170
}
171
172