Skip to content

Commit 2cfd3a5

Browse files
committed
Prepared Bootstrap for proper API support of MangoLoaderImpl via adding IMangoLoader
1 parent a3c1712 commit 2cfd3a5

File tree

8 files changed

+38
-31
lines changed

8 files changed

+38
-31
lines changed

src/main/java/module-info.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
requires jdk.unsupported;
33
requires java.scripting;
44

5-
opens org.mangorage.bootstrap;
65
exports org.mangorage.bootstrap.api.transformer;
76
exports org.mangorage.bootstrap.api.module;
87
exports org.mangorage.bootstrap.api.launch;
98
exports org.mangorage.bootstrap.api.loader;
109

10+
opens org.mangorage.bootstrap;
11+
1112
uses org.mangorage.bootstrap.api.transformer.IClassTransformer;
1213
uses org.mangorage.bootstrap.api.module.IModuleConfigurator;
1314
uses org.mangorage.bootstrap.api.launch.ILaunchTarget;

src/main/java/org/mangorage/bootstrap/Bootstrap.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import org.mangorage.bootstrap.api.launch.ILaunchTarget;
44
import org.mangorage.bootstrap.internal.Util;
5-
import org.mangorage.bootstrap.internal.impl.MangoBotLaunchTarget;
5+
import org.mangorage.bootstrap.internal.MangoBotLaunchTarget;
66
import java.lang.module.Configuration;
77
import java.lang.module.ModuleFinder;
88
import java.nio.file.Files;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.mangorage.bootstrap.api.loader;
2+
3+
import org.mangorage.bootstrap.internal.MangoLoaderImpl;
4+
5+
public sealed interface IMangoLoader permits MangoLoaderImpl {
6+
byte[] getClassBytes(String name);
7+
boolean hasClass(String name);
8+
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,23 @@ public final class ClassTransformers {
1515
private final List<IClassTransformer> transformers = new CopyOnWriteArrayList<>(); // Transformer's
1616
private final ClassLoader loader;
1717

18-
public ClassTransformers(ClassLoader loader) {
18+
ClassTransformers(ClassLoader loader) {
1919
this.loader = loader;
2020
}
2121

22-
public void add(String name, Class<?> clz) {
22+
void add(String name, Class<?> clz) {
2323
classes.put(name, clz);
2424
}
2525

26-
public void add(IClassTransformer transformer) {
26+
void add(IClassTransformer transformer) {
2727
transformers.add(transformer);
2828
}
2929

30-
public boolean isEmpty() {
30+
boolean isEmpty() {
3131
return transformers.isEmpty();
3232
}
3333

34-
public byte[] transform(String name, byte[] classData) {;
34+
byte[] transform(String name, byte[] classData) {;
3535

3636
AtomicReference<TransformResult> result = new AtomicReference<>(TransformerFlag.NO_REWRITE.of(classData));
3737
AtomicReference<IClassTransformer> _transformer = new AtomicReference<>();
@@ -52,11 +52,11 @@ public boolean isEmpty() {
5252
return null;
5353
}
5454

55-
public boolean containsClass(String name) {
55+
boolean containsClass(String name) {
5656
return classes.containsKey(name);
5757
}
5858

59-
public Class<?> getClazz(String string) {
59+
Class<?> getClazz(String string) {
6060
return classes.get(string);
6161
}
6262
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515

1616
public final class JarHandler {
1717

18-
public static void safeHandle(final Path source, final Path target) {
18+
static void safeHandle(final Path source, final Path target) {
1919
try {
2020
handle(source, target);
2121
} catch (IOException e) {
2222
throw new RuntimeException(e);
2323
}
2424
}
2525

26-
public static void handle(final Path source, final Path target) throws IOException {
26+
static void handle(final Path source, final Path target) throws IOException {
2727

2828
if (Files.exists(target)) {
2929
deleteDirectory(target);

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,29 @@ public final class LoadedModule implements ModuleReader {
1818
private final ModuleReader moduleReader;
1919
private final CodeSource codeSource;
2020

21-
public LoadedModule(ModuleReference moduleReference) throws IOException {
21+
LoadedModule(ModuleReference moduleReference) throws IOException {
2222
this.moduleReference = moduleReference;
2323
this.moduleReader = moduleReference.open();
2424
this.codeSource = new CodeSource(moduleReference.location().get().toURL(), (CodeSigner[]) null);
2525
}
2626

27-
public ModuleReference getModuleReference() {
27+
ModuleReference getModuleReference() {
2828
return moduleReference;
2929
}
3030

31-
public ModuleReader getModuleReader() {
31+
ModuleReader getModuleReader() {
3232
return moduleReader;
3333
}
3434

35-
public CodeSource getCodeSource() {
35+
CodeSource getCodeSource() {
3636
return codeSource;
3737
}
3838

39-
public void addChild(LoadedModule module) {
39+
void addChild(LoadedModule module) {
4040
this.children.add(module);
4141
}
4242

43-
public String name() {
43+
String name() {
4444
return getModuleReference().descriptor().name();
4545
}
4646

src/main/java/org/mangorage/bootstrap/internal/impl/MangoBotLaunchTarget.java renamed to src/main/java/org/mangorage/bootstrap/internal/MangoBotLaunchTarget.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
package org.mangorage.bootstrap.internal.impl;
1+
package org.mangorage.bootstrap.internal;
22

33
import org.mangorage.bootstrap.api.launch.ILaunchTarget;
4-
import org.mangorage.bootstrap.internal.JarHandler;
5-
import org.mangorage.bootstrap.api.loader.MangoLoader;
6-
import org.mangorage.bootstrap.internal.Util;
74

85
import java.lang.module.Configuration;
96
import java.lang.module.ModuleFinder;
@@ -56,7 +53,7 @@ public void launch(ModuleLayer parent, String[] args) throws Throwable {
5653
moduleNames
5754
);
5855

59-
final var moduleCL = new MangoLoader(moduleCfg.modules(), Thread.currentThread().getContextClassLoader());
56+
final var moduleCL = new MangoLoaderImpl(moduleCfg.modules(), Thread.currentThread().getContextClassLoader());
6057

6158
final var moduleLayerController = ModuleLayer.defineModules(moduleCfg, List.of(parent), s -> moduleCL);
6259
final var moduleLayer = moduleLayerController.layer();
@@ -89,15 +86,15 @@ public void launch(ModuleLayer parent, String[] args) throws Throwable {
8986
callMain("org.mangorage.entrypoint.MangoBotCore", args, moduleLayer.findModule("org.mangorage.mangobotcore").get());
9087
}
9188

92-
public static void addExports(ModuleLayer.Controller controller, Optional<Module> source, Optional<Module> target, List<String> packages) {
89+
static void addExports(ModuleLayer.Controller controller, Optional<Module> source, Optional<Module> target, List<String> packages) {
9390
if (source.isPresent() && target.isPresent()) {
9491
packages.forEach(pkg -> {
9592
controller.addExports(source.get(), pkg, target.get());
9693
});
9794
}
9895
}
9996

100-
public static void addOpens(ModuleLayer.Controller controller, Optional<Module> source, Optional<Module> target, List<String> packages) {
97+
static void addOpens(ModuleLayer.Controller controller, Optional<Module> source, Optional<Module> target, List<String> packages) {
10198
if (source.isPresent() && target.isPresent()) {
10299
packages.forEach(pkg -> {
103100
controller.addOpens(source.get(), pkg, target.get());

src/main/java/org/mangorage/bootstrap/api/loader/MangoLoader.java renamed to src/main/java/org/mangorage/bootstrap/internal/MangoLoaderImpl.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
package org.mangorage.bootstrap.api.loader;
1+
package org.mangorage.bootstrap.internal;
22

3+
import org.mangorage.bootstrap.api.loader.IMangoLoader;
34
import org.mangorage.bootstrap.api.module.IModuleConfigurator;
45
import org.mangorage.bootstrap.api.transformer.IClassTransformer;
5-
import org.mangorage.bootstrap.internal.ClassTransformers;
6-
import org.mangorage.bootstrap.internal.LoadedModule;
76

87
import java.io.IOException;
98
import java.io.InputStream;
@@ -23,7 +22,7 @@
2322
import java.util.Set;
2423
import java.util.concurrent.ConcurrentHashMap;
2524

26-
public final class MangoLoader extends SecureClassLoader {
25+
public final class MangoLoaderImpl extends SecureClassLoader implements IMangoLoader {
2726

2827
static {
2928
ClassLoader.registerAsParallelCapable();
@@ -33,7 +32,7 @@ public final class MangoLoader extends SecureClassLoader {
3332
private final Map<String, LoadedModule> moduleMap = new ConcurrentHashMap<>();
3433
private final Map<String, LoadedModule> localPackageToModule = new ConcurrentHashMap<>();
3534

36-
public MangoLoader(Set<ResolvedModule> modules, ClassLoader parent) {
35+
public MangoLoaderImpl(Set<ResolvedModule> modules, ClassLoader parent) {
3736
super(parent);
3837

3938
modules.forEach(module -> {
@@ -54,7 +53,7 @@ public MangoLoader(Set<ResolvedModule> modules, ClassLoader parent) {
5453
});
5554
}
5655

57-
public void load() {
56+
void load() {
5857
loadTransformers();
5958
loadModuleConfiguration();
6059
}
@@ -85,6 +84,7 @@ void loadModuleConfiguration() {
8584
});
8685
}
8786

87+
@Override
8888
public boolean hasClass(final String name) {
8989
final String canonicalName = name.replace('/', '.');
9090
return this.findLoadedClass(canonicalName) != null;
@@ -227,6 +227,7 @@ protected Class<?> findClass(String moduleName, String name) {
227227
return c;
228228
}
229229

230+
@Override
230231
public byte[] getClassBytes(String cn) {
231232
LoadedModule loadedModule = findLoadedModule(cn);
232233
if (loadedModule != null) {
@@ -322,7 +323,7 @@ private String packageName(String cn) {
322323
* returns null if the resource name ends with a "/" (a directory)
323324
* or the resource name does not contain a "/".
324325
*/
325-
public static String toPackageName(String name) {
326+
private static String toPackageName(String name) {
326327
int index = name.lastIndexOf('/');
327328
if (index == -1 || index == name.length()-1) {
328329
return "";

0 commit comments

Comments
 (0)