Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/compiler/jvmci/compilerToVM/HasFinalizableSubclassTest.java
41153 views
1
/*
2
* Copyright (c) 2015, 2019, 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.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @bug 8136421
27
* @requires vm.jvmci
28
* @library / /test/lib
29
* @library ../common/patches
30
* @modules java.base/jdk.internal.misc
31
* @modules jdk.internal.vm.ci/jdk.vm.ci.hotspot
32
* @build jdk.internal.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper
33
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI
34
* -XX:-UseJVMCICompiler
35
* compiler.jvmci.compilerToVM.HasFinalizableSubclassTest
36
*/
37
38
package compiler.jvmci.compilerToVM;
39
40
import compiler.jvmci.common.testcases.AbstractClass;
41
import compiler.jvmci.common.testcases.AbstractClassExtender;
42
import compiler.jvmci.common.testcases.DoNotImplementInterface;
43
import compiler.jvmci.common.testcases.MultipleImplementer1;
44
import compiler.jvmci.common.testcases.MultipleImplementersInterface;
45
import compiler.jvmci.common.testcases.SingleImplementerInterface;
46
import jdk.test.lib.Asserts;
47
import jdk.test.lib.Utils;
48
import jdk.vm.ci.hotspot.CompilerToVMHelper;
49
import jdk.vm.ci.hotspot.HotSpotResolvedObjectType;
50
51
import java.util.HashSet;
52
import java.util.Set;
53
import java.util.stream.Stream;
54
55
public class HasFinalizableSubclassTest {
56
public static void main(String args[]) {
57
HasFinalizableSubclassTest test = new HasFinalizableSubclassTest();
58
for (TestCase tcase : createTestCases()) {
59
test.runTest(tcase);
60
}
61
}
62
63
private static Set<TestCase> createTestCases() {
64
Stream.of(
65
AbstractClassExtender.class,
66
SingleImplementerInterface.class,
67
MultipleImplementersInterface.class,
68
MultipleImplementer1.class,
69
DoNotImplementInterface.class)
70
.forEach(Utils::ensureClassIsLoaded);
71
Set<TestCase> result = new HashSet<>();
72
// iface with finalize method
73
result.add(new TestCase(SingleImplementerInterface.class, false));
74
// iface with default finalize method
75
result.add(new TestCase(MultipleImplementersInterface.class, false));
76
// class which implements iface w/ default finalize method
77
result.add(new TestCase(MultipleImplementer1.class, true));
78
// abstract class with finalizeable subclass
79
result.add(new TestCase(AbstractClass.class, true));
80
// non-implemented iface
81
result.add(new TestCase(DoNotImplementInterface.class, false));
82
return result;
83
}
84
85
private void runTest(TestCase tcase) {
86
System.out.println(tcase);
87
HotSpotResolvedObjectType metaspaceKlass = CompilerToVMHelper
88
.lookupTypeHelper(Utils.toJVMTypeSignature(tcase.aClass),
89
getClass(), /* resolve = */ true);
90
Asserts.assertEQ(tcase.expected,
91
CompilerToVMHelper.hasFinalizableSubclass(metaspaceKlass),
92
"Unexpected finalizableSubclass state for "
93
+ tcase.aClass.getName());
94
}
95
96
private static class TestCase {
97
public final Class<?> aClass;
98
public final boolean expected;
99
100
public TestCase(Class<?> clazz, boolean expected) {
101
this.aClass = clazz;
102
this.expected = expected;
103
}
104
@Override
105
public String toString() {
106
return "CASE: class= " + aClass.getName() + ", expected=" + expected;
107
}
108
}
109
}
110
111