This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/master by this push: new c4cbe77a [MRESOLVER-460] Implement top H/L (#401) c4cbe77a is described below commit c4cbe77ae46a093c3079d2389e22508bd0d849b7 Author: Tamas Cservenak <ta...@cservenak.net> AuthorDate: Tue Dec 19 11:31:55 2023 +0100 [MRESOLVER-460] Implement top H/L (#401) * [MRESOLVER-460] Implement top H/L Extend filters to implement top/bottom --- https://issues.apache.org/jira/browse/MRESOLVER-460 --- .../util/graph/version/HighestVersionFilter.java | 26 ++++++++++++++++++---- .../util/graph/version/LowestVersionFilter.java | 26 ++++++++++++++++++---- .../graph/versions/HighestVersionFilterTest.java | 8 +++++++ .../graph/versions/LowestVersionFilterTest.java | 8 +++++++ 4 files changed, 60 insertions(+), 8 deletions(-) diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/version/HighestVersionFilter.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/version/HighestVersionFilter.java index dfbbd272..7c6c7b25 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/version/HighestVersionFilter.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/version/HighestVersionFilter.java @@ -28,19 +28,37 @@ import org.eclipse.aether.version.Version; * A version filter that excludes any version except the highest one. */ public final class HighestVersionFilter implements VersionFilter { + private final int count; /** * Creates a new instance of this version filter. */ - public HighestVersionFilter() {} + public HighestVersionFilter() { + this.count = 1; + } + + /** + * Creates a new instance of this version filter. + */ + public HighestVersionFilter(int count) { + if (count < 1) { + throw new IllegalArgumentException("Count should be greater or equal to 1"); + } + this.count = count; + } @Override public void filterVersions(VersionFilterContext context) { + if (context.getCount() <= count) { + return; + } + // iterator comes in ascending order, basically we "step over" (remove) first few + int stepOver = context.getCount() - count; Iterator<Version> it = context.iterator(); - for (boolean hasNext = it.hasNext(); hasNext; ) { + while (it.hasNext()) { it.next(); - hasNext = it.hasNext(); - if (hasNext) { + stepOver--; + if (stepOver >= 0) { it.remove(); } } diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/version/LowestVersionFilter.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/version/LowestVersionFilter.java index 77d1d7a1..afc444b6 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/version/LowestVersionFilter.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/version/LowestVersionFilter.java @@ -30,19 +30,37 @@ import org.eclipse.aether.version.Version; * @since 2.0.0 */ public final class LowestVersionFilter implements VersionFilter { + private final int count; /** * Creates a new instance of this version filter. */ - public LowestVersionFilter() {} + public LowestVersionFilter() { + this.count = 1; + } + + /** + * Creates a new instance of this version filter. + */ + public LowestVersionFilter(int count) { + if (count < 1) { + throw new IllegalArgumentException("Count should be greater or equal to 1"); + } + this.count = count; + } @Override public void filterVersions(VersionFilterContext context) { + if (context.getCount() <= count) { + return; + } + // iterator comes in ascending order, basically we "step over" (leave) first few + int stepOver = count; Iterator<Version> it = context.iterator(); - if (it.hasNext()) { + while (it.hasNext()) { it.next(); - while (it.hasNext()) { - it.next(); + stepOver--; + if (stepOver < 0) { it.remove(); } } diff --git a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/versions/HighestVersionFilterTest.java b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/versions/HighestVersionFilterTest.java index b0180857..31ff8834 100644 --- a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/versions/HighestVersionFilterTest.java +++ b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/versions/HighestVersionFilterTest.java @@ -34,6 +34,14 @@ public class HighestVersionFilterTest extends AbstractVersionFilterTest { assertVersions(ctx, "9"); } + @Test + void testFilterVersions3() { + HighestVersionFilter filter = new HighestVersionFilter(3); + VersionFilterContext ctx = newContext("g:a:[1,9]", "1", "2", "3", "4", "5", "6", "7", "8", "9"); + filter.filterVersions(ctx); + assertVersions(ctx, "7", "8", "9"); + } + @Test void testDeriveChildFilter() { HighestVersionFilter filter = new HighestVersionFilter(); diff --git a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/versions/LowestVersionFilterTest.java b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/versions/LowestVersionFilterTest.java index 6e139b07..80508231 100644 --- a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/versions/LowestVersionFilterTest.java +++ b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/versions/LowestVersionFilterTest.java @@ -34,6 +34,14 @@ public class LowestVersionFilterTest extends AbstractVersionFilterTest { assertVersions(ctx, "1"); } + @Test + void testFilterVersions3() { + LowestVersionFilter filter = new LowestVersionFilter(3); + VersionFilterContext ctx = newContext("g:a:[1,9]", "1", "2", "3", "4", "5", "6", "7", "8", "9"); + filter.filterVersions(ctx); + assertVersions(ctx, "1", "2", "3"); + } + @Test void testDeriveChildFilter() { LowestVersionFilter filter = new LowestVersionFilter();