Skip to content

Commit 2a6fcf8

Browse files
Start developing against AssertJ 4.x (#6)
Motivation ---------- Eclipse Collections released version 13.0 which compiles against JDK 17. This allows us to baseline on AssertJ 4.x development which also targets JDK 17. This PR updates the project to support this. It also adds the JPMS module info files necessary to make the library a module. Modifications ------------- The largest modification is moving the tests to a dedicated package to avoid the split package problem across modules. There are now two module-info files: one for the main and one for the test. The test module is open by design so JUnit can find the tests. I updated the POM file to point to the 4.0.0-M1 version of AssertJ core. Result ------ Development can now proceed tracking all of the latest from AssertJ 4.x
1 parent 7dd6667 commit 2a6fcf8

22 files changed

+168
-97
lines changed

pom.xml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.assertj</groupId>
77
<artifactId>assertj-parent</artifactId>
8-
<version>3.27.3</version>
8+
<version>4.0.0-SNAPSHOT</version>
99
</parent>
1010

1111
<artifactId>assertj-eclipse-collections</artifactId>
@@ -37,9 +37,19 @@
3737
<url>https://github.com/assertj/assertj-eclipse-collections</url>
3838
</scm>
3939

40+
<repositories>
41+
<repository>
42+
<id>central-portal-snapshots</id>
43+
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
44+
<releases>
45+
<enabled>false</enabled>
46+
</releases>
47+
</repository>
48+
</repositories>
49+
4050
<properties>
41-
<assertj.version>3.27.3</assertj.version>
42-
<java.version>11</java.version>
51+
<assertj.version>4.0.0-SNAPSHOT</assertj.version>
52+
<java.version>17</java.version>
4353
<eclipse-collections.version>13.0.0</eclipse-collections.version>
4454
<!-- Dependency versions overriding -->
4555
<junit-jupiter.version>5.12.1</junit-jupiter.version>
@@ -85,6 +95,8 @@
8595
<link>https://javadoc.io/static/org.assertj/assertj-core/${assertj.version}/</link>
8696
<link>https://javadoc.io/static/org.eclipse.collections/eclipse-collections-api/${eclipse-collections.version}/</link>
8797
</links>
98+
<!-- https://bugs.openjdk.org/browse/JDK-8274639 -->
99+
<additionalOptions>--allow-script-in-comments --link-modularity-mismatch=info</additionalOptions>
88100
</configuration>
89101
</plugin>
90102
</plugins>

src/main/java/module-info.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
3+
* the License. You may obtain a copy of the License at
4+
*
5+
* http://www.apache.org/licenses/LICENSE-2.0
6+
*
7+
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
8+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
9+
* specific language governing permissions and limitations under the License.
10+
*
11+
* Copyright 2025-2025 the original author or authors.
12+
*/
13+
14+
/**
15+
* Main AssertJ Eclipse Collections Module
16+
*/
17+
module org.assertj.eclipse.collections {
18+
exports org.assertj.eclipse.collections.api;
19+
exports org.assertj.eclipse.collections.api.multimap;
20+
exports org.assertj.eclipse.collections.error;
21+
22+
requires org.assertj.core;
23+
requires org.eclipse.collections.api;
24+
requires org.eclipse.collections.impl;
25+
}

src/main/java/org/assertj/eclipse/collections/api/SoftAssertions.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
import org.assertj.core.api.AbstractSoftAssertions;
1616
import org.assertj.core.api.SoftAssertionsProvider;
17-
import org.opentest4j.MultipleFailuresError;
1817

1918
import java.util.function.Consumer;
2019

@@ -35,8 +34,8 @@ public SoftAssertions() {
3534
*
3635
* @param softly the Consumer containing the code that will make the soft assertions.
3736
* Takes one parameter (the SoftAssertions instance used to make the assertions).
38-
* @throws MultipleFailuresError if possible or SoftAssertionError if any proxied assertion objects threw an {@link
39-
* AssertionError}
37+
* @throws org.opentest4j.MultipleFailuresError MultipleFailuresError if possible or SoftAssertionError if any proxied
38+
* assertion objects threw an {@link AssertionError}
4039
*/
4140
public static void assertSoftly(Consumer<SoftAssertions> softly) {
4241
SoftAssertionsProvider.assertSoftly(SoftAssertions.class, softly);

src/test/java/module-info.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
3+
* the License. You may obtain a copy of the License at
4+
*
5+
* http://www.apache.org/licenses/LICENSE-2.0
6+
*
7+
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
8+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
9+
* specific language governing permissions and limitations under the License.
10+
*
11+
* Copyright 2025-2025 the original author or authors.
12+
*/
13+
14+
/**
15+
* Test module for AssertJ Eclipse Collections
16+
*/
17+
open module org.assertj.eclipse.collections.test {
18+
exports org.assertj.eclipse.collections.test.api.multimap;
19+
20+
requires org.assertj.eclipse.collections;
21+
requires org.assertj.core;
22+
requires org.eclipse.collections.api;
23+
requires org.eclipse.collections.impl;
24+
requires org.junit.jupiter.api;
25+
requires org.junit.jupiter.params;
26+
}

src/test/java/org/assertj/eclipse/collections/api/multimap/MultimapAssert_ContainsEntry_Test.java renamed to src/test/java/org/assertj/eclipse/collections/test/api/multimap/MultimapAssert_ContainsEntry_Test.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,28 @@
1010
*
1111
* Copyright 2025-2025 the original author or authors.
1212
*/
13-
package org.assertj.eclipse.collections.api.multimap;
13+
package org.assertj.eclipse.collections.test.api.multimap;
1414

1515
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
1616
import static org.assertj.core.api.Assertions.assertThatNoException;
17-
import static org.eclipse.collections.impl.tuple.Tuples.pair;
1817

1918
import org.assertj.eclipse.collections.api.SoftAssertions;
19+
import org.assertj.eclipse.collections.api.multimap.MultimapAssert;
2020
import org.eclipse.collections.api.multimap.Multimap;
21-
import org.eclipse.collections.api.tuple.Pair;
22-
import org.eclipse.collections.impl.factory.Multimaps;
2321
import org.junit.jupiter.api.Test;
2422
import org.junit.jupiter.params.ParameterizedTest;
2523
import org.junit.jupiter.params.provider.MethodSource;
2624

2725
class MultimapAssert_ContainsEntry_Test {
2826

2927
@ParameterizedTest
30-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
28+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
3129
void passes(Multimap<String, String> actual) {
3230
assertThatNoException().isThrownBy(() -> new MultimapAssert<>(actual).containsEntry("ENT", "Reed"));
3331
}
3432

3533
@ParameterizedTest
36-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#emptyMultimaps")
34+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#emptyMultimaps")
3735
void failsEmpty(Multimap<String, String> actual) {
3836
assertThatExceptionOfType(AssertionError.class)
3937
.isThrownBy(() -> new MultimapAssert<>(actual).containsEntry("ENT", "Reed"))
@@ -50,7 +48,7 @@ void failsNullMultimap() {
5048
}
5149

5250
@ParameterizedTest
53-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
51+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
5452
void failsMissingEntry(Multimap<String, String> actual) {
5553
assertThatExceptionOfType(AssertionError.class)
5654
.isThrownBy(() -> new MultimapAssert<>(actual).containsEntry("VOY", "Kes"))
@@ -60,7 +58,7 @@ void failsMissingEntry(Multimap<String, String> actual) {
6058
}
6159

6260
@ParameterizedTest
63-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
61+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
6462
void softAssertionPasses(Multimap<String, String> actual) {
6563
SoftAssertions.assertSoftly(softly -> softly.assertThat(actual).containsEntry("ENT", "Reed"));
6664
}

src/test/java/org/assertj/eclipse/collections/api/multimap/MultimapAssert_ContainsKeys_Test.java renamed to src/test/java/org/assertj/eclipse/collections/test/api/multimap/MultimapAssert_ContainsKeys_Test.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
*
1111
* Copyright 2025-2025 the original author or authors.
1212
*/
13-
package org.assertj.eclipse.collections.api.multimap;
13+
package org.assertj.eclipse.collections.test.api.multimap;
1414

1515
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
1616
import static org.assertj.core.api.Assertions.assertThatNoException;
1717

1818
import org.assertj.eclipse.collections.api.SoftAssertions;
19+
import org.assertj.eclipse.collections.api.multimap.MultimapAssert;
1920
import org.eclipse.collections.api.multimap.Multimap;
2021
import org.junit.jupiter.api.Test;
2122
import org.junit.jupiter.params.ParameterizedTest;
@@ -24,13 +25,13 @@
2425
class MultimapAssert_ContainsKeys_Test {
2526

2627
@ParameterizedTest
27-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
28+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
2829
void passes(Multimap<String, String> actual) {
2930
assertThatNoException().isThrownBy(() -> new MultimapAssert<>(actual).containsKeys("TOS", "TNG", "DS9"));
3031
}
3132

3233
@ParameterizedTest
33-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#emptyMultimaps")
34+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#emptyMultimaps")
3435
void failsEmpty(Multimap<String, String> actual) {
3536
assertThatExceptionOfType(AssertionError.class)
3637
.isThrownBy(() -> new MultimapAssert<>(actual).containsKeys("TOS", "TNG", "DS9"))
@@ -40,7 +41,7 @@ void failsEmpty(Multimap<String, String> actual) {
4041
}
4142

4243
@ParameterizedTest
43-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
44+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
4445
void failsMissingKey(Multimap<String, String> actual) {
4546
assertThatExceptionOfType(AssertionError.class)
4647
.isThrownBy(() -> new MultimapAssert<>(actual).containsKeys("DIS"))
@@ -57,7 +58,7 @@ void failsNullMultimap() {
5758
}
5859

5960
@ParameterizedTest
60-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
61+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
6162
void softAssertionPasses(Multimap<String, String> actual) {
6263
SoftAssertions.assertSoftly(softly -> softly.assertThat(actual).containsKeys("TOS", "TNG", "DS9"));
6364
}

src/test/java/org/assertj/eclipse/collections/api/multimap/MultimapAssert_ContainsOnly_Test.java renamed to src/test/java/org/assertj/eclipse/collections/test/api/multimap/MultimapAssert_ContainsOnly_Test.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
* Copyright 2025-2025 the original author or authors.
1212
*/
13-
package org.assertj.eclipse.collections.api.multimap;
13+
package org.assertj.eclipse.collections.test.api.multimap;
1414

1515
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
1616
import static org.assertj.core.api.Assertions.assertThatNoException;
@@ -19,6 +19,7 @@
1919
import java.util.Map;
2020

2121
import org.assertj.eclipse.collections.api.SoftAssertions;
22+
import org.assertj.eclipse.collections.api.multimap.MultimapAssert;
2223
import org.eclipse.collections.api.multimap.Multimap;
2324
import org.eclipse.collections.api.tuple.Pair;
2425
import org.junit.jupiter.api.Test;
@@ -28,7 +29,7 @@
2829
class MultimapAssert_ContainsOnly_Test {
2930

3031
@ParameterizedTest
31-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#shipMultimaps")
32+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#shipMultimaps")
3233
void passesWithPairs(Multimap<String, String> actual) {
3334
Pair<String, String>[] exactMatchPairs = new Pair[]{
3435
pair("TNG", "Enterprise"),
@@ -40,7 +41,7 @@ void passesWithPairs(Multimap<String, String> actual) {
4041
}
4142

4243
@ParameterizedTest
43-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#shipMultimaps")
44+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#shipMultimaps")
4445
void passesWithEntries(Multimap<String, String> actual) {
4546
Map.Entry<String, String>[] exactMatchEntries = new Map.Entry[]{
4647
pair("TNG", "Enterprise").toEntry(),
@@ -52,7 +53,7 @@ void passesWithEntries(Multimap<String, String> actual) {
5253
}
5354

5455
@ParameterizedTest
55-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#shipMultimaps")
56+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#shipMultimaps")
5657
void failsWhenAdditionalKeysOrValuesExistWithPair(Multimap<String, String> actual) {
5758
Pair<String, String>[] partialMatchMissingPairs = new Pair[]{
5859
pair("TNG", "Enterprise"),
@@ -66,7 +67,7 @@ void failsWhenAdditionalKeysOrValuesExistWithPair(Multimap<String, String> actua
6667
}
6768

6869
@ParameterizedTest
69-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#shipMultimaps")
70+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#shipMultimaps")
7071
void failsWhenAdditionalKeysOrValuesExistWithEntry(Multimap<String, String> actual) {
7172
Map.Entry<String, String>[] partialMatchMissingEntries = new Map.Entry[]{
7273
pair("TNG", "Enterprise").toEntry(),
@@ -80,7 +81,7 @@ void failsWhenAdditionalKeysOrValuesExistWithEntry(Multimap<String, String> actu
8081
}
8182

8283
@ParameterizedTest
83-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#shipMultimaps")
84+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#shipMultimaps")
8485
void failsWhenEntryIsMissingWithPair(Multimap<String, String> actual) {
8586
Pair<String, String>[] partialMatchExtraPairs = new Pair[]{
8687
pair("TOS", "Enterprise"),
@@ -96,7 +97,7 @@ void failsWhenEntryIsMissingWithPair(Multimap<String, String> actual) {
9697
}
9798

9899
@ParameterizedTest
99-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#shipMultimaps")
100+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#shipMultimaps")
100101
void failsWhenEntryIsMissingWithEntry(Multimap<String, String> actual) {
101102
Map.Entry<String, String>[] partialMatchExtraEntries = new Map.Entry[]{
102103
pair("TOS", "Enterprise").toEntry(),
@@ -112,7 +113,7 @@ void failsWhenEntryIsMissingWithEntry(Multimap<String, String> actual) {
112113
}
113114

114115
@ParameterizedTest
115-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#emptyMultimaps")
116+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#emptyMultimaps")
116117
void failsForEmptyMultimapWithPair(Multimap<String, String> actual) {
117118
Pair<String, String>[] exactMatchPairs = new Pair[]{
118119
pair("TNG", "Enterprise"),
@@ -125,7 +126,7 @@ void failsForEmptyMultimapWithPair(Multimap<String, String> actual) {
125126
}
126127

127128
@ParameterizedTest
128-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#emptyMultimaps")
129+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#emptyMultimaps")
129130
void failsForEmptyMultimapWithEntry(Multimap<String, String> actual) {
130131
Map.Entry<String, String>[] exactMatchEntries = new Map.Entry[]{
131132
pair("TNG", "Enterprise").toEntry(),
@@ -160,7 +161,7 @@ void failsForNullMultimapWithEntry() {
160161
}
161162

162163
@ParameterizedTest
163-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#shipMultimaps")
164+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#shipMultimaps")
164165
void softAssertionPassesWithPairs(Multimap<String, String> actual) {
165166
Pair<String, String>[] exactMatchPairs = new Pair[]{
166167
pair("TNG", "Enterprise"),
@@ -172,7 +173,7 @@ void softAssertionPassesWithPairs(Multimap<String, String> actual) {
172173
}
173174

174175
@ParameterizedTest
175-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#shipMultimaps")
176+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#shipMultimaps")
176177
void softAssertionPassesWithEntries(Multimap<String, String> actual) {
177178
Map.Entry<String, String>[] exactMatchEntries = new Map.Entry[]{
178179
pair("TNG", "Enterprise").toEntry(),

src/test/java/org/assertj/eclipse/collections/api/multimap/MultimapAssert_ContainsValues_Test.java renamed to src/test/java/org/assertj/eclipse/collections/test/api/multimap/MultimapAssert_ContainsValues_Test.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
*
1111
* Copyright 2025-2025 the original author or authors.
1212
*/
13-
package org.assertj.eclipse.collections.api.multimap;
13+
package org.assertj.eclipse.collections.test.api.multimap;
1414

1515
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
1616
import static org.assertj.core.api.Assertions.assertThatNoException;
1717

1818
import org.assertj.eclipse.collections.api.SoftAssertions;
19+
import org.assertj.eclipse.collections.api.multimap.MultimapAssert;
1920
import org.eclipse.collections.api.multimap.Multimap;
2021
import org.junit.jupiter.api.Test;
2122
import org.junit.jupiter.params.ParameterizedTest;
@@ -24,13 +25,13 @@
2425
class MultimapAssert_ContainsValues_Test {
2526

2627
@ParameterizedTest
27-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
28+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
2829
void passes(Multimap<String, String> actual) {
2930
assertThatNoException().isThrownBy(() -> new MultimapAssert<>(actual).containsValues("Kirk", "Picard", "Sisko", "Janeway", "Archer"));
3031
}
3132

3233
@ParameterizedTest
33-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#emptyMultimaps")
34+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#emptyMultimaps")
3435
void failsEmpty(Multimap<String, String> actual) {
3536
assertThatExceptionOfType(AssertionError.class)
3637
.isThrownBy(() -> new MultimapAssert<>(actual).containsValues("Kirk", "Picard", "Sisko", "Janeway", "Archer"))
@@ -40,7 +41,7 @@ void failsEmpty(Multimap<String, String> actual) {
4041
}
4142

4243
@ParameterizedTest
43-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
44+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
4445
void failsMissingValue(Multimap<String, String> actual) {
4546
assertThatExceptionOfType(AssertionError.class)
4647
.isThrownBy(() -> new MultimapAssert<>(actual).containsValues("Kes"))
@@ -57,7 +58,7 @@ void failsNullMultimap() {
5758
}
5859

5960
@ParameterizedTest
60-
@MethodSource("org.assertj.eclipse.collections.api.multimap.MultimapTestData#nonEmptyMultimaps")
61+
@MethodSource("org.assertj.eclipse.collections.test.api.multimap.MultimapTestData#nonEmptyMultimaps")
6162
void softAssertionPasses(Multimap<String, String> actual) {
6263
SoftAssertions.assertSoftly(softly -> softly.assertThat(actual).containsValues("Kirk", "Picard", "Sisko", "Janeway", "Archer"));
6364
}

src/test/java/org/assertj/eclipse/collections/api/multimap/MultimapAssert_Contains_Test.java renamed to src/test/java/org/assertj/eclipse/collections/test/api/multimap/MultimapAssert_Contains_Test.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
* Copyright 2025-2025 the original author or authors.
1212
*/
13-
package org.assertj.eclipse.collections.api.multimap;
13+
package org.assertj.eclipse.collections.test.api.multimap;
1414

1515
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
1616
import static org.assertj.core.api.Assertions.assertThatNoException;
@@ -21,6 +21,7 @@
2121
import java.util.stream.Stream;
2222

2323
import org.assertj.eclipse.collections.api.SoftAssertions;
24+
import org.assertj.eclipse.collections.api.multimap.MultimapAssert;
2425
import org.eclipse.collections.api.multimap.Multimap;
2526
import org.eclipse.collections.api.tuple.Pair;
2627
import org.eclipse.collections.impl.tuple.Tuples;

0 commit comments

Comments
 (0)