diff --git a/release-tools/src/main/java/org/springframework/data/release/model/Project.java b/release-tools/src/main/java/org/springframework/data/release/model/Project.java index f10b711..4453787 100644 --- a/release-tools/src/main/java/org/springframework/data/release/model/Project.java +++ b/release-tools/src/main/java/org/springframework/data/release/model/Project.java @@ -23,9 +23,12 @@ import lombok.ToString; import lombok.experimental.Wither; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; -import java.util.List; +import java.util.Set; import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.springframework.util.Assert; @@ -40,7 +43,7 @@ public class Project implements Comparable { private final @Getter ProjectKey key; private final @Getter String name; private final @Wither String fullName; - private final @Getter List dependencies; + private final Collection dependencies; private final @Getter Tracker tracker; private final @Wither @Getter ArtifactCoordinates additionalArtifacts; private final @Wither boolean skipTests; @@ -54,14 +57,7 @@ public class Project implements Comparable { } private Project(String key, String name, String fullName, Tracker tracker) { - - this.key = new ProjectKey(key); - this.name = name; - this.fullName = fullName; - this.dependencies = Collections.emptyList(); - this.tracker = tracker; - this.additionalArtifacts = ArtifactCoordinates.SPRING_DATA; - this.skipTests = false; + this(new ProjectKey(key), name, fullName, Collections.emptySet(), tracker, ArtifactCoordinates.SPRING_DATA, false); } public boolean uses(Tracker tracker) { @@ -102,9 +98,22 @@ public class Project implements Comparable { } public Project withDependencies(Project... project) { + return new Project(key, name, fullName, Arrays.asList(project), tracker, additionalArtifacts, skipTests); } + /** + * Returns all dependencies of the current project including transitive ones. + * + * @return + */ + public Set getDependencies() { + + return dependencies.stream() // + .flatMap(dependency -> Stream.concat(Stream.of(dependency), dependency.getDependencies().stream())) // + .collect(Collectors.toSet()); + } + /* * (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) diff --git a/release-tools/src/test/java/org/springframework/data/release/model/ProjectUnitTests.java b/release-tools/src/test/java/org/springframework/data/release/model/ProjectUnitTests.java index 6e3725c..318cd6c 100644 --- a/release-tools/src/test/java/org/springframework/data/release/model/ProjectUnitTests.java +++ b/release-tools/src/test/java/org/springframework/data/release/model/ProjectUnitTests.java @@ -15,8 +15,9 @@ */ package org.springframework.data.release.model; +import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; +import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.List; @@ -55,4 +56,11 @@ public class ProjectUnitTests { assertThat(Projects.BUILD.getFullName(), is("Spring Data Build")); assertThat(Projects.CASSANDRA.getFullName(), is("Spring Data for Apache Cassandra")); } + + @Test + public void returnsAllDependencies() { + + assertThat(Projects.REDIS.getDependencies())// + .contains(Projects.COMMONS, Projects.KEY_VALUE, Projects.BUILD); + } }