This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 11293da0ed384e3707eafeaf43fc8b958c9e2928 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Sat Dec 10 21:43:20 2022 +0100 Rollback two changes from last commit where the order of elements in the `Set` matter. --- .../internal/referencing/CoordinateOperations.java | 5 +++-- .../java/org/apache/sis/io/wkt/WKTDictionary.java | 3 ++- .../apache/sis/internal/util/CollectionsExt.java | 24 +++++++++++++++++++--- .../org/apache/sis/internal/util/package-info.java | 2 +- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/CoordinateOperations.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/CoordinateOperations.java index 018b5db1c0..7fcd3a1eae 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/CoordinateOperations.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/CoordinateOperations.java @@ -41,6 +41,7 @@ import org.apache.sis.internal.metadata.NameToIdentifier; import org.apache.sis.internal.system.DefaultFactories; import org.apache.sis.internal.system.Modules; import org.apache.sis.internal.system.SystemListener; +import org.apache.sis.internal.util.CollectionsExt; import org.apache.sis.internal.util.Numerics; import org.apache.sis.util.Deprecable; import org.apache.sis.util.collection.Containers; @@ -51,7 +52,7 @@ import org.apache.sis.util.collection.Containers; * until first needed. Contains also utility methods related to coordinate operations. * * @author Martin Desruisseaux (Geomatys) - * @version 1.1 + * @version 1.4 * @since 0.7 * @module */ @@ -292,7 +293,7 @@ public final class CoordinateOperations extends SystemListener { indices[i] = dim; r &= ~(1L << dim); } - final Set<Integer> dimensions = Set.of(indices); + final Set<Integer> dimensions = CollectionsExt.immutableSet(true, indices); if (useCache) { synchronized (CACHE) { final Set<Integer> existing = CACHE[(int) changes]; diff --git a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTDictionary.java b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTDictionary.java index a3397abd62..04268b3420 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTDictionary.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/WKTDictionary.java @@ -149,6 +149,7 @@ public class WKTDictionary extends GeodeticAuthorityFactory { /** * Code spaces of authority codes recognized by this factory. * This set is computed from the {@code "ID[…]"} elements found in WKT definitions. + * Code spaces are sorted with most frequently used space first. * * @see #getCodeSpaces() */ @@ -882,7 +883,7 @@ public class WKTDictionary extends GeodeticAuthorityFactory { public Set<String> getCodeSpaces() { lock.readLock().lock(); try { - return Set.copyOf(codespaces); + return CollectionsExt.copyPreserveOrder(codespaces); } finally { lock.readLock().unlock(); } diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java index 81f8edc66a..566185a50d 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java @@ -49,7 +49,7 @@ import static org.apache.sis.util.collection.Containers.hashMapCapacity; * bit tedious to explain, which is another indication that they should not be in public API. * * @author Martin Desruisseaux (IRD, Geomatys) - * @version 1.1 + * @version 1.4 * @since 0.3 * @module */ @@ -335,14 +335,14 @@ public final class CollectionsExt extends Static { * sense of {@link Object#equals(Object)}, then only the last instance of the duplicated * values will be included in the returned set. * + * <p>This method differs from {@link Set#of(Object...)} in that it preserves element order.</p> + * * @param <E> the type of array elements. * @param excludeNull {@code true} for excluding the {@code null} element from the returned set. * @param array the array to copy in a set. May be {@code null} or contain null elements. * @return a set containing the array elements, or {@code null} if the given array was null. * * @see Collections#unmodifiableSet(Set) - * - * @todo Consider replacing by {@code Set.of(...)} in JDK9. */ @SafeVarargs @SuppressWarnings("fallthrough") @@ -691,6 +691,24 @@ public final class CollectionsExt extends Static { return list; } + /** + * Returns a unmodifiable copy of the given set, preserving order. + * + * @param <E> the type of elements. + * @param set the set to copy, or {@code null}. + * @return a copy of the given set, or {@code null} if the given set was null. + */ + public static <E> Set<E> copyPreserveOrder(final Set<E> set) { + if (set == null) { + return null; + } + switch (set.size()) { + case 0: return Collections.emptySet(); + case 1: return Collections.singleton(set.iterator().next()); + default: return Collections.unmodifiableSet(new LinkedHashSet<>(set)); + } + } + /** * Returns a clone of the given set. This method is only intended to avoid the "unchecked cast" warning. * diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/package-info.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/package-info.java index 0146bec0dd..f384a4c31e 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/package-info.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/package-info.java @@ -30,7 +30,7 @@ * so some serialized classes still exist in this package. * * @author Martin Desruisseaux (Geomatys) - * @version 1.3 + * @version 1.4 * @since 0.3 * @module */