33
44import java .io .IOException ;
55import java .lang .module .ModuleReader ;
6- import java .lang .module .ModuleReference ;
76import java .lang .module .ResolvedModule ;
87import java .net .URL ;
98import java .net .URLClassLoader ;
109import java .nio .ByteBuffer ;
11- import java .security .CodeSigner ;
12- import java .security .CodeSource ;
1310import java .util .HashMap ;
1411import java .util .Map ;
1512import java .util .Set ;
@@ -20,48 +17,48 @@ public final class MangoLoader extends URLClassLoader {
2017 ClassLoader .registerAsParallelCapable ();
2118 }
2219
23- private final Map <String , ModuleReference > moduleMap = new HashMap <>();
24- private final Map <String , ModuleReader > moduleReaderMap = new HashMap <>();
25-
26- private final Map <String , ModuleReference > localPackageToModule = new HashMap <>();
20+ private final Map <String , LoadedModule > moduleMap = new HashMap <>();
21+ private final Map <String , LoadedModule > localPackageToModule = new HashMap <>();
2722
2823 public MangoLoader (URL [] urls , Set <ResolvedModule > modules , ClassLoader parent ) {
2924 super (urls , parent );
3025
31-
3226 modules .forEach (module -> {
33- moduleMap .put (
34- module .name (),
35- module .reference ()
36- );
37-
38- module .reference ().descriptor ().packages ().forEach (pkg -> {
39- localPackageToModule .put (pkg , module .reference ());
40- });
41- });
27+ try {
28+ final var loadedModule = new LoadedModule (module .reference ());
29+
30+ moduleMap .put (
31+ module .name (),
32+ loadedModule
33+ );
4234
43- System .out .println ("Fiinisgh" );
35+ module .reference ().descriptor ().packages ().forEach (pkg -> {
36+ localPackageToModule .put (pkg , loadedModule );
37+ });
38+ } catch (IOException e ) {
39+ throw new RuntimeException (e );
40+ }
41+ });
4442 }
4543
4644 @ Override
4745 protected URL findResource (String moduleName , String name ) throws IOException {
48- final var module = moduleMap .get (moduleName );
46+ final var loadedModule = moduleMap .get (moduleName );
4947
50- if (module != null ) {
51- final var uri = moduleReaderFor ( module ).find (name );
48+ if (loadedModule != null ) {
49+ final var uri = loadedModule . getModuleReader ( ).find (name );
5250 if (uri .isPresent ())
5351 return uri .get ().toURL ();
5452 }
5553
56-
5754 return null ;
5855 }
5956
6057 @ Override
6158 protected Class <?> findClass (String moduleName , String name ) {
6259 Class <?> c = null ;
63- ModuleReference loadedModule = findLoadedModule (name );
64- if (loadedModule != null && loadedModule .descriptor ().name ().equals (moduleName ))
60+ LoadedModule loadedModule = findLoadedModule (name );
61+ if (loadedModule != null && loadedModule .getModuleReference (). descriptor ().name ().equals (moduleName ))
6562 c = defineClass (name , loadedModule );
6663 return c ;
6764 }
@@ -72,8 +69,8 @@ protected Class<?> findClass(String moduleName, String name) {
7269 *
7370 * @return the resulting Class or {@code null} if an I/O error occurs
7471 */
75- private Class <?> defineClass (String cn , ModuleReference loadedModule ) {
76- ModuleReader reader = moduleReaderFor ( loadedModule );
72+ private Class <?> defineClass (String cn , LoadedModule loadedModule ) {
73+ ModuleReader reader = loadedModule . getModuleReader ( );
7774
7875 try {
7976 // read class file
@@ -85,7 +82,7 @@ private Class<?> defineClass(String cn, ModuleReference loadedModule) {
8582 }
8683
8784 try {
88- return defineClass (cn , bb , new CodeSource ( loadedModule .location (). get (). toURL (), ( CodeSigner []) null ));
85+ return defineClass (cn , bb , loadedModule .getCodeSource ( ));
8986 } finally {
9087 reader .release (bb );
9188 }
@@ -101,7 +98,7 @@ private Class<?> defineClass(String cn, ModuleReference loadedModule) {
10198 * Returns {@code null} if none of the modules defined to this
10299 * class loader contain the API package for the class.
103100 */
104- private ModuleReference findLoadedModule (String cn ) {
101+ private LoadedModule findLoadedModule (String cn ) {
105102 String pn = packageName (cn );
106103 return pn .isEmpty () ? null : localPackageToModule .get (pn );
107104 }
@@ -114,14 +111,4 @@ private String packageName(String cn) {
114111 return (pos < 0 ) ? "" : cn .substring (0 , pos );
115112 }
116113
117- private ModuleReader moduleReaderFor (ModuleReference moduleReference ) {
118- return moduleReaderMap .computeIfAbsent (moduleReference .descriptor ().name (), k -> {
119- try {
120- return moduleReference .open ();
121- } catch (IOException e ) {
122- throw new RuntimeException (e );
123- }
124- });
125- }
126-
127114}
0 commit comments