--- old/src/java.base/share/classes/jdk/internal/loader/Loader.java 2017-03-21 13:44:04.514523760 +0000 +++ new/src/java.base/share/classes/jdk/internal/loader/Loader.java 2017-03-21 13:44:04.319510379 +0000 @@ -60,6 +60,7 @@ import java.util.stream.Stream; import jdk.internal.misc.SharedSecrets; +import jdk.internal.module.Resources; /** @@ -356,45 +357,52 @@ @Override public URL findResource(String name) { - URL url = null; - String pn = ResourceHelper.getPackageName(name); + String pn = Resources.toPackageName(name); LoadedModule module = localPackageToModule.get(pn); + if (module != null) { - if (name.endsWith(".class") || isOpen(module.mref(), pn)) { - try { - url = findResource(module.name(), name); - } catch (IOException ioe) { - // ignore + try { + URL url = findResource(module.name(), name); + if (url != null + && (name.endsWith(".class") + || url.toString().endsWith("/") + || isOpen(module.mref(), pn))) { + return url; } + } catch (IOException ioe) { + // ignore } + } else { for (ModuleReference mref : nameToModule.values()) { try { - url = findResource(mref.descriptor().name(), name); - if (url != null) - break; + URL url = findResource(mref.descriptor().name(), name); + if (url != null) return url; } catch (IOException ioe) { // ignore } } } - return url; + + return null; } @Override public Enumeration findResources(String name) throws IOException { List urls = new ArrayList<>(); - String pn = ResourceHelper.getPackageName(name); + String pn = Resources.toPackageName(name); LoadedModule module = localPackageToModule.get(pn); if (module != null) { - if (name.endsWith(".class") || isOpen(module.mref(), pn)) { - try { - URL url = findResource(module.name(), name); - if (url != null) - urls.add(url); - } catch (IOException ioe) { - // ignore + try { + URL url = findResource(module.name(), name); + if (url != null + && (name.endsWith(".class") + || url.toString().endsWith("/") + || isOpen(module.mref(), pn))) { + urls.add(url); } + } catch (IOException ioe) { + // ignore } } else { for (ModuleReference mref : nameToModule.values()) { @@ -643,7 +651,7 @@ */ private boolean isOpen(ModuleReference mref, String pn) { ModuleDescriptor descriptor = mref.descriptor(); - if (descriptor.isOpen()) + if (descriptor.isOpen() || descriptor.isAutomatic()) return true; for (ModuleDescriptor.Opens opens : descriptor.opens()) { String source = opens.source();