From 886d77ce0ccbcc8b4902e2e97c38b2b11c3ef381 Mon Sep 17 00:00:00 2001 From: Octavia Togami Date: Mon, 29 Jun 2020 07:25:05 -0700 Subject: [PATCH] Supply the configuration to the run Exec directly (#232) * Supply the configuration to the run Exec directly This allows the implicit task dependencies from project() dependencies to flow into the run tasks. * Make unmappedMods a CFC to track task information Deprecates the old methods, and they should probably be removed with 0.5. --- .../net/fabricmc/loom/AbstractPlugin.java | 10 +++---- .../fabricmc/loom/LoomGradleExtension.java | 27 +++++++++++++++---- .../net/fabricmc/loom/LoomGradlePlugin.java | 3 +-- .../fabricmc/loom/task/AbstractRunTask.java | 26 +++--------------- .../fabricmc/loom/util/SourceRemapper.java | 8 +++--- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/AbstractPlugin.java b/src/main/java/net/fabricmc/loom/AbstractPlugin.java index e0641a0..50c8948 100644 --- a/src/main/java/net/fabricmc/loom/AbstractPlugin.java +++ b/src/main/java/net/fabricmc/loom/AbstractPlugin.java @@ -49,12 +49,14 @@ import org.gradle.api.tasks.javadoc.Javadoc; import org.gradle.plugins.ide.idea.model.IdeaModel; import net.fabricmc.loom.providers.LaunchProvider; +import net.fabricmc.loom.providers.MappingsCache; import net.fabricmc.loom.providers.MappingsProvider; import net.fabricmc.loom.providers.MinecraftProvider; -import net.fabricmc.loom.providers.MappingsCache; import net.fabricmc.loom.task.RemapJarTask; import net.fabricmc.loom.task.RemapSourcesJarTask; import net.fabricmc.loom.util.Constants; +import net.fabricmc.loom.util.DownloadUtil; +import net.fabricmc.loom.util.FabricApiExtension; import net.fabricmc.loom.util.GroovyXmlUtil; import net.fabricmc.loom.util.LoomDependencyManager; import net.fabricmc.loom.util.NestedJars; @@ -63,8 +65,6 @@ import net.fabricmc.loom.util.SetupIntelijRunConfigs; import net.fabricmc.loom.util.mixin.JavaApInvoker; import net.fabricmc.loom.util.mixin.KaptApInvoker; import net.fabricmc.loom.util.mixin.ScalaApInvoker; -import net.fabricmc.loom.util.FabricApiExtension; -import net.fabricmc.loom.util.DownloadUtil; public class AbstractPlugin implements Plugin { protected Project project; @@ -247,7 +247,7 @@ public class AbstractPlugin implements Plugin { remapJarTask.getInput().set(jarTask.getArchivePath()); } - extension.addUnmappedMod(jarTask.getArchivePath().toPath()); + extension.getUnmappedModCollection().from(jarTask); remapJarTask.getAddNestedDependencies().set(true); remapJarTask.getRemapAccessWidener().set(true); @@ -282,7 +282,7 @@ public class AbstractPlugin implements Plugin { } } else { AbstractArchiveTask jarTask = (AbstractArchiveTask) project1.getTasks().getByName("jar"); - extension.addUnmappedMod(jarTask.getArchivePath().toPath()); + extension.getUnmappedModCollection().from(jarTask); } project.getLogger().lifecycle("Configuring compiler arguments for Java"); diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index f44755d..a27896d 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -28,12 +28,12 @@ import java.io.File; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.function.BiPredicate; import java.util.function.Function; import java.util.function.Supplier; +import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -43,6 +43,7 @@ import org.cadixdev.mercury.Mercury; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Dependency; +import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.plugins.BasePluginConvention; import net.fabricmc.loom.api.decompilers.LoomDecompiler; @@ -62,12 +63,12 @@ public class LoomGradleExtension { public File accessWidener = null; public Function intermediaryUrl = mcVer -> "https://maven.fabricmc.net/net/fabricmc/intermediary/" + mcVer + "/intermediary-" + mcVer + "-v2.jar"; - private List unmappedModsBuilt = new ArrayList<>(); + private final ConfigurableFileCollection unmappedMods; final List decompilers = new ArrayList<>(); //Not to be set in the build.gradle - private Project project; + private final Project project; private LoomDependencyManager dependencyManager; private JarProcessorManager jarProcessorManager; private JsonObject installerJson; @@ -92,14 +93,30 @@ public class LoomGradleExtension { public LoomGradleExtension(Project project) { this.project = project; + this.unmappedMods = project.files(); } + /** + * @see ConfigurableFileCollection#from(Object...) + * @deprecated use {@link #getUnmappedModCollection()}{@code .from()} instead + */ + @Deprecated public void addUnmappedMod(Path file) { - unmappedModsBuilt.add(file); + getUnmappedModCollection().from(file); } + /** + * @deprecated use {@link #getUnmappedModCollection()} instead + */ + @Deprecated public List getUnmappedMods() { - return Collections.unmodifiableList(unmappedModsBuilt); + return unmappedMods.getFiles().stream() + .map(File::toPath) + .collect(Collectors.toList()); + } + + public ConfigurableFileCollection getUnmappedModCollection() { + return unmappedMods; } public void setInstallerJson(JsonObject object) { diff --git a/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java b/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java index 575efb7..877b91c 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java +++ b/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java @@ -116,13 +116,12 @@ public class LoomGradlePlugin extends AbstractPlugin { tasks.register("runClient", RunClientTask.class, t -> { t.setDescription("Starts a development version of the Minecraft client."); - t.dependsOn("jar", "downloadAssets"); + t.dependsOn("downloadAssets"); t.setGroup("fabric"); }); tasks.register("runServer", RunServerTask.class, t -> { t.setDescription("Starts a development version of the Minecraft server."); - t.dependsOn("jar"); t.setGroup("fabric"); }); diff --git a/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java b/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java index bd492bf..138bed9 100644 --- a/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java +++ b/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java @@ -25,8 +25,6 @@ package net.fabricmc.loom.task; import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -37,8 +35,6 @@ import org.gradle.api.Project; import org.gradle.api.tasks.JavaExec; import net.fabricmc.loom.LoomGradleExtension; -import net.fabricmc.loom.providers.MappingsProvider; -import net.fabricmc.loom.util.MinecraftVersionInfo; import net.fabricmc.loom.util.RunConfig; public abstract class AbstractRunTask extends JavaExec { @@ -49,6 +45,9 @@ public abstract class AbstractRunTask extends JavaExec { super(); setGroup("fabric"); this.configProvider = config; + + classpath(getProject().getConfigurations().getByName("runtimeClasspath")); + classpath(this.getProject().getExtensions().getByType(LoomGradleExtension.class).getUnmappedModCollection()); } @Override @@ -57,23 +56,6 @@ public abstract class AbstractRunTask extends JavaExec { config = configProvider.apply(getProject()); } - LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); - MinecraftVersionInfo minecraftVersionInfo = extension.getMinecraftProvider().getVersionInfo(); - MappingsProvider mappingsProvider = extension.getMappingsProvider(); - - List libs = new ArrayList<>(); - - for (File file : getProject().getConfigurations().getByName("runtimeClasspath").getFiles()) { - libs.add(file.getAbsolutePath()); - } - - for (Path file : extension.getUnmappedMods()) { - if (Files.isRegularFile(file)) { - libs.add(file.toFile().getAbsolutePath()); - } - } - - classpath(libs); List argsSplit = new ArrayList<>(); String[] args = config.programArgs.split(" "); int partPos = -1; @@ -103,6 +85,7 @@ public abstract class AbstractRunTask extends JavaExec { } args(argsSplit); + LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); setWorkingDir(new File(getProject().getRootDir(), extension.runDir)); super.exec(); @@ -136,7 +119,6 @@ public abstract class AbstractRunTask extends JavaExec { config = configProvider.apply(getProject()); } - LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); List superArgs = super.getJvmArgs(); List args = new ArrayList<>(superArgs != null ? superArgs : Collections.emptyList()); args.addAll(Arrays.asList(config.vmArgs.split(" "))); diff --git a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java index 206e7b4..f7f2323 100644 --- a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java @@ -165,9 +165,11 @@ public class SourceRemapper { Mercury mercury = extension.getOrCreateSrcMercuryCache(toNamed ? 1 : 0, () -> { Mercury m = createMercuryWithClassPath(project, toNamed); - for (Path file : extension.getUnmappedMods()) { - if (Files.isRegularFile(file)) { - m.getClassPath().add(file); + for (File file : extension.getUnmappedModCollection()) { + Path path = file.toPath(); + + if (Files.isRegularFile(path)) { + m.getClassPath().add(path); } }