< prev index next >

src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java

Print this page

        

*** 58,67 **** --- 58,68 ---- import java.util.stream.Stream; import jdk.internal.misc.VM; import jdk.internal.module.ModulePatcher.PatchedModuleReader; import jdk.internal.module.SystemModules; + import jdk.internal.module.Resources; /** * The platform or application class loader. Resources loaded from modules * defined to the boot class loader are also loaded via an instance of this
*** 161,170 **** --- 162,179 ---- this.nameToModule = new ConcurrentHashMap<>(); this.moduleToReader = new ConcurrentHashMap<>(); } /** + * Returns {@code true} if there is a class path associated with this + * class loader. + */ + boolean hasClassPath() { + return ucp != null; + } + + /** * Register a module this this class loader. This has the effect of making * the types in the module visible. */ public void loadModule(ModuleReference mref) { assert !VM.isModuleSystemInited();
*** 246,267 **** * Finds a resource with the given name in the modules defined to this * class loader or its class path. */ @Override public URL findResource(String name) { ! String pn = ResourceHelper.getPackageName(name); LoadedModule module = packageToModule.get(pn); if (module != null) { // resource is in a package of a module defined to this loader ! if (module.loader() == this ! && (name.endsWith(".class") || isOpen(module.mref(), pn))) { try { ! return findResource(module.name(), name); // checks URL } catch (IOException ioe) { return null; } } } else { // not in a module package but may be in module defined to this loader --- 255,282 ---- * Finds a resource with the given name in the modules defined to this * class loader or its class path. */ @Override public URL findResource(String name) { ! String pn = Resources.toPackageName(name); LoadedModule module = packageToModule.get(pn); if (module != null) { // resource is in a package of a module defined to this loader ! if (module.loader() == this) { ! URL url; try { ! url = findResource(module.name(), name); // checks URL } catch (IOException ioe) { return null; } + if (url != null + && (name.endsWith(".class") + || url.toString().endsWith("/") + || isOpen(module.mref(), pn))) { + return url; + } } } else { // not in a module package but may be in module defined to this loader
*** 291,309 **** */ @Override public Enumeration<URL> findResources(String name) throws IOException { List<URL> checked = new ArrayList<>(); // list of checked URLs ! String pn = ResourceHelper.getPackageName(name); LoadedModule module = packageToModule.get(pn); if (module != null) { // resource is in a package of a module defined to this loader ! if (module.loader() == this ! && (name.endsWith(".class") || isOpen(module.mref(), pn))) { URL url = findResource(module.name(), name); // checks URL ! if (url != null) { checked.add(url); } } } else { --- 306,326 ---- */ @Override public Enumeration<URL> findResources(String name) throws IOException { List<URL> checked = new ArrayList<>(); // list of checked URLs ! String pn = Resources.toPackageName(name); LoadedModule module = packageToModule.get(pn); if (module != null) { // resource is in a package of a module defined to this loader ! if (module.loader() == this) { URL url = findResource(module.name(), name); // checks URL ! if (url != null ! && (name.endsWith(".class") ! || url.toString().endsWith("/") ! || isOpen(module.mref(), pn))) { checked.add(url); } } } else {
*** 349,363 **** try { urls = AccessController.doPrivileged( new PrivilegedExceptionAction<>() { @Override public List<URL> run() throws IOException { ! List<URL> result = new ArrayList<>(); for (ModuleReference mref : nameToModule.values()) { URI u = moduleReaderFor(mref).find(name).orElse(null); if (u != null) { try { result.add(u.toURL()); } catch (MalformedURLException | IllegalArgumentException e) { } } --- 366,382 ---- try { urls = AccessController.doPrivileged( new PrivilegedExceptionAction<>() { @Override public List<URL> run() throws IOException { ! List<URL> result = null; for (ModuleReference mref : nameToModule.values()) { URI u = moduleReaderFor(mref).find(name).orElse(null); if (u != null) { try { + if (result == null) + result = new ArrayList<>(); result.add(u.toURL()); } catch (MalformedURLException | IllegalArgumentException e) { } }
*** 373,383 **** if (VM.isModuleSystemInited()) { if (map == null) { map = new ConcurrentHashMap<>(); this.resourceCache = new SoftReference<>(map); } ! if (urls.isEmpty()) urls = Collections.emptyList(); map.putIfAbsent(name, urls); } return urls; } --- 392,402 ---- if (VM.isModuleSystemInited()) { if (map == null) { map = new ConcurrentHashMap<>(); this.resourceCache = new SoftReference<>(map); } ! if (urls == null) urls = Collections.emptyList(); map.putIfAbsent(name, urls); } return urls; }
*** 868,885 **** implVendor, sealBase); } /** - * Returns {@code true} if there is a class path associated with this - * class loader. - */ - boolean hasClassPath() { - return ucp != null; - } - - /** * Returns {@code true} if the specified package name is sealed according to * the given manifest. */ private boolean isSealed(String pn, Manifest man) { String path = pn.replace('.', '/').concat("/"); --- 887,896 ----
*** 973,983 **** * packages. This will be replaced once the ModuleDescriptor.Opens * API is updated. */ private boolean isOpen(ModuleReference mref, String pn) { ModuleDescriptor descriptor = mref.descriptor(); ! if (descriptor.isOpen()) return true; for (ModuleDescriptor.Opens opens : descriptor.opens()) { String source = opens.source(); if (!opens.isQualified() && source.equals(pn)) { return true; --- 984,994 ---- * packages. This will be replaced once the ModuleDescriptor.Opens * API is updated. */ private boolean isOpen(ModuleReference mref, String pn) { ModuleDescriptor descriptor = mref.descriptor(); ! if (descriptor.isOpen() || descriptor.isAutomatic()) return true; for (ModuleDescriptor.Opens opens : descriptor.opens()) { String source = opens.source(); if (!opens.isQualified() && source.equals(pn)) { return true;
< prev index next >