From 162b504d643d351bb80affd1b1b83581e5412766 Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Sun, 23 Apr 2023 11:22:41 +0300 Subject: [PATCH] RunConfigSettings: Add support for fully custom main class (#871) --- .../loom/configuration/ide/RunConfig.java | 10 +++---- .../configuration/ide/RunConfigSettings.java | 27 ++++++++++++++++++- .../test/integration/RunConfigTest.groovy | 18 ++++++++++++- .../projects/runconfigs/build.gradle | 5 ++++ .../main/java/net/fabricmc/example/Main.java | 10 +++++++ 5 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 src/test/resources/projects/runconfigs/src/main/java/net/fabricmc/example/Main.java diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java index 1f6f73ef..1783e903 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java @@ -138,10 +138,10 @@ public class RunConfig { String environment = settings.getEnvironment(); SourceSet sourceSet = settings.getSource(project); - String defaultMain = settings.getDefaultMainClass(); + String mainClass = settings.getMainClass().getOrNull(); - if (defaultMain == null) { - throw new IllegalArgumentException("Run configuration '" + name + "' must specify 'defaultMainClass'"); + if (mainClass == null) { + throw new IllegalArgumentException("Run configuration '" + name + "' must specify 'mainClass'"); } if (configName == null) { @@ -179,7 +179,7 @@ public class RunConfig { // Custom parameters runConfig.programArgs.addAll(settings.getProgramArgs()); runConfig.vmArgs.addAll(settings.getVmArgs()); - runConfig.vmArgs.add("-Dfabric.dli.main=" + getMainClass(environment, extension, defaultMain)); + runConfig.vmArgs.add("-Dfabric.dli.main=" + mainClass); runConfig.environmentVariables = new HashMap<>(); runConfig.environmentVariables.putAll(settings.getEnvironmentVariables()); runConfig.projectName = project.getName(); @@ -245,7 +245,7 @@ public class RunConfig { return sb.toString(); } - private static String getMainClass(String side, LoomGradleExtension extension, String defaultMainClass) { + static String getMainClass(String side, LoomGradleExtension extension, String defaultMainClass) { InstallerData installerData = extension.getInstallerData(); if (installerData == null) { diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java index 4447c152..82bfeeec 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java @@ -1,7 +1,7 @@ /* * This file is part of fabric-loom, licensed under the MIT License (MIT). * - * Copyright (c) 2021 FabricMC + * Copyright (c) 2021-2023 FabricMC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -31,10 +31,12 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.function.Function; import org.gradle.api.Named; import org.gradle.api.Project; +import org.gradle.api.provider.Property; import org.gradle.api.tasks.SourceSet; import net.fabricmc.loom.LoomGradleExtension; @@ -74,6 +76,14 @@ public final class RunConfigSettings implements Named { */ private String defaultMainClass; + /** + * The main class of the run configuration. + * + *
If unset, {@link #defaultMainClass} is used as the fallback, including the overwritten main class
+ * from installer files.
+ */
+ private final Property If unset, {@link #getDefaultMainClass defaultMainClass} is used as the fallback,
+ * including the overwritten main class from installer files.
+ */
+ public Property