From 308bf858cf665520b08ceba1b584908bfcf84b4a Mon Sep 17 00:00:00 2001 From: Marc Hermans Date: Mon, 12 Aug 2024 10:49:35 +0200 Subject: [PATCH] Add the ability to merge launcher profiles --- .run/Attach to Gradle Debugger.run.xml | 16 ++++++++ .../dsl/platform/model/LauncherProfile.groovy | 41 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 .run/Attach to Gradle Debugger.run.xml diff --git a/.run/Attach to Gradle Debugger.run.xml b/.run/Attach to Gradle Debugger.run.xml new file mode 100644 index 000000000..0d4ccd028 --- /dev/null +++ b/.run/Attach to Gradle Debugger.run.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/dsl/platform/src/main/groovy/net/neoforged/gradle/dsl/platform/model/LauncherProfile.groovy b/dsl/platform/src/main/groovy/net/neoforged/gradle/dsl/platform/model/LauncherProfile.groovy index 21bcc526d..c1892d404 100644 --- a/dsl/platform/src/main/groovy/net/neoforged/gradle/dsl/platform/model/LauncherProfile.groovy +++ b/dsl/platform/src/main/groovy/net/neoforged/gradle/dsl/platform/model/LauncherProfile.groovy @@ -16,12 +16,38 @@ import org.gradle.api.tasks.Optional import javax.inject.Inject import java.lang.reflect.Type +import java.util.function.BiFunction import static net.neoforged.gradle.dsl.common.util.PropertyUtils.* @CompileStatic abstract class LauncherProfile implements ConfigurableDSLElement { + public static LauncherProfile merge( + final ObjectFactory factory, + final LauncherProfile left, + final LauncherProfile right + ) { + final LauncherProfile result = factory.newInstance(LauncherProfile.class) + + result.id.set(right.id.orElse(left.id)) + result.time.set(right.id.orElse(left.time)) + result.releaseTime.set(right.releaseTime.orElse(left.releaseTime)) + result.type.set(right.type.orElse(left.type)) + result.mainClass.set(right.mainClass.orElse(left.mainClass)) + result.minimumLauncherVersion.set(right.minimumLauncherVersion.orElse(left.minimumLauncherVersion)) + result.inheritsFrom.set("") //We force this to be empty + result.arguments.set(Arguments.merge(factory, left.arguments.get(), right.arguments.get())) + result.assetIndex.set(right.assetIndex.orElse(left.assetIndex)) + result.assets.set(right.assets.orElse(left.assets)) + result.complianceLevel.set(right.complianceLevel.orElse(left.complianceLevel)) + + + + + return result + } + @Inject public LauncherProfile(ObjectFactory factory) { this.getArguments().set(factory.newInstance(Arguments.class)) @@ -186,6 +212,21 @@ abstract class LauncherProfile implements ConfigurableDSLElement { + static Arguments merge(ObjectFactory objectFactory, Arguments left, Arguments right) { + final Arguments result = objectFactory.newInstance(Arguments.class) + + result.game.set(left.game.zip(right.game, this::merge)) + result.JVM.set(left.JVM.zip(right.JVM, this::merge)) + + return result + } + + static List merge(List left, List right) { + final List result = new ArrayList<>(left) + result.addAll(right) + return result + } + @Inject abstract ObjectFactory getObjectFactory();