From 3c134d5652d79c967afff4963bee8b45660fe76c Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Sun, 2 Jul 2023 13:48:13 +0700 Subject: [PATCH] Revert "Refactoring launch types" This reverts commit 75410477bf40262d25968fa1eb0a5f41c4bf9105. --- .../server/launch/ClasspathLaunch.java | 17 ++--- .../gravit/launcher/server/launch/Launch.java | 2 +- .../launcher/server/launch/ModuleLaunch.java | 3 +- .../launcher/server/launch/SimpleLaunch.java | 10 +-- .../launcher/server/launch/ModuleLaunch.java | 74 +++++++------------ 5 files changed, 42 insertions(+), 64 deletions(-) diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ClasspathLaunch.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ClasspathLaunch.java index 4071ab1b..554ca32f 100644 --- a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ClasspathLaunch.java +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ClasspathLaunch.java @@ -4,23 +4,20 @@ import pro.gravit.utils.PublicURLClassLoader; import pro.gravit.utils.helper.IOHelper; +import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.net.URL; import java.nio.file.Paths; public class ClasspathLaunch implements Launch { - @Override @SuppressWarnings("ConfusingArgumentToVarargsMethod") - public void run(String mainClass, ServerWrapper.Config config, String[] args) throws Throwable { - URL[] urls = config.classpath.stream() - .map(Paths::get) - .map(IOHelper::toURL) - .toArray(URL[]::new); - - MethodHandles.lookup() - .findStatic(Class.forName(mainClass, true, new PublicURLClassLoader(urls)), "main", MethodType.methodType(void.class, String[].class)) - .invoke(args); + public void run(String mainclass, ServerWrapper.Config config, String[] args) throws Throwable { + URL[] urls = config.classpath.stream().map(Paths::get).map(IOHelper::toURL).toArray(URL[]::new); + ClassLoader ucl = new PublicURLClassLoader(urls); + Class mainClass = Class.forName(mainclass, true, ucl); + MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)); + mainMethod.invoke(args); } } diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/Launch.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/Launch.java index 95f3c91c..f4e915e8 100644 --- a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/Launch.java +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/Launch.java @@ -3,5 +3,5 @@ import pro.gravit.launcher.server.ServerWrapper; public interface Launch { - void run(String mainClass, ServerWrapper.Config config, String[] args) throws Throwable; + void run(String mainclass, ServerWrapper.Config config, String[] args) throws Throwable; } diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ModuleLaunch.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ModuleLaunch.java index d8a520cd..b0e8102e 100644 --- a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ModuleLaunch.java +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ModuleLaunch.java @@ -3,9 +3,8 @@ import pro.gravit.launcher.server.ServerWrapper; public class ModuleLaunch implements Launch { - @Override - public void run(String mainClass, ServerWrapper.Config config, String[] args) { + public void run(String mainclass, ServerWrapper.Config config, String[] args) { throw new UnsupportedOperationException("Module system not supported"); } } diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/SimpleLaunch.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/SimpleLaunch.java index 466a1567..8b2b6df7 100644 --- a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/SimpleLaunch.java +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/SimpleLaunch.java @@ -2,16 +2,16 @@ import pro.gravit.launcher.server.ServerWrapper; +import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; public class SimpleLaunch implements Launch { - @Override @SuppressWarnings("ConfusingArgumentToVarargsMethod") - public void run(String mainClass, ServerWrapper.Config config, String[] args) throws Throwable { - MethodHandles.lookup() - .findStatic(Class.forName(mainClass), "main", MethodType.methodType(void.class, String[].class)) - .invoke(args); + public void run(String mainclass, ServerWrapper.Config config, String[] args) throws Throwable { + Class mainClass = Class.forName(mainclass); + MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)); + mainMethod.invoke(args); } } diff --git a/ServerWrapper/src/main/java11/pro/gravit/launcher/server/launch/ModuleLaunch.java b/ServerWrapper/src/main/java11/pro/gravit/launcher/server/launch/ModuleLaunch.java index 225b2d87..53cbfa7a 100644 --- a/ServerWrapper/src/main/java11/pro/gravit/launcher/server/launch/ModuleLaunch.java +++ b/ServerWrapper/src/main/java11/pro/gravit/launcher/server/launch/ModuleLaunch.java @@ -4,6 +4,7 @@ import pro.gravit.utils.PublicURLClassLoader; import pro.gravit.utils.helper.IOHelper; +import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.module.Configuration; @@ -14,74 +15,55 @@ import java.util.List; public class ModuleLaunch implements Launch { - @Override @SuppressWarnings("ConfusingArgumentToVarargsMethod") - public void run(String mainClass, ServerWrapper.Config config, String[] args) throws Throwable { - URL[] urls = config.classpath.stream() - .map(Paths::get) - .map(IOHelper::toURL) - .toArray(URL[]::new); - - + public void run(String mainclass, ServerWrapper.Config config, String[] args) throws Throwable { + URL[] urls = config.classpath.stream().map(Paths::get).map(IOHelper::toURL).toArray(URL[]::new); + ClassLoader ucl = new PublicURLClassLoader(urls); // Create Module Layer - ModuleFinder finder = ModuleFinder.of(config.moduleConf.modulePath.stream() - .map(Paths::get) - .toArray(Path[]::new) - ); - + ModuleFinder finder = ModuleFinder.of(config.moduleConf.modulePath.stream().map(Paths::get).toArray(Path[]::new)); ModuleLayer bootLayer = ModuleLayer.boot(); - Configuration configuration = bootLayer.configuration().resolveAndBind(ModuleFinder.of(), finder, config.moduleConf.modules); - ModuleLayer.Controller controller = ModuleLayer.defineModulesWithOneLoader(configuration, List.of(bootLayer), new PublicURLClassLoader(urls)); + Configuration configuration = bootLayer.configuration() + .resolveAndBind(ModuleFinder.of(), finder, config.moduleConf.modules); + ModuleLayer.Controller controller = ModuleLayer.defineModulesWithOneLoader(configuration, List.of(bootLayer), ucl); ModuleLayer layer = controller.layer(); - // Configure exports / opens - for (var e : config.moduleConf.exports.entrySet()) { + for(var e : config.moduleConf.exports.entrySet()) { String[] split = e.getKey().split("\\\\"); - - controller.addExports( - layer.findModule(split[0]).orElseThrow(), - split[1], - layer.findModule(e.getValue()).orElseThrow() - ); + Module source = layer.findModule(split[0]).orElseThrow(); + String pkg = split[1]; + Module target = layer.findModule(e.getValue()).orElseThrow(); + controller.addExports(source, pkg, target); } - - for (var e : config.moduleConf.opens.entrySet()) { + for(var e : config.moduleConf.opens.entrySet()) { String[] split = e.getKey().split("\\\\"); - - controller.addOpens( - layer.findModule(split[0]).orElseThrow(), - split[1], - layer.findModule(e.getValue()).orElseThrow() - ); + Module source = layer.findModule(split[0]).orElseThrow(); + String pkg = split[1]; + Module target = layer.findModule(e.getValue()).orElseThrow(); + controller.addOpens(source, pkg, target); } - - for (var e : config.moduleConf.reads.entrySet()) { - controller.addReads( - layer.findModule(e.getKey()).orElseThrow(), - layer.findModule(e.getValue()).orElseThrow() - ); + for(var e : config.moduleConf.reads.entrySet()) { + Module source = layer.findModule(e.getKey()).orElseThrow(); + Module target = layer.findModule(e.getValue()).orElseThrow(); + controller.addReads(source, target); } - Module mainModule = layer.findModule(config.moduleConf.mainModule).orElseThrow(); - Module unnamed = ModuleLaunch.class.getClassLoader().getUnnamedModule(); - if (unnamed != null) { + if(unnamed != null) { controller.addOpens(mainModule, getPackageFromClass(config.mainclass), unnamed); } - // Start main class - MethodHandles.lookup() - .findStatic(Class.forName(mainClass, true, mainModule.getClassLoader()), "main", MethodType.methodType(void.class, String[].class)) - .invoke(args); + ClassLoader loader = mainModule.getClassLoader(); + Class mainClass = Class.forName(mainclass, true, loader); + MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)); + mainMethod.invoke(args); } private static String getPackageFromClass(String clazz) { int index = clazz.lastIndexOf("."); - if (index >= 0) { + if(index >= 0) { return clazz.substring(0, index); } - return clazz; } }