From 218e12714d28b966bb4117d5733635fc7e669d9a Mon Sep 17 00:00:00 2001 From: JFronny Date: Sat, 6 May 2023 09:54:40 +0200 Subject: [PATCH] InstanceMeta.checkArguments to centralize null checking + remove mutability from Arguments and kotlin lambda indy --- .../inceptum/cli/commands/LaunchCommand.java | 13 +++++-------- launcher-gtk/build.gradle.kts | 13 +++++++++++++ .../gtk/window/settings/instance/GeneralTab.kt | 5 +---- .../inceptum/imgui/window/edit/ArgumentsTab.java | 6 +----- .../launcher/model/inceptum/InstanceMeta.java | 14 ++++++++++++++ 5 files changed, 34 insertions(+), 17 deletions(-) diff --git a/launcher-cli/src/main/java/io/gitlab/jfronny/inceptum/cli/commands/LaunchCommand.java b/launcher-cli/src/main/java/io/gitlab/jfronny/inceptum/cli/commands/LaunchCommand.java index 3092914..a85bb36 100644 --- a/launcher-cli/src/main/java/io/gitlab/jfronny/inceptum/cli/commands/LaunchCommand.java +++ b/launcher-cli/src/main/java/io/gitlab/jfronny/inceptum/cli/commands/LaunchCommand.java @@ -10,6 +10,7 @@ import io.gitlab.jfronny.inceptum.launcher.system.setup.Steps; import java.io.IOException; import java.util.*; +import java.util.stream.Stream; public class LaunchCommand extends BaseInstanceCommand { private final boolean server; @@ -47,14 +48,10 @@ public class LaunchCommand extends BaseInstanceCommand { } if (args.length > 1) { InstanceMeta meta = instance.meta(); - if (meta.arguments == null) meta.arguments = new InstanceMeta.Arguments(new ArrayList<>(), new ArrayList<>(), new ArrayList<>()); - else meta.arguments = new InstanceMeta.Arguments( - meta.arguments.jvm() == null ? new ArrayList<>() : new ArrayList<>(meta.arguments.jvm()), - meta.arguments.client() == null ? new ArrayList<>() : new ArrayList<>(meta.arguments.client()), - meta.arguments.server() == null ? new ArrayList<>() : new ArrayList<>(meta.arguments.server()) - ); - meta.arguments.client().addAll(args.after(0)); - meta.arguments.server().addAll(args.after(0)); + meta.checkArguments(); + meta.arguments = meta.arguments + .withClient(Stream.concat(meta.arguments.client().stream(), args.after(0).stream()).toList()) + .withServer(Stream.concat(meta.arguments.server().stream(), args.after(0).stream()).toList()); } Steps.reDownload(instance, Steps.createProcessState()); if (server) { diff --git a/launcher-gtk/build.gradle.kts b/launcher-gtk/build.gradle.kts index 036665d..cd44268 100644 --- a/launcher-gtk/build.gradle.kts +++ b/launcher-gtk/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + plugins { id("inceptum.application") id("com.github.johnrengelman.shadow") @@ -48,3 +50,14 @@ tasks.runShadow { environment("GTK_DEBUG", "interactive") // interactive:actions jvmArgs("--enable-preview", "--enable-native-access=ALL-UNNAMED") } + +kotlin { + sourceSets.all { + languageSettings { + languageVersion = "2.0" + progressiveMode = true + } + } +} + +tasks.withType(KotlinCompile::class) { compilerOptions.freeCompilerArgs.addAll("-Xlambdas=indy") } \ No newline at end of file diff --git a/launcher-gtk/src/main/kotlin/io/gitlab/jfronny/inceptum/gtk/window/settings/instance/GeneralTab.kt b/launcher-gtk/src/main/kotlin/io/gitlab/jfronny/inceptum/gtk/window/settings/instance/GeneralTab.kt index 8a6dd1a..92bd1df 100644 --- a/launcher-gtk/src/main/kotlin/io/gitlab/jfronny/inceptum/gtk/window/settings/instance/GeneralTab.kt +++ b/launcher-gtk/src/main/kotlin/io/gitlab/jfronny/inceptum/gtk/window/settings/instance/GeneralTab.kt @@ -185,10 +185,7 @@ class GeneralTab(instance: Instance, window: InstanceSettingsWindow) : SettingsT } } section("instance.settings.general.args") { - if (instance.meta.arguments == null) instance.meta.arguments = InstanceMeta.Arguments(listOf(), listOf(), listOf()) - if (instance.meta.arguments.jvm == null) instance.meta.arguments = instance.meta.arguments.withJvm(listOf()) - if (instance.meta.arguments.client == null) instance.meta.arguments = instance.meta.arguments.withClient(listOf()) - if (instance.meta.arguments.server == null) instance.meta.arguments = instance.meta.arguments.withServer(listOf()) + instance.meta.checkArguments() row("instance.settings.general.args.jvm", "instance.settings.general.args.jvm.subtitle") { setEntry(ArgumentsTokenizer.join(instance.meta.arguments.jvm.toTypedArray())) { instance.meta.arguments = instance.meta.arguments.withJvm(listOf(*ArgumentsTokenizer.tokenize(it))) diff --git a/launcher-imgui/src/main/java/io/gitlab/jfronny/inceptum/imgui/window/edit/ArgumentsTab.java b/launcher-imgui/src/main/java/io/gitlab/jfronny/inceptum/imgui/window/edit/ArgumentsTab.java index 3319827..ee9b9b5 100644 --- a/launcher-imgui/src/main/java/io/gitlab/jfronny/inceptum/imgui/window/edit/ArgumentsTab.java +++ b/launcher-imgui/src/main/java/io/gitlab/jfronny/inceptum/imgui/window/edit/ArgumentsTab.java @@ -7,7 +7,6 @@ import io.gitlab.jfronny.inceptum.imgui.control.Tab; import io.gitlab.jfronny.inceptum.imgui.window.GuiUtil; import io.gitlab.jfronny.inceptum.launcher.model.inceptum.InstanceMeta; -import java.util.LinkedList; import java.util.List; public class ArgumentsTab extends Tab { @@ -20,12 +19,9 @@ public class ArgumentsTab extends Tab { super("Arguments"); this.window = window; InstanceMeta meta = window.instance.meta(); - if (meta.arguments == null) meta.arguments = new InstanceMeta.Arguments(new LinkedList<>(), new LinkedList<>(), new LinkedList<>()); - if (meta.arguments.jvm() == null) meta.arguments = meta.arguments.withJvm(new LinkedList<>()); + meta.checkArguments(); jvm.set(String.join("\n", meta.arguments.jvm())); - if (meta.arguments.client() == null) meta.arguments = meta.arguments.withClient(new LinkedList<>()); client.set(String.join("\n", meta.arguments.client())); - if (meta.arguments.server() == null) meta.arguments = meta.arguments.withServer(new LinkedList<>()); server.set(String.join("\n", meta.arguments.server())); } diff --git a/launcher/src/main/java/io/gitlab/jfronny/inceptum/launcher/model/inceptum/InstanceMeta.java b/launcher/src/main/java/io/gitlab/jfronny/inceptum/launcher/model/inceptum/InstanceMeta.java index 14b94ba..d2c56b3 100644 --- a/launcher/src/main/java/io/gitlab/jfronny/inceptum/launcher/model/inceptum/InstanceMeta.java +++ b/launcher/src/main/java/io/gitlab/jfronny/inceptum/launcher/model/inceptum/InstanceMeta.java @@ -38,8 +38,22 @@ public class InstanceMeta { return Objects.hash(gameVersion, java, minMem, maxMem, lastLaunched, arguments); } + public void checkArguments() { + arguments = arguments == null ? Arguments.EMPTY : arguments.checked(); + } + @GSerializable(configure = GsonPreset.Config.class) public record Arguments(List jvm, List client, List server) { + public static final Arguments EMPTY = new Arguments(List.of(), List.of(), List.of()); + + public Arguments checked() { + return new Arguments( + jvm == null ? List.of() : jvm, + client == null ? List.of() : client, + server == null ? List.of() : server + ); + } + public Arguments withJvm(List jvm) { return new Arguments(jvm, client, server); }