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 <[email protected]>
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();