From cd0ea3a0c5a9902a27a5994de202086d651220ca Mon Sep 17 00:00:00 2001 From: Andrzej Jarmoniuk Date: Sun, 18 Feb 2024 11:54:14 +0100 Subject: [PATCH] Resolves #1042: Optimisation - removed the n^2 visits of the tree. --- .../org/codehaus/mojo/versions/SetMojo.java | 41 +++++++++++-------- .../codehaus/mojo/versions/SetMojoTest.java | 4 +- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetMojo.java index 7282e49c2a..6af235e9f9 100644 --- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetMojo.java +++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetMojo.java @@ -413,22 +413,31 @@ public void execute() throws MojoExecutionException, MojoFailureException { } static Map, Set> computeChildren(Map reactor) { - Map, Set> result = new HashMap<>(); - for (Map.Entry entry : reactor.entrySet()) { - Optional.ofNullable(entry.getValue().getParent()) - .map(p -> new ImmutablePair<>(p.getGroupId(), p.getArtifactId())) - .ifPresent(parent -> result.compute(parent, (f1, s) -> Optional.ofNullable(s) - .map(children -> { - children.add(entry.getValue()); - return children; - }) - .orElse(new HashSet() { - { - add(entry.getValue()); - } - }))); - } - return result; + return reactor.values().stream() + .filter(v -> v.getParent() != null) + .reduce( + new HashMap<>(), + (map, child) -> { + map.compute( + new ImmutablePair<>( + child.getParent().getGroupId(), + child.getParent().getArtifactId()), + (pair, set) -> Optional.ofNullable(set) + .map(children -> { + children.add(child); + return children; + }) + .orElse(new HashSet() { + { + add(child); + } + })); + return map; + }, + (m1, m2) -> { + m1.putAll(m2); + return m1; + }); } /** diff --git a/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/SetMojoTest.java b/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/SetMojoTest.java index b31df83173..9bebfd58f4 100644 --- a/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/SetMojoTest.java +++ b/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/SetMojoTest.java @@ -252,9 +252,9 @@ public void testComputeChildren() { }); } }); - put(new File("parent2"), new Model() { + put(new File("child2"), new Model() { { - setArtifactId("parent2"); + setArtifactId("child2"); setParent(new Parent() { { setGroupId("default");