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
  */

Reply via email to