86 * BuiltinClassLoader containing this package then the class loader delegates
87 * directly to that class loader. If there isn't a module containing the
88 * package then it delegates the search to the parent class loader and if not
89 * found in the parent then it searches the class path. The main difference
90 * between this and the usual delegation model is that it allows the platform
91 * class loader to delegate to the application class loader, important with
92 * upgraded modules defined to the platform class loader.
93 */
94
95 public class BuiltinClassLoader
96 extends SecureClassLoader
97 {
98 static {
99 if (!ClassLoader.registerAsParallelCapable())
100 throw new InternalError("Unable to register as parallel capable");
101 }
102
103 // parent ClassLoader
104 private final BuiltinClassLoader parent;
105
106 // the URL class path or null if there is no class path
107 private final URLClassPath ucp;
108
109
110 /**
111 * A module defined/loaded by a built-in class loader.
112 *
113 * A LoadedModule encapsulates a ModuleReference along with its CodeSource
114 * URL to avoid needing to create this URL when defining classes.
115 */
116 private static class LoadedModule {
117 private final BuiltinClassLoader loader;
118 private final ModuleReference mref;
119 private final URL codeSourceURL; // may be null
120
121 LoadedModule(BuiltinClassLoader loader, ModuleReference mref) {
122 URL url = null;
123 if (mref.location().isPresent()) {
124 try {
125 url = mref.location().get().toURL();
126 } catch (MalformedURLException | IllegalArgumentException e) { }
|
86 * BuiltinClassLoader containing this package then the class loader delegates
87 * directly to that class loader. If there isn't a module containing the
88 * package then it delegates the search to the parent class loader and if not
89 * found in the parent then it searches the class path. The main difference
90 * between this and the usual delegation model is that it allows the platform
91 * class loader to delegate to the application class loader, important with
92 * upgraded modules defined to the platform class loader.
93 */
94
95 public class BuiltinClassLoader
96 extends SecureClassLoader
97 {
98 static {
99 if (!ClassLoader.registerAsParallelCapable())
100 throw new InternalError("Unable to register as parallel capable");
101 }
102
103 // parent ClassLoader
104 private final BuiltinClassLoader parent;
105
106 // the URL class path, or null if there is no class path
107 private final URLClassPath ucp;
108
109
110 /**
111 * A module defined/loaded by a built-in class loader.
112 *
113 * A LoadedModule encapsulates a ModuleReference along with its CodeSource
114 * URL to avoid needing to create this URL when defining classes.
115 */
116 private static class LoadedModule {
117 private final BuiltinClassLoader loader;
118 private final ModuleReference mref;
119 private final URL codeSourceURL; // may be null
120
121 LoadedModule(BuiltinClassLoader loader, ModuleReference mref) {
122 URL url = null;
123 if (mref.location().isPresent()) {
124 try {
125 url = mref.location().get().toURL();
126 } catch (MalformedURLException | IllegalArgumentException e) { }
|