From e38fa2ef72fd435fdeeb51187afeb88e6eb49680 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 2 Mar 2022 11:34:39 +0800 Subject: [PATCH] Fix DependencyDownloader to not include two versions of the same dependency Signed-off-by: shedaniel --- .../providers/forge/ForgeUserdevProvider.java | 2 +- .../loom/util/DependencyDownloader.java | 26 ++++++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java index 3ec90999..5e67986a 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java @@ -296,7 +296,7 @@ public class ForgeUserdevProvider extends DependencyProvider { } private Set minecraftClasspath() { - return DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.FORGE_RUNTIME_LIBRARY), true); + return DependencyDownloader.resolveFiles(getProject(), getProject().getConfigurations().getByName(Constants.Configurations.FORGE_RUNTIME_LIBRARY), true); } public File getUserdevJar() { diff --git a/src/main/java/net/fabricmc/loom/util/DependencyDownloader.java b/src/main/java/net/fabricmc/loom/util/DependencyDownloader.java index 329d88bf..ede29cc0 100644 --- a/src/main/java/net/fabricmc/loom/util/DependencyDownloader.java +++ b/src/main/java/net/fabricmc/loom/util/DependencyDownloader.java @@ -25,7 +25,8 @@ package net.fabricmc.loom.util; import java.io.File; -import java.util.LinkedHashSet; +import java.util.ArrayList; +import java.util.List; import java.util.Set; import org.gradle.api.Project; @@ -69,16 +70,21 @@ public final class DependencyDownloader { return files; } - private static Set resolve(Configuration configuration, boolean transitive) { - Configuration copy = configuration.copy(); - copy.setTransitive(transitive); - Set files = new LinkedHashSet<>(copy.resolve()); + private static List collectDependencies(Configuration configuration) { + List dependencies = new ArrayList<>(); - for (Configuration extendsForm : configuration.getExtendsFrom()) { - files.addAll(resolve(extendsForm, transitive)); + for (Configuration extendsFrom : configuration.getExtendsFrom()) { + dependencies.addAll(collectDependencies(extendsFrom)); } - return files; + dependencies.addAll(configuration.getDependencies()); + return dependencies; + } + + private static Configuration copyWith(Project project, Configuration configuration, boolean transitive) { + Configuration copy = project.getConfigurations().detachedConfiguration(collectDependencies(configuration).toArray(new Dependency[0])); + copy.setTransitive(transitive); + return copy; } /** @@ -91,7 +97,7 @@ public final class DependencyDownloader { * @param transitive true if transitive dependencies should be included, false otherwise * @return a mutable set containing the resolved files of the configuration */ - public static Set resolveFiles(Configuration configuration, boolean transitive) { - return resolve(configuration, transitive); + public static Set resolveFiles(Project project, Configuration configuration, boolean transitive) { + return copyWith(project, configuration, transitive).resolve(); } }