Skip to content

Commit 67a1ec4

Browse files
committed
Finally made bootstrap better... got rid of Config.java stuff...
1 parent 84e933a commit 67a1ec4

File tree

2 files changed

+56
-38
lines changed

2 files changed

+56
-38
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.mangorage.bootstrap.internal;
2+
3+
import java.io.IOException;
4+
import java.lang.module.ModuleReader;
5+
import java.lang.module.ModuleReference;
6+
import java.security.CodeSigner;
7+
import java.security.CodeSource;
8+
9+
public final class LoadedModule {
10+
private final ModuleReference moduleReference;
11+
private final ModuleReader moduleReader;
12+
private final CodeSource codeSource;
13+
14+
LoadedModule(ModuleReference moduleReference) throws IOException {
15+
this.moduleReference = moduleReference;
16+
this.moduleReader = moduleReference.open();
17+
this.codeSource = new CodeSource(moduleReference.location().get().toURL(), (CodeSigner[]) null);
18+
}
19+
20+
ModuleReference getModuleReference() {
21+
return moduleReference;
22+
}
23+
24+
ModuleReader getModuleReader() {
25+
return moduleReader;
26+
}
27+
28+
CodeSource getCodeSource() {
29+
return codeSource;
30+
}
31+
}

src/main/java/org/mangorage/bootstrap/internal/MangoLoader.java

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33

44
import java.io.IOException;
55
import java.lang.module.ModuleReader;
6-
import java.lang.module.ModuleReference;
76
import java.lang.module.ResolvedModule;
87
import java.net.URL;
98
import java.net.URLClassLoader;
109
import java.nio.ByteBuffer;
11-
import java.security.CodeSigner;
12-
import java.security.CodeSource;
1310
import java.util.HashMap;
1411
import java.util.Map;
1512
import 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

Comments
 (0)