Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/lang/StackTraceElement/WithClassLoaderName.java
41149 views
1
/*
2
* Copyright (c) 2016, 2017, 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 6479237
27
* @summary Basic test StackTraceElement with class loader names
28
* @library lib /lib/testlibrary /test/lib
29
* @modules jdk.compiler
30
* @build jdk.test.lib.compiler.CompilerUtils
31
* m1/* WithClassLoaderName
32
* @run main/othervm m1/com.app.Main
33
* @run main/othervm WithClassLoaderName
34
*/
35
36
import java.lang.reflect.InvocationTargetException;
37
import java.lang.reflect.Method;
38
import java.net.URL;
39
import java.net.URLClassLoader;
40
import java.nio.file.Path;
41
import java.nio.file.Paths;
42
43
import jdk.test.lib.compiler.CompilerUtils;
44
45
import com.app.Utils;
46
47
public class WithClassLoaderName {
48
private static final String TEST_SRC = System.getProperty("test.src");
49
private static final String SRC_FILENAME = "WithClassLoaderName.java";
50
51
private static final Path SRC_DIR = Paths.get(TEST_SRC, "src");
52
private static final Path CLASSES_DIR = Paths.get("classes");
53
private static final String THROW_EXCEPTION_CLASS = "p.ThrowException";
54
55
public static void main(String... args) throws Exception {
56
/*
57
* Test the following frames both have the same class loader name "app"
58
* com.app.Test::test
59
* WithClassLoaderName::test
60
*/
61
Utils.verify(WithClassLoaderName.class, "app", "main", SRC_FILENAME);
62
63
/*
64
* Test StackTraceElement for a class loaded by a named URLClassLoader
65
*/
66
compile();
67
testURLClassLoader("myloader");
68
69
// loader name same as application class loader
70
testURLClassLoader("app");
71
}
72
73
private static void compile() throws Exception {
74
boolean rc = CompilerUtils.compile(SRC_DIR, CLASSES_DIR);
75
if (!rc) {
76
throw new RuntimeException("compilation fails");
77
}
78
}
79
80
public static void testURLClassLoader(String loaderName) throws Exception {
81
System.err.println("---- test URLClassLoader name: " + loaderName);
82
83
URL[] urls = new URL[] { CLASSES_DIR.toUri().toURL() };
84
ClassLoader parent = ClassLoader.getSystemClassLoader();
85
URLClassLoader loader = new URLClassLoader(loaderName, urls, parent);
86
87
Class<?> c = Class.forName(THROW_EXCEPTION_CLASS, true, loader);
88
Method method = c.getMethod("throwError");
89
try {
90
// invoke p.ThrowException::throwError
91
method.invoke(null);
92
} catch (InvocationTargetException x) {
93
Throwable e = x.getCause();
94
e.printStackTrace();
95
96
StackTraceElement[] stes = e.getStackTrace();
97
StackWalker.StackFrame[] frames = new StackWalker.StackFrame[] {
98
Utils.makeStackFrame(c, "throwError", "ThrowException.java"),
99
Utils.makeStackFrame(WithClassLoaderName.class, "testURLClassLoader",
100
SRC_FILENAME),
101
Utils.makeStackFrame(WithClassLoaderName.class, "main", SRC_FILENAME),
102
};
103
104
// p.ThrowException.throwError
105
Utils.checkFrame(loaderName, frames[0], stes[0]);
106
// skip reflection frames
107
int i = 1;
108
while (i < stes.length) {
109
String cn = stes[i].getClassName();
110
if (!cn.startsWith("java.lang.reflect.") &&
111
!cn.startsWith("jdk.internal.reflect."))
112
break;
113
i++;
114
}
115
// WithClassLoaderName.testURLClassLoader
116
Utils.checkFrame("app", frames[1], stes[i]);
117
118
// WithClassLoaderName.main
119
Utils.checkFrame("app", frames[2], stes[i+1]);
120
121
}
122
}
123
124
}
125
126
127