From 34b2c014ac7237fcac222a6cf9bc0402f8d61de5 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Sun, 17 Dec 2023 21:44:41 +0100 Subject: [PATCH] Use a Configuration to model the additional dependencies of each run, since configurations seem to be better at tracking task dependencies. --- .../runs/run/DependencyHandlerImpl.java | 64 +++++++++++-------- .../gradle/common/runs/tasks/RunExec.java | 2 +- .../common/runs/run/DependencyHandler.groovy | 35 ++++------ .../definition/UserDevRuntimeDefinition.java | 2 +- 4 files changed, 52 insertions(+), 51 deletions(-) diff --git a/common/src/main/java/net/neoforged/gradle/common/runs/run/DependencyHandlerImpl.java b/common/src/main/java/net/neoforged/gradle/common/runs/run/DependencyHandlerImpl.java index a41eb40b3..1c5177035 100644 --- a/common/src/main/java/net/neoforged/gradle/common/runs/run/DependencyHandlerImpl.java +++ b/common/src/main/java/net/neoforged/gradle/common/runs/run/DependencyHandlerImpl.java @@ -1,8 +1,8 @@ package net.neoforged.gradle.common.runs.run; import net.neoforged.gradle.dsl.common.runs.run.DependencyHandler; -import net.neoforged.gradle.dsl.common.runs.run.RunDependency; import org.gradle.api.Action; +import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Dependency; @@ -14,66 +14,80 @@ public abstract class DependencyHandlerImpl implements DependencyHandler { private final Project project; + private final Configuration configuration; + @Inject public DependencyHandlerImpl(Project project) { this.project = project; + this.configuration = project.getConfigurations().detachedConfiguration(); + this.configuration.setCanBeResolved(true); + this.configuration.setCanBeConsumed(false); + this.configuration.setTransitive(false); } public Project getProject() { return project; } + public Configuration getConfiguration() { + return configuration; + } + @Override - public RunDependency runtime(Object dependencyNotation) { + public Dependency runtime(Object dependencyNotation) { + if (dependencyNotation instanceof Configuration) { + this.configuration.extendsFrom((Configuration) dependencyNotation); + return null; + } final Dependency dependency = project.getDependencies().create(dependencyNotation); - final RunDependency runDependency = project.getObjects().newInstance(RunDependencyImpl.class, project, dependency); - getRuntime().add(runDependency); - return runDependency; + configuration.getDependencies().add(dependency); + return dependency; } @Override - public RunDependency runtime(Object dependencyNotation, Action configureClosure) { + public Dependency runtime(Object dependencyNotation, Action configureClosure) { + if (dependencyNotation instanceof Configuration) { + if (configureClosure != null) { + throw new GradleException("Cannot add a Configuration with a configuration closure."); + } + this.configuration.extendsFrom((Configuration) dependencyNotation); + return null; + } final Dependency dependency = project.getDependencies().create(dependencyNotation); configureClosure.execute(dependency); - final RunDependency runDependency = project.getObjects().newInstance(RunDependencyImpl.class, project, dependency); - getRuntime().add(runDependency); - return runDependency; + configuration.getDependencies().add(dependency); + return dependency; } @Override - public RunDependency create(Object dependencyNotation) { + public Dependency create(Object dependencyNotation) { final Dependency dependency = project.getDependencies().create(dependencyNotation); - return project.getObjects().newInstance(RunDependencyImpl.class, project, dependency); + configuration.getDependencies().add(dependency); + return dependency; } @Override - public RunDependency create(Object dependencyNotation, Action configureClosure) { + public Dependency create(Object dependencyNotation, Action configureClosure) { final Dependency dependency = project.getDependencies().create(dependencyNotation); configureClosure.execute(dependency); - return project.getObjects().newInstance(RunDependencyImpl.class, project, dependency); + return dependency; } @Override - public RunDependency module(Object notation) { - final Dependency dependency = project.getDependencies().module(notation); - return project.getObjects().newInstance(RunDependencyImpl.class, project, dependency); + public Dependency module(Object notation) { + return project.getDependencies().module(notation); } @Override - public RunDependency module(Object notation, Action configureClosure) { + public Dependency module(Object notation, Action configureClosure) { final Dependency dependency = project.getDependencies().module(notation); configureClosure.execute(dependency); - return project.getObjects().newInstance(RunDependencyImpl.class, project, dependency); + return dependency; } @Override - public RunDependency project(Map notation) { + public Dependency project(Map notation) { final Dependency dependency = project.getDependencies().project(notation); - return project.getObjects().newInstance(RunDependencyImpl.class, project, dependency); - } - - @Override - public RunDependency configuration(Configuration notation) { - return project.getObjects().newInstance(ConfigurationRunDependencyImpl.class, project, notation); + return dependency; } } diff --git a/common/src/main/java/net/neoforged/gradle/common/runs/tasks/RunExec.java b/common/src/main/java/net/neoforged/gradle/common/runs/tasks/RunExec.java index 8773b2350..c547479b3 100644 --- a/common/src/main/java/net/neoforged/gradle/common/runs/tasks/RunExec.java +++ b/common/src/main/java/net/neoforged/gradle/common/runs/tasks/RunExec.java @@ -45,7 +45,7 @@ public void exec() { classpath(run.getClasspath()); - run.getDependencies().get().getRuntime().get().forEach(runDependency -> classpath(runDependency.getDependency())); + classpath(run.getDependencies().get().getConfiguration()); super.exec(); } diff --git a/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runs/run/DependencyHandler.groovy b/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runs/run/DependencyHandler.groovy index 93dbf66c2..557852a4a 100644 --- a/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runs/run/DependencyHandler.groovy +++ b/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runs/run/DependencyHandler.groovy @@ -3,26 +3,21 @@ package net.neoforged.gradle.dsl.common.runs.run import groovy.transform.CompileStatic import net.minecraftforge.gdi.BaseDSLElement import net.minecraftforge.gdi.annotations.ClosureEquivalent -import net.minecraftforge.gdi.annotations.DSLProperty import org.gradle.api.Action import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Dependency -import org.gradle.api.provider.ListProperty -import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal /** * A custom dependency handler which manages runtime dependencies for a run configuration. */ @CompileStatic interface DependencyHandler extends BaseDSLElement { - /** - * Gets the runtime dependencies for the run configuration. - * @return The runtime dependencies for the run configuration. + * The dependency configuration that contains all the declared dependencies. */ - @Input - @DSLProperty - ListProperty getRuntime(); + @Internal + Configuration getConfiguration(); /** * Adds a runtime dependency to the run configuration. @@ -30,7 +25,7 @@ interface DependencyHandler extends BaseDSLElement { * @param dependencyNotation The dependency notation. * @return The runtime dependency. */ - RunDependency runtime(Object dependencyNotation); + Dependency runtime(Object dependencyNotation); /** * Adds a runtime dependency to the run configuration. @@ -40,7 +35,7 @@ interface DependencyHandler extends BaseDSLElement { * @return The runtime dependency. */ @ClosureEquivalent - RunDependency runtime(Object dependencyNotation, Action configureClosure); + Dependency runtime(Object dependencyNotation, Action configureClosure); /** * Creates a new run dependency from the given notation. @@ -48,7 +43,7 @@ interface DependencyHandler extends BaseDSLElement { * @param dependencyNotation The run dependency notation. * @return The run dependency. */ - RunDependency create(Object dependencyNotation); + Dependency create(Object dependencyNotation); /** * Creates a new run dependency from the given notation and configures it. @@ -58,7 +53,7 @@ interface DependencyHandler extends BaseDSLElement { * @return The run dependency. */ @ClosureEquivalent - RunDependency create(Object dependencyNotation, Action configureClosure); + Dependency create(Object dependencyNotation, Action configureClosure); /** * Creates a new run dependency from the given module notation. @@ -66,7 +61,7 @@ interface DependencyHandler extends BaseDSLElement { * @param notation the module notation. * @return The run dependency. */ - RunDependency module(Object notation); + Dependency module(Object notation); /** * Creates a new run dependency from the given module notation and configures it. @@ -76,7 +71,7 @@ interface DependencyHandler extends BaseDSLElement { * @return The run dependency. */ @ClosureEquivalent - RunDependency module(Object notation, Action configureClosure); + Dependency module(Object notation, Action configureClosure); /** * Creates a new run dependency from the given project notation. @@ -84,13 +79,5 @@ interface DependencyHandler extends BaseDSLElement { * @param notation the project notation. * @return The run dependency. */ - RunDependency project(Map notation); - - /** - * Creates a new run dependency from the given configuration notation. - * - * @param notation The configuration to use. - * @return The run dependency. - */ - RunDependency configuration(Configuration notation); + Dependency project(Map notation); } \ No newline at end of file diff --git a/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/definition/UserDevRuntimeDefinition.java b/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/definition/UserDevRuntimeDefinition.java index 800b89286..cd5638274 100644 --- a/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/definition/UserDevRuntimeDefinition.java +++ b/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/definition/UserDevRuntimeDefinition.java @@ -140,7 +140,7 @@ protected Map buildRunInterpolationData(RunImpl run) { task.getInputFiles().from(this.additionalUserDevDependencies); task.getInputFiles().from(neoformRuntimeDefinition.getMinecraftDependenciesConfiguration()); - run.getDependencies().get().getRuntime().get().forEach(runDependency -> task.getInputFiles().from(runDependency.getDependency())); + task.getInputFiles().from(run.getDependencies().get().getConfiguration()); } ); configureAssociatedTask(minecraftClasspathSerializer);