< prev index next >

test/hotspot/jtreg/runtime/LoaderConstraints/common/PreemptingClassLoader.java

Print this page
rev 49686 : 8199852: Print more information about class loaders in LinkageErrors.
Reviewed-by: dholmes

*** 1,7 **** /* ! * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 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 >