< 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 >