< prev index next >
src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java
Print this page
rev 54468 : 8222144: Lazily create JRT code source URLs for LoadedModules
Reviewed-by: alanb
*** 62,71 ****
--- 62,72 ----
import jdk.internal.access.SharedSecrets;
import jdk.internal.misc.VM;
import jdk.internal.module.ModulePatcher.PatchedModuleReader;
import jdk.internal.module.Resources;
+ import jdk.internal.vm.annotation.Stable;
/**
* The platform or application class loader. Resources loaded from modules
* defined to the boot class loader are also loaded via an instance of this
*** 115,142 ****
* URL to avoid needing to create this URL when defining classes.
*/
private static class LoadedModule {
private final BuiltinClassLoader loader;
private final ModuleReference mref;
! private final URL codeSourceURL; // may be null
LoadedModule(BuiltinClassLoader loader, ModuleReference mref) {
URL url = null;
! if (mref.location().isPresent()) {
! try {
! url = mref.location().get().toURL();
! } catch (MalformedURLException | IllegalArgumentException e) { }
}
this.loader = loader;
this.mref = mref;
this.codeSourceURL = url;
}
BuiltinClassLoader loader() { return loader; }
ModuleReference mref() { return mref; }
String name() { return mref.descriptor().name(); }
! URL codeSourceURL() { return codeSourceURL; }
}
// maps package name to loaded module for modules in the boot layer
private static final Map<String, LoadedModule> packageToModule
--- 116,164 ----
* URL to avoid needing to create this URL when defining classes.
*/
private static class LoadedModule {
private final BuiltinClassLoader loader;
private final ModuleReference mref;
! private final URI uri; // may be null
! private @Stable URL codeSourceURL; // may be null
LoadedModule(BuiltinClassLoader loader, ModuleReference mref) {
URL url = null;
! this.uri = mref.location().orElse(null);
! if (uri != null) {
! // for non-jrt schemes we need to resolve the codeSourceURL
! // eagerly during bootstrap since the handler might be
! // overridden
! if (!"jrt".equals(uri.getScheme())) {
! url = createURL(uri);
! }
}
this.loader = loader;
this.mref = mref;
this.codeSourceURL = url;
}
BuiltinClassLoader loader() { return loader; }
ModuleReference mref() { return mref; }
String name() { return mref.descriptor().name(); }
!
! URL codeSourceURL() {
! URL url = codeSourceURL;
! if (url == null && uri != null) {
! codeSourceURL = url = createURL(uri);
! }
! return url;
! }
!
! private URL createURL(URI uri) {
! URL url = null;
! try {
! url = uri.toURL();
! } catch (MalformedURLException | IllegalArgumentException e) {
! }
! return url;
! }
}
// maps package name to loaded module for modules in the boot layer
private static final Map<String, LoadedModule> packageToModule
< prev index next >