< prev index next >

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

Print this page

        

@@ -58,10 +58,11 @@
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Stream;
 
 import jdk.internal.misc.SharedSecrets;
+import jdk.internal.module.Resources;
 
 
 /**
  * A class loader that loads classes and resources from a collection of
  * modules, or from a single module where the class loader is a member

@@ -354,50 +355,57 @@
         return url;
     }
 
     @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);
+                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<URL> findResources(String name) throws IOException {
         List<URL> 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)
+                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()) {
                 try {
                     URL url = findResource(mref.descriptor().name(), name);
                     if (url != null)

@@ -641,11 +649,11 @@
      * 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())
+        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 >