< prev index next >
src/java.base/share/classes/jdk/internal/loader/Loader.java
Print this page
*** 58,67 ****
--- 58,68 ----
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,403 ****
return url;
}
@Override
public URL findResource(String name) {
! URL url = null;
! String pn = ResourceHelper.getPackageName(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
}
! }
} else {
for (ModuleReference mref : nameToModule.values()) {
try {
! url = findResource(mref.descriptor().name(), name);
! if (url != null)
! break;
} catch (IOException ioe) {
// ignore
}
}
}
! return url;
}
@Override
public Enumeration<URL> findResources(String name) throws IOException {
List<URL> urls = new ArrayList<>();
! String pn = ResourceHelper.getPackageName(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
}
- }
} else {
for (ModuleReference mref : nameToModule.values()) {
try {
URL url = findResource(mref.descriptor().name(), name);
if (url != null)
--- 355,411 ----
return url;
}
@Override
public URL findResource(String name) {
! String pn = Resources.toPackageName(name);
LoadedModule module = localPackageToModule.get(pn);
+
if (module != null) {
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 url = findResource(mref.descriptor().name(), name);
! if (url != null) return url;
} catch (IOException ioe) {
// ignore
}
}
}
!
! return null;
}
@Override
public Enumeration<URL> findResources(String name) throws IOException {
List<URL> urls = new ArrayList<>();
! String pn = Resources.toPackageName(name);
LoadedModule module = localPackageToModule.get(pn);
if (module != null) {
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()) {
try {
URL url = findResource(mref.descriptor().name(), name);
if (url != null)
*** 641,651 ****
* 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;
--- 649,659 ----
* 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 >