< prev index next >
test/hotspot/jtreg/runtime/LoaderConstraints/common/PreemptingClassLoader.java
Print this page
rev 49654 : 8199852: Print more information about class loaders in LinkageErrors.
*** 25,42 ****
import java.io.*;
public class PreemptingClassLoader extends ClassLoader {
private final Set<String> names = new HashSet<>();
public PreemptingClassLoader(String... names) {
for (String n : names) this.names.add(n);
}
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
if (!names.contains(name)) return super.loadClass(name, resolve);
! Class<?> result = findLoadedClass(name);
if (result == null) {
String filename = name.replace('.', '/') + ".class";
try (InputStream data = getResourceAsStream(filename)) {
if (data == null) throw new ClassNotFoundException();
try (ByteArrayOutputStream buffer = new ByteArrayOutputStream()) {
--- 25,54 ----
import java.io.*;
public class PreemptingClassLoader extends ClassLoader {
private final Set<String> names = new HashSet<>();
+ boolean checkLoaded = true;
public PreemptingClassLoader(String... names) {
for (String n : names) this.names.add(n);
}
+ public PreemptingClassLoader(String name, String[] names) {
+ super(name, ClassLoader.getSystemClassLoader());
+ for (String n : names) this.names.add(n);
+ }
+
+ public PreemptingClassLoader(String name, String[] names, boolean cL) {
+ super(name, ClassLoader.getSystemClassLoader());
+ for (String n : names) this.names.add(n);
+ checkLoaded = cL;
+ }
+
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
if (!names.contains(name)) return super.loadClass(name, resolve);
! Class<?> result = checkLoaded ? findLoadedClass(name) : null;
if (result == null) {
String filename = name.replace('.', '/') + ".class";
try (InputStream data = getResourceAsStream(filename)) {
if (data == null) throw new ClassNotFoundException();
try (ByteArrayOutputStream buffer = new ByteArrayOutputStream()) {
< prev index next >