# HG changeset patch # User cin # Date 2026-03-17 11:33:47 # Node ID 3be3160216696bc11204026a6d426989b0cb22f9 # Parent 766d187f66bcf022bd1e68370b3f5e9c10867731 refactor: replace configureAssembly with configureTask diff --git a/common/src/main/java/org/implab/gradle/common/sources/ArtifactAssembly.java b/common/src/main/java/org/implab/gradle/common/sources/ArtifactAssembly.java --- a/common/src/main/java/org/implab/gradle/common/sources/ArtifactAssembly.java +++ b/common/src/main/java/org/implab/gradle/common/sources/ArtifactAssembly.java @@ -1,53 +1,19 @@ package org.implab.gradle.common.sources; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.gradle.api.Named; +import org.gradle.api.Task; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.Directory; -import org.gradle.api.file.FileCollection; import org.gradle.api.provider.Provider; -import org.gradle.api.tasks.Copy; import org.gradle.api.tasks.TaskProvider; @NonNullByDefault -public final class ArtifactAssembly implements Named { - private final String name; - private final ConfigurableFileCollection sources; - private final ConfigurableFileCollection output; - private final Provider outputDirectory; - private final TaskProvider task; - - ArtifactAssembly( - String name, - ConfigurableFileCollection sources, - Provider outputDirectory, - TaskProvider task, - ConfigurableFileCollection output) { - this.name = name; - this.sources = sources; - this.outputDirectory = outputDirectory; - this.task = task; - this.output = output; - } +public final record ArtifactAssembly( + String name, + Provider outputDirectory, + TaskProvider task, + ConfigurableFileCollection output +) { - @Override - public String getName() { - return name; - } - - public ConfigurableFileCollection getSources() { - return sources; - } +}; - public FileCollection getOutput() { - return output; - } - - public Provider getOutputDirectory() { - return outputDirectory; - } - - public TaskProvider getTask() { - return task; - } -} diff --git a/common/src/main/java/org/implab/gradle/common/sources/ArtifactAssemblyRegistry.java b/common/src/main/java/org/implab/gradle/common/sources/ArtifactAssemblyRegistry.java --- a/common/src/main/java/org/implab/gradle/common/sources/ArtifactAssemblyRegistry.java +++ b/common/src/main/java/org/implab/gradle/common/sources/ArtifactAssemblyRegistry.java @@ -3,16 +3,19 @@ package org.implab.gradle.common.sources import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; +import java.util.function.Function; import org.eclipse.jdt.annotation.NonNullByDefault; import org.gradle.api.Action; import org.gradle.api.InvalidUserDataException; +import org.gradle.api.Task; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.Directory; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.Copy; import org.gradle.api.tasks.TaskContainer; +import org.gradle.api.tasks.TaskProvider; import org.gradle.language.base.plugins.LifecycleBasePlugin; @NonNullByDefault @@ -31,9 +34,6 @@ public final class ArtifactAssemblyRegis String taskName, Provider outputDirectory, Action configureSources) { - if (assemblies.containsKey(name)) { - throw new InvalidUserDataException("Artifact assembly '" + name + "' is already registered"); - } var sources = objects.fileCollection(); configureSources.execute(sources); @@ -44,11 +44,23 @@ public final class ArtifactAssemblyRegis copy.from(sources); }); + return register(name, task, t -> outputDirectory); + } + + public ArtifactAssembly register( + String name, + TaskProvider task, + Function> mapOutputDirectory) { + if (assemblies.containsKey(name)) { + throw new InvalidUserDataException("Artifact assembly '" + name + "' is already registered"); + } + var outputDirectory = task.flatMap(t -> mapOutputDirectory.apply(t)); + var output = objects.fileCollection() .from(outputDirectory) .builtBy(task); - var assembly = new ArtifactAssembly(name, sources, outputDirectory, task, output); + var assembly = new ArtifactAssembly(name, outputDirectory, task, output); assemblies.put(name, assembly); return assembly; } diff --git a/common/src/main/java/org/implab/gradle/common/sources/GenericSourceSet.java b/common/src/main/java/org/implab/gradle/common/sources/GenericSourceSet.java --- a/common/src/main/java/org/implab/gradle/common/sources/GenericSourceSet.java +++ b/common/src/main/java/org/implab/gradle/common/sources/GenericSourceSet.java @@ -11,6 +11,7 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.inject.Inject; @@ -148,9 +149,9 @@ public abstract class GenericSourceSet * files under them. */ public void declareOutputs(String name, String... extra) { - declaredOutputs.add(Objects.requireNonNull(name, "declareOutputs: The output name cannot be null")); - for (var x : extra) - declaredOutputs.add(Objects.requireNonNull(x, "declareOutputs: The output name cannot be null")); + Stream.concat(Stream.of(name), Stream.of(extra)) + .map(Objects::requireNonNull) + .forEach(declaredOutputs::add); } /** diff --git a/common/src/main/java/org/implab/gradle/common/sources/OutgoingArtifactSlotPublication.java b/common/src/main/java/org/implab/gradle/common/sources/OutgoingArtifactSlotPublication.java --- a/common/src/main/java/org/implab/gradle/common/sources/OutgoingArtifactSlotPublication.java +++ b/common/src/main/java/org/implab/gradle/common/sources/OutgoingArtifactSlotPublication.java @@ -2,6 +2,7 @@ package org.implab.gradle.common.sources import org.eclipse.jdt.annotation.NonNullByDefault; import org.gradle.api.Action; +import org.gradle.api.Task; import org.gradle.api.attributes.AttributeContainer; import org.gradle.api.attributes.HasConfigurableAttributes; import org.implab.gradle.common.core.lang.Closures; @@ -42,17 +43,13 @@ public final class OutgoingArtifactSlotP return slot; } - public ArtifactAssembly assembly() { - return assembly; + public void configureTask(Action action) { + assembly.task().configure(action::execute); } - public void configureAssembly(Action action) { - action.execute(assembly); - } - - public void configureAssembly( - @DelegatesTo(value = ArtifactAssembly.class, strategy = Closure.DELEGATE_FIRST) Closure action) { - configureAssembly(Closures.action(action)); + public void configureTask( + @DelegatesTo(value = Task.class, strategy = Closure.DELEGATE_FIRST) Closure action) { + configureTask(Closures.action(action)); } public void configureArtifactAttributes(Action action) { diff --git a/common/src/main/java/org/implab/gradle/common/sources/VariantArtifactsPlugin.java b/common/src/main/java/org/implab/gradle/common/sources/VariantArtifactsPlugin.java --- a/common/src/main/java/org/implab/gradle/common/sources/VariantArtifactsPlugin.java +++ b/common/src/main/java/org/implab/gradle/common/sources/VariantArtifactsPlugin.java @@ -165,14 +165,14 @@ public abstract class VariantArtifactsPl } private static void publishArtifact(ConfigurationPublications outgoing, ArtifactAssembly assembly) { - outgoing.artifact(assembly.getOutput().getSingleFile(), published -> { - published.builtBy(assembly.getOutput().getBuildDependencies()); + outgoing.artifact(assembly.output().getSingleFile(), published -> { + published.builtBy(assembly.output().getBuildDependencies()); }); } private static void publishArtifact(ConfigurationVariant variant, ArtifactAssembly assembly) { - variant.artifact(assembly.getOutput().getSingleFile(), published -> { - published.builtBy(assembly.getOutput().getBuildDependencies()); + variant.artifact(assembly.output().getSingleFile(), published -> { + published.builtBy(assembly.output().getBuildDependencies()); }); } diff --git a/common/src/test/java/org/implab/gradle/common/sources/VariantsArtifactsPluginFunctionalTest.java b/common/src/test/java/org/implab/gradle/common/sources/VariantsArtifactsPluginFunctionalTest.java --- a/common/src/test/java/org/implab/gradle/common/sources/VariantsArtifactsPluginFunctionalTest.java +++ b/common/src/test/java/org/implab/gradle/common/sources/VariantsArtifactsPluginFunctionalTest.java @@ -96,8 +96,8 @@ class VariantsArtifactsPluginFunctionalT whenOutgoingVariant { publication -> publication.slots().each { slotPublication -> - slotPublication.configureAssembly { - sources.from(layout.projectDirectory.file("inputs/${slotPublication.slotName()}.txt")) + slotPublication.configureTask { + from(layout.projectDirectory.file("inputs/${slotPublication.slotName()}.txt")) } slotPublication.configureArtifactAttributes {