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 76f2e5a33f4f80e7733eca6e6ffd17b58abcd5ae
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Tue Feb 6 17:14:30 2024 +0100

    Move in `JDK19` internal class the calls to methods that will be replaced 
by Java 19 method calls when SIS will be allowed to use it.
---
 .../apache/sis/feature/CharacteristicTypeMap.java  |  9 ++++----
 .../org/apache/sis/index/tree/PointTreeTest.java   |  6 ++---
 .../apache/sis/metadata/ModifiableMetadata.java    |  3 ++-
 .../org/apache/sis/metadata/PropertyAccessor.java  |  7 +++---
 .../sis/metadata/iso/extent/DefaultExtent.java     |  4 ++--
 .../org/apache/sis/util/iso/DefaultRecordType.java |  6 ++---
 .../org/apache/sis/util/iso/RecordDefinition.java  |  5 ++---
 .../main/org/apache/sis/util/iso/Types.java        |  5 ++---
 .../apache/sis/xml/bind/IdentifierMapAdapter.java  |  7 +++---
 .../org/apache/sis/parameter/ParameterFormat.java  |  5 ++---
 .../referencing/factory/sql/EPSGCodeFinder.java    | 14 ++++++------
 .../referencing/operation/gridded/GridGroup.java   |  5 ++---
 .../referencing/operation/gridded/LoadedGrid.java  |  5 ++---
 .../sis/referencing/operation/provider/NTv2.java   |  4 ++--
 .../referencing/CC_GeneralOperationParameter.java  |  9 ++++----
 .../referencing/CC_OperationParameterGroup.java    |  6 ++---
 .../apache/sis/storage/netcdf/base/Variable.java   |  4 ++--
 .../sis/storage/netcdf/classic/ChannelDecoder.java |  6 ++---
 .../org/apache/sis/storage/sql/feature/Table.java  |  5 ++---
 .../main/org/apache/sis/storage/FeatureQuery.java  |  8 +++----
 .../apache/sis/storage/event/StoreListeners.java   |  7 +++---
 .../src/org.apache.sis.util/main/module-info.java  |  1 +
 .../main/org/apache/sis/pending/jdk/JDK19.java     | 22 ++++++++++++++++++
 .../main/org/apache/sis/util/Classes.java          |  4 ++--
 .../main/org/apache/sis/util/Locales.java          |  8 +++----
 .../org/apache/sis/util/collection/Containers.java | 26 ++++++++++------------
 .../sis/util/collection/DefaultTreeTable.java      |  6 ++---
 .../apache/sis/util/internal/CollectionsExt.java   |  6 ++---
 .../test/org/apache/sis/test/TestRunner.java       |  4 ++--
 29 files changed, 108 insertions(+), 99 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/CharacteristicTypeMap.java
 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/CharacteristicTypeMap.java
index b6a834b27a..9a0285be92 100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/CharacteristicTypeMap.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/CharacteristicTypeMap.java
@@ -20,12 +20,12 @@ import java.util.Map;
 import java.util.HashMap;
 import org.opengis.util.ScopedName;
 import org.opengis.util.GenericName;
+import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.internal.AbstractMap;
 import org.apache.sis.util.internal.CollectionsExt;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.collection.WeakValueHashMap;
 import org.apache.sis.util.resources.Errors;
-import static org.apache.sis.util.ArgumentChecks.ensureNonNullElement;
+import org.apache.sis.pending.jdk.JDK19;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.feature.AttributeType;
@@ -109,11 +109,12 @@ final class CharacteristicTypeMap extends 
AbstractMap<String,AttributeType<?>> {
     private CharacteristicTypeMap(final AttributeType<?> source, final 
AttributeType<?>[] characterizedBy) {
         this.characterizedBy = characterizedBy;
         int index = 0;
-        final Map<String,Integer> indices = new 
HashMap<>(Containers.hashMapCapacity(characterizedBy.length));
+        @SuppressWarnings("LocalVariableHidesMemberVariable")
+        final Map<String,Integer> indices = 
JDK19.newHashMap(characterizedBy.length);
         final Map<String,Integer> aliases = new HashMap<>();
         for (int i=0; i<characterizedBy.length; i++) {
             final AttributeType<?> attribute = characterizedBy[i];
-            ensureNonNullElement("characterizedBy", i, attribute);
+            ArgumentChecks.ensureNonNullElement("characterizedBy", i, 
attribute);
             GenericName name = attribute.getName();
             String key = AbstractIdentifiedType.toString(name, source, 
"characterizedBy", i);
             final Integer value = index++;
diff --git 
a/endorsed/src/org.apache.sis.feature/test/org/apache/sis/index/tree/PointTreeTest.java
 
b/endorsed/src/org.apache.sis.feature/test/org/apache/sis/index/tree/PointTreeTest.java
index 73614ce88b..1fda032c90 100644
--- 
a/endorsed/src/org.apache.sis.feature/test/org/apache/sis/index/tree/PointTreeTest.java
+++ 
b/endorsed/src/org.apache.sis.feature/test/org/apache/sis/index/tree/PointTreeTest.java
@@ -25,11 +25,11 @@ import java.util.Spliterator;
 import org.opengis.geometry.Envelope;
 import org.apache.sis.geometry.Envelope2D;
 import org.apache.sis.geometry.DirectPosition2D;
-import org.apache.sis.util.collection.Containers;
+import org.apache.sis.pending.jdk.JDK19;
 
 // Test dependencies
 import org.junit.Test;
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 import org.apache.sis.test.DependsOn;
 import org.apache.sis.test.TestCase;
 import org.apache.sis.test.TestUtilities;
@@ -115,7 +115,7 @@ public final class PointTreeTest extends TestCase {
         random = TestUtilities.createRandomNumberGenerator();
         tree = new PointTree<>(Element.class, region, Element::getPosition, 5, 
false);
         int count = random.nextInt(100) + 200;
-        data = new HashSet<>(Containers.hashMapCapacity(count));
+        data = JDK19.newHashSet(count);
         while (--count >= 0) {
             final Element e = new Element(random);
             assertEquals(data.add(e), tree.add(e));
diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/ModifiableMetadata.java
 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/ModifiableMetadata.java
index efc2c3dfdf..e011d2214f 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/ModifiableMetadata.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/ModifiableMetadata.java
@@ -40,6 +40,7 @@ import org.apache.sis.util.internal.CheckedHashSet;
 import org.apache.sis.util.internal.CheckedArrayList;
 import org.apache.sis.metadata.internal.Resources;
 import org.apache.sis.system.Semaphores;
+import org.apache.sis.pending.jdk.JDK19;
 import static org.apache.sis.util.collection.Containers.isNullOrEmpty;
 import static 
org.apache.sis.metadata.internal.ImplementationHelper.valueIfDefined;
 
@@ -897,7 +898,7 @@ public abstract class ModifiableMetadata extends 
AbstractMetadata {
             return new EnumMap(keyType);
         } else {
             // Must be LinkedHashMap, not HashMap, because TreeTableView needs 
stable iteration order.
-            return new LinkedHashMap<>((source != null) ? 
Containers.hashMapCapacity(source.size()) : 4);
+            return (source != null) ? JDK19.newLinkedHashMap(source.size()) : 
new LinkedHashMap<>(4);
         }
     }
 
diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/PropertyAccessor.java
 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/PropertyAccessor.java
index ebff2363fe..e5ba47e016 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/PropertyAccessor.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/PropertyAccessor.java
@@ -20,7 +20,6 @@ import java.util.Map;
 import java.util.List;
 import java.util.Arrays;
 import java.util.Locale;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Collection;
 import java.lang.reflect.Method;
@@ -47,11 +46,11 @@ import org.apache.sis.util.collection.BackingStoreException;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.xml.IdentifiedObject;
 import org.apache.sis.measure.ValueRange;
+import org.apache.sis.pending.jdk.JDK19;
 import static org.apache.sis.metadata.PropertyComparator.*;
 import static org.apache.sis.metadata.ValueExistencePolicy.isNullOrEmpty;
 import static org.apache.sis.util.internal.CollectionsExt.snapshot;
 import static org.apache.sis.util.internal.CollectionsExt.modifiableCopy;
-import static org.apache.sis.util.collection.Containers.hashMapCapacity;
 
 
 /**
@@ -258,7 +257,7 @@ class PropertyAccessor {
         /*
          * Compute all information derived from getters: setters, property 
names, value types.
          */
-        mapping      = new HashMap<>(hashMapCapacity(allCount));
+        mapping      = JDK19.newHashMap(allCount);
         names        = new String[allCount];
         elementTypes = new Class<?>[allCount];
         Method[] setters = null;
@@ -412,7 +411,7 @@ class PropertyAccessor {
          * Indices map is used for choosing what to do in case of name 
collision.
          */
         Method[] getters = (MetadataStandard.IMPLEMENTATION_CAN_ALTER_API ? 
implementation : type).getMethods();
-        final Map<String,Integer> indices = new 
HashMap<>(hashMapCapacity(getters.length));
+        final Map<String,Integer> indices = JDK19.newHashMap(getters.length);
         boolean hasExtraGetter = false;
         int count = 0;
         for (Method candidate : getters) {
diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultExtent.java
 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultExtent.java
index 41a8d8b595..5f4bb57069 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultExtent.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultExtent.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.metadata.iso.extent;
 
-import java.util.Set;
 import java.util.LinkedHashSet;
 import java.util.Collection;
 import java.util.function.BinaryOperator;
@@ -35,6 +34,7 @@ import org.apache.sis.util.Emptiable;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.iso.Types;
 import org.apache.sis.util.collection.Containers;
+import org.apache.sis.pending.jdk.JDK19;
 import org.apache.sis.metadata.TitleProperty;
 import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.metadata.internal.ReferencingServices;
@@ -362,7 +362,7 @@ public class DefaultExtent extends ISOMetadata implements 
Extent {
     private <T> Collection<T> intersect(final Class<T> type, Collection<T> 
targets, Collection<? extends T> sources, final BinaryOperator<T> intersect) {
         if (!Containers.isNullOrEmpty(sources)) {
             if (!Containers.isNullOrEmpty(targets)) {
-                final Set<T> results = new 
LinkedHashSet<>(Containers.hashMapCapacity(targets.size()));
+                final LinkedHashSet<T> results = 
JDK19.newLinkedHashSet(targets.size());
                 T empty = null;
                 for (final T target : targets) {
                     for (final T source : sources) {
diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/DefaultRecordType.java
 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/DefaultRecordType.java
index 508c31c49f..1e8f0183f0 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/DefaultRecordType.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/DefaultRecordType.java
@@ -37,11 +37,11 @@ import org.opengis.util.NameSpace;
 import org.opengis.util.Record;
 import org.opengis.util.RecordType;
 import org.opengis.util.RecordSchema;
+import org.apache.sis.pending.jdk.JDK19;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.ObjectConverters;
 import org.apache.sis.util.resources.Errors;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.converter.SurjectiveConverter;
 import org.apache.sis.metadata.internal.RecordSchemaSIS;
 
@@ -203,7 +203,7 @@ public class DefaultRecordType extends RecordDefinition 
implements RecordType, S
         this.typeName  = typeName;
         this.container = container;
         final NameSpace namespace = nameFactory.createNameSpace(typeName, 
null);
-        final Map<MemberName,Type> fieldTypes = new 
LinkedHashMap<>(Containers.hashMapCapacity(fields.size()));
+        final Map<MemberName,Type> fieldTypes = 
JDK19.newLinkedHashMap(fields.size());
         for (final Map.Entry<? extends CharSequence, ? extends Type> entry : 
fields.entrySet()) {
             final Type         type   = entry.getValue();
             final CharSequence name   = entry.getKey();
@@ -226,7 +226,7 @@ public class DefaultRecordType extends RecordDefinition 
implements RecordType, S
     private void readObject(final ObjectInputStream in) throws IOException, 
ClassNotFoundException {
         in.defaultReadObject();
         final int size = in.readInt();
-        final Map<MemberName,Type> fields = new 
LinkedHashMap<>(Containers.hashMapCapacity(size));
+        final Map<MemberName,Type> fields = JDK19.newLinkedHashMap(size);
         for (int i=0; i<size; i++) {
             final MemberName member = (MemberName) in.readObject();
             final Type type = (Type) in.readObject();
diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/RecordDefinition.java
 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/RecordDefinition.java
index f88ed7bae9..e7f78fe005 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/RecordDefinition.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/RecordDefinition.java
@@ -17,7 +17,6 @@
 package org.apache.sis.util.iso;
 
 import java.util.Map;
-import java.util.LinkedHashMap;
 import java.io.Serializable;
 import java.io.IOException;
 import java.io.ObjectInputStream;
@@ -29,8 +28,8 @@ import org.opengis.util.MemberName;
 import org.apache.sis.util.Classes;
 import org.apache.sis.util.Numbers;
 import org.apache.sis.util.CharSequences;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.internal.CollectionsExt;
+import org.apache.sis.pending.jdk.JDK19;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.feature.AttributeType;
@@ -147,7 +146,7 @@ abstract class RecordDefinition {                           
            // Inten
     final Type[] computeTransientFields(final Map<? extends MemberName, ? 
extends Type> fieldTypes) {
         final int size = fieldTypes.size();
         fieldNames   = new MemberName[size];
-        fieldIndices = new LinkedHashMap<>(Containers.hashMapCapacity(size));
+        fieldIndices = JDK19.newLinkedHashMap(size);
         final Type[] types = new Type[size];
         int i = 0;
         for (final Map.Entry<? extends MemberName, ? extends Type> entry : 
fieldTypes.entrySet()) {
diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/Types.java 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/Types.java
index b55246f6f9..fd499b6157 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/Types.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/util/iso/Types.java
@@ -17,7 +17,6 @@
 package org.apache.sis.util.iso;
 
 import java.util.Map;
-import java.util.HashMap;
 import java.util.SortedMap;
 import java.util.Locale;
 import java.util.Properties;
@@ -42,9 +41,9 @@ import org.apache.sis.util.OptionalCandidate;
 import org.apache.sis.util.logging.Logging;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.resources.Messages;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.collection.BackingStoreException;
 import org.apache.sis.util.internal.CodeLists;
+import org.apache.sis.pending.jdk.JDK19;
 import org.apache.sis.system.Modules;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
@@ -525,7 +524,7 @@ public final class Types extends Static {
              * Also use internized strings because those Strings are 
programmatic names or annotation values
              * which are expected to be internized anyway when the 
corresponding classes are loaded.
              */
-            typeForNames = new HashMap<>(Containers.hashMapCapacity(2 * 
props.size()));
+            typeForNames = JDK19.newHashMap(2 * props.size());
             for (final Map.Entry<Object,Object> e : props.entrySet()) {
                 final String key   = ((String) e.getKey()).intern();
                 final String value = ((String) e.getValue()).intern();
diff --git 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/IdentifierMapAdapter.java
 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/IdentifierMapAdapter.java
index 23528e0bca..7e7fb7e8d0 100644
--- 
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/IdentifierMapAdapter.java
+++ 
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/IdentifierMapAdapter.java
@@ -34,7 +34,8 @@ import org.apache.sis.xml.IdentifierMap;
 import org.apache.sis.xml.IdentifierSpace;
 import org.apache.sis.util.internal.Strings;
 import org.apache.sis.util.internal.SetOfUnknownSize;
-import static org.apache.sis.util.collection.Containers.hashMapCapacity;
+import org.apache.sis.util.collection.Containers;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -212,7 +213,7 @@ public class IdentifierMapAdapter extends 
AbstractMap<Citation,String> implement
      */
     @Override
     public final int size() {
-        final HashSet<Citation> done = new 
HashSet<>(hashMapCapacity(identifiers.size()));
+        final HashSet<Citation> done = JDK19.newHashSet(identifiers.size());
         for (final Identifier identifier : identifiers) {
             if (identifier != null) {
                 done.add(identifier.getAuthority());
@@ -442,7 +443,7 @@ public class IdentifierMapAdapter extends 
AbstractMap<Citation,String> implement
          * Creates a new iterator for the given collection of identifiers.
          */
         Iter(final Collection<? extends Identifier> identifiers, final boolean 
isModifiable) {
-            super(hashMapCapacity(identifiers.size()));
+            super(Containers.hashMapCapacity(identifiers.size()));
             this.identifiers = identifiers.iterator();
             this.isModifiable = isModifiable;
         }
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/ParameterFormat.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/ParameterFormat.java
index 0fde2b164e..0e59fb3865 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/ParameterFormat.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/ParameterFormat.java
@@ -56,7 +56,7 @@ import org.apache.sis.util.internal.CollectionsExt;
 import org.apache.sis.util.internal.X364;
 import org.apache.sis.referencing.IdentifiedObjects;
 import org.apache.sis.metadata.internal.NameToIdentifier;
-import static org.apache.sis.util.collection.Containers.hashMapCapacity;
+import org.apache.sis.pending.jdk.JDK19;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.util.ControlledVocabulary;
@@ -462,8 +462,7 @@ public class ParameterFormat extends TabularFormat<Object> {
          */
         int codespaceWidth = 0;
         final Collection<?> elements = (values != null) ? values.values() : 
group.descriptors();
-        final Map<GeneralParameterDescriptor, ParameterTableRow> 
descriptorValues =
-                new LinkedHashMap<>(hashMapCapacity(elements.size()));
+        final Map<GeneralParameterDescriptor, ParameterTableRow> 
descriptorValues = JDK19.newLinkedHashMap(elements.size());
         List<Object> deferredGroups = null;                 // To be created 
only if needed (it is usually not).
         for (final Object element : elements) {
             final GeneralParameterValue parameter;
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGCodeFinder.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGCodeFinder.java
index 9390894ab0..1aea9d2f61 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGCodeFinder.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGCodeFinder.java
@@ -40,18 +40,18 @@ import org.opengis.referencing.datum.GeodeticDatum;
 import org.opengis.referencing.datum.TemporalDatum;
 import org.opengis.referencing.datum.VerticalDatum;
 import org.opengis.referencing.datum.VerticalDatumType;
-import org.apache.sis.metadata.internal.ReferencingServices;
-import org.apache.sis.metadata.sql.util.SQLUtilities;
-import org.apache.sis.referencing.IdentifiedObjects;
-import org.apache.sis.referencing.util.Formulas;
 import org.apache.sis.util.ArraysExt;
 import org.apache.sis.util.CharSequences;
+import org.apache.sis.util.logging.Logging;
 import org.apache.sis.util.internal.CollectionsExt;
+import org.apache.sis.pending.jdk.JDK19;
+import org.apache.sis.metadata.internal.ReferencingServices;
+import org.apache.sis.metadata.sql.util.SQLUtilities;
 import org.apache.sis.metadata.iso.citation.Citations;
+import org.apache.sis.referencing.IdentifiedObjects;
+import org.apache.sis.referencing.util.Formulas;
 import org.apache.sis.referencing.factory.IdentifiedObjectFinder;
 import org.apache.sis.referencing.factory.ConcurrentAuthorityFactory;
-import org.apache.sis.util.collection.Containers;
-import org.apache.sis.util.logging.Logging;
 import static 
org.apache.sis.metadata.internal.NameToIdentifier.Simplifier.ESRI_DATUM_PREFIX;
 
 
@@ -134,7 +134,7 @@ final class EPSGCodeFinder extends IdentifiedObjectFinder {
                 declaredType = pt;
                 setIgnoringAxes(previous);
             }
-            final Set<Number> filters = new 
LinkedHashSet<>(Containers.hashMapCapacity(find.size()));
+            final Set<Number> filters = JDK19.newLinkedHashSet(find.size());
             for (final IdentifiedObject dep : find) {
                 Identifier id = IdentifiedObjects.getIdentifier(dep, 
Citations.EPSG);
                 if (id != null) try {                                          
         // Should never be null, but let be safe.
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/GridGroup.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/GridGroup.java
index c4d24e7717..4aef9ebfd5 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/GridGroup.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/GridGroup.java
@@ -18,7 +18,6 @@ package org.apache.sis.referencing.operation.gridded;
 
 import java.util.Map;
 import java.util.List;
-import java.util.LinkedHashMap;
 import java.io.IOException;
 import java.awt.Dimension;
 import java.awt.Rectangle;
@@ -33,7 +32,7 @@ import org.apache.sis.referencing.util.j2d.TileOrganizer;
 import org.apache.sis.referencing.util.j2d.Tile;
 import org.apache.sis.referencing.internal.Resources;
 import org.apache.sis.util.internal.CollectionsExt;
-import org.apache.sis.util.collection.Containers;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -159,7 +158,7 @@ public final class GridGroup<C extends Quantity<C>, T 
extends Quantity<T>> exten
             throws IOException, FactoryException, 
NoninvertibleTransformException
     {
         final TileOrganizer mosaic = new TileOrganizer(null);
-        final Map<Tile,LoadedGrid<C,T>> grids = new 
LinkedHashMap<>(Containers.hashMapCapacity(subgrids.size()));
+        final Map<Tile,LoadedGrid<C,T>> grids = 
JDK19.newLinkedHashMap(subgrids.size());
         for (final LoadedGrid<C,T> grid : subgrids) {
             final int[] size = grid.getGridSize();
             final Tile  tile = new Tile(new Rectangle(size[0], size[1]),
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/LoadedGrid.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/LoadedGrid.java
index f6551d47ab..a7d139c534 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/LoadedGrid.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/LoadedGrid.java
@@ -19,7 +19,6 @@ package org.apache.sis.referencing.operation.gridded;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.AbstractMap;
-import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.concurrent.Callable;
@@ -44,7 +43,6 @@ import org.apache.sis.util.collection.Cache;
 import org.apache.sis.util.collection.TreeTable;
 import org.apache.sis.util.collection.TableColumn;
 import org.apache.sis.util.collection.DefaultTreeTable;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.parameter.Parameters;
 import org.apache.sis.referencing.datum.DatumShiftGrid;
@@ -53,6 +51,7 @@ import 
org.apache.sis.referencing.operation.matrix.AffineTransforms2D;
 import org.apache.sis.referencing.operation.transform.MathTransforms;
 import org.apache.sis.referencing.operation.transform.InterpolatedTransform;
 import org.apache.sis.referencing.util.j2d.AffineTransform2D;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -495,7 +494,7 @@ public abstract class LoadedGrid<C extends Quantity<C>, T 
extends Quantity<T>> e
         if (subgrids == null) {
             return global;
         }
-        final Map<Envelope,MathTransform> specializations = new 
LinkedHashMap<>(Containers.hashMapCapacity(subgrids.length));
+        final Map<Envelope,MathTransform> specializations = 
JDK19.newLinkedHashMap(subgrids.length);
         for (final LoadedGrid<Angle,Angle> sg : subgrids) try {
             final Envelope domain = sg.getDomainOfValidity(Units.DEGREE);
             final MathTransform st = createGeodeticTransformation(provider, 
factory, sg);
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/NTv2.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/NTv2.java
index 0bde964b5e..f91ab9e1d6 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/NTv2.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/NTv2.java
@@ -52,11 +52,11 @@ import org.apache.sis.referencing.util.Formulas;
 import org.apache.sis.referencing.internal.Resources;
 import org.apache.sis.parameter.ParameterBuilder;
 import org.apache.sis.parameter.Parameters;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.internal.Strings;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.resources.Messages;
 import org.apache.sis.measure.Units;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -441,7 +441,7 @@ public final class NTv2 extends AbstractProvider {
          * sub-grids (if any) as children.
          */
         final LoadedGrid<Angle,Angle> readAllGrids() throws IOException, 
FactoryException, NoninvertibleTransformException {
-            final Map<String,      LoadedGrid<Angle,Angle>>  grids    = new 
HashMap<>(Containers.hashMapCapacity(numGrids));
+            final Map<String,      LoadedGrid<Angle,Angle>>  grids    = 
JDK19.newHashMap(numGrids);
             final Map<String, List<LoadedGrid<Angle,Angle>>> children = new 
LinkedHashMap<>();   // Should have few entries.
             while (grids.size() < numGrids) {
                 readGrid(grids, children);
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_GeneralOperationParameter.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_GeneralOperationParameter.java
index 83eb702dc2..716af63e88 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_GeneralOperationParameter.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_GeneralOperationParameter.java
@@ -20,7 +20,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import jakarta.xml.bind.annotation.XmlElementRef;
@@ -39,13 +38,13 @@ import org.apache.sis.referencing.NamedIdentifier;
 import org.apache.sis.referencing.IdentifiedObjects;
 import org.apache.sis.referencing.GeodeticException;
 import org.apache.sis.util.CorruptedObjectException;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.internal.CollectionsExt;
+import org.apache.sis.util.resources.Errors;
 import org.apache.sis.xml.IdentifiedObject;
 import org.apache.sis.xml.IdentifierSpace;
 import org.apache.sis.xml.bind.Context;
 import org.apache.sis.xml.bind.gco.PropertyType;
-import org.apache.sis.util.resources.Errors;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -321,7 +320,7 @@ public final class CC_GeneralOperationParameter extends 
PropertyType<CC_GeneralO
                                           boolean                            
canSubstitute)
     {
         boolean isCompatible = true;
-        final Set<GeneralParameterDescriptor> included = new 
HashSet<>(Containers.hashMapCapacity(provided.length));
+        final Set<GeneralParameterDescriptor> included = 
JDK19.newHashSet(provided.length);
         for (int i=0; i<provided.length; i++) {
             final GeneralParameterDescriptor p = provided[i];
             try {
@@ -419,7 +418,7 @@ public final class CC_GeneralOperationParameter extends 
PropertyType<CC_GeneralO
             if (size == 0) {
                 return false;
             }
-            final Set<NamedIdentifier> c = new 
HashSet<>(Containers.hashMapCapacity(size));
+            final Set<NamedIdentifier> c = JDK19.newHashSet(size);
             for (final T e : complete) {
                 c.add(toNamedIdentifier(e));
             }
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_OperationParameterGroup.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_OperationParameterGroup.java
index b31e5daec4..9f49da2a46 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_OperationParameterGroup.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_OperationParameterGroup.java
@@ -18,7 +18,6 @@ package org.apache.sis.xml.bind.referencing;
 
 import java.util.Map;
 import java.util.List;
-import java.util.LinkedHashMap;
 import jakarta.xml.bind.annotation.XmlElement;
 import org.opengis.parameter.ParameterDescriptor;
 import org.opengis.parameter.ParameterDescriptorGroup;
@@ -27,7 +26,7 @@ import org.apache.sis.xml.bind.gco.PropertyType;
 import org.apache.sis.referencing.internal.Resources;
 import org.apache.sis.parameter.DefaultParameterDescriptorGroup;
 import org.apache.sis.util.CorruptedObjectException;
-import org.apache.sis.util.collection.Containers;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -141,8 +140,7 @@ public final class CC_OperationParameterGroup extends 
PropertyType<CC_OperationP
         if (descriptors.isEmpty()) {
             return fromValues;
         }
-        final Map<String,GeneralParameterDescriptor> union =
-                new 
LinkedHashMap<>(Containers.hashMapCapacity(descriptors.size()));
+        final Map<String,GeneralParameterDescriptor> union = 
JDK19.newLinkedHashMap(descriptors.size());
         /*
          * Collect the descriptors declared explicitly in the 
ParameterDescriptorGroup. We should never have
          * two descriptors of the same name since the 
DefaultParameterDescriptorGroup constructor checked for
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Variable.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Variable.java
index ccee1ed7a4..acfaa1c0ad 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Variable.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Variable.java
@@ -42,12 +42,12 @@ import org.apache.sis.math.MathFunctions;
 import org.apache.sis.measure.NumberRange;
 import org.apache.sis.util.Numbers;
 import org.apache.sis.util.ArraysExt;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.collection.WeakHashSet;
 import org.apache.sis.util.internal.Numerics;
 import org.apache.sis.util.internal.CollectionsExt;
 import org.apache.sis.util.internal.UnmodifiableArrayList;
 import org.apache.sis.util.resources.Errors;
+import org.apache.sis.pending.jdk.JDK19;
 import static 
org.apache.sis.storage.base.StoreUtilities.ALLOW_LAST_RESORT_STATISTICS;
 
 
@@ -241,7 +241,7 @@ public abstract class Variable extends Node {
              */
             Exception     error    = null;
             StringBuilder invalids = null;
-            enumeration = new HashMap<>(Containers.hashMapCapacity(count));
+            enumeration = JDK19.newHashMap(count);
             for (int i=0; i<count; i++) try {
                 final CharSequence label = labels[i];
                 if (label != null) {
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
index 14d5d822c5..6663a4d973 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
@@ -52,20 +52,20 @@ import org.apache.sis.storage.netcdf.base.Variable;
 import org.apache.sis.storage.netcdf.base.Dimension;
 import org.apache.sis.storage.netcdf.base.Convention;
 import org.apache.sis.storage.netcdf.base.NamedElement;
+import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.util.ArraysExt;
 import org.apache.sis.util.internal.Constants;
 import org.apache.sis.util.internal.CollectionsExt;
 import org.apache.sis.util.internal.StandardDateFormat;
-import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.resources.Vocabulary;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.collection.TreeTable;
 import org.apache.sis.util.collection.TableColumn;
 import org.apache.sis.setup.GeometryLibrary;
 import org.apache.sis.measure.Units;
 import org.apache.sis.math.Vector;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -658,7 +658,7 @@ public final class ChannelDecoder extends Decoder {
         if (attributes.size() >= attributeMap.size()) {
             return Collections.unmodifiableSet(attributeMap.keySet());
         }
-        final Set<String> attributeNames = new 
LinkedHashSet<>(Containers.hashMapCapacity(attributes.size()));
+        final Set<String> attributeNames = 
JDK19.newLinkedHashSet(attributes.size());
         attributes.forEach((e) -> attributeNames.add(e.getKey()));
         return attributeNames;
     }
diff --git 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Table.java
 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Table.java
index 1da43c9cda..751aa2a14c 100644
--- 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Table.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Table.java
@@ -17,7 +17,6 @@
 package org.apache.sis.storage.sql.feature;
 
 import java.util.Map;
-import java.util.HashMap;
 import java.util.Optional;
 import java.util.stream.Stream;
 import java.sql.Connection;
@@ -31,9 +30,9 @@ import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.InternalDataStoreException;
 import org.apache.sis.metadata.sql.util.Reflection;
 import org.apache.sis.metadata.sql.util.SQLBuilder;
+import org.apache.sis.pending.jdk.JDK19;
 import org.apache.sis.util.Debug;
 import org.apache.sis.util.collection.WeakValueHashMap;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.collection.TreeTable;
 import org.apache.sis.util.iso.DefaultNameSpace;
 
@@ -366,7 +365,7 @@ final class Table extends AbstractFeatureSet {
         synchronized (this) {
             m = attributeToColumns;
             if (m == null) {
-                m = new 
HashMap<>(Containers.hashMapCapacity(attributes.length));
+                m = JDK19.newHashMap(attributes.length);
                 for (final Column c : attributes) {
                     String label = c.propertyName;
                     m.put(label, c);
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureQuery.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureQuery.java
index 056eba2476..d4da656505 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureQuery.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureQuery.java
@@ -18,9 +18,7 @@ package org.apache.sis.storage;
 
 import java.util.Arrays;
 import java.util.Set;
-import java.util.HashSet;
 import java.util.Map;
-import java.util.LinkedHashMap;
 import java.util.Objects;
 import java.util.OptionalLong;
 import java.util.function.Function;
@@ -41,10 +39,10 @@ import org.apache.sis.filter.Optimization;
 import org.apache.sis.filter.internal.SortByComparator;
 import org.apache.sis.filter.internal.XPath;
 import org.apache.sis.storage.internal.Resources;
+import org.apache.sis.pending.jdk.JDK19;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.ArraysExt;
 import org.apache.sis.util.CharSequences;
-import org.apache.sis.util.collection.Containers;
 import org.apache.sis.util.iso.Names;
 import org.apache.sis.util.resources.Vocabulary;
 
@@ -228,7 +226,7 @@ public class FeatureQuery extends Query implements 
Cloneable, Serializable {
         if (properties != null) {
             ArgumentChecks.ensureNonEmpty("properties", properties);
             properties = properties.clone();
-            final Map<Object,Integer> uniques = new 
LinkedHashMap<>(Containers.hashMapCapacity(properties.length));
+            final Map<Object,Integer> uniques = 
JDK19.newLinkedHashMap(properties.length);
             for (int i=0; i<properties.length; i++) {
                 final NamedExpression c = properties[i];
                 ArgumentChecks.ensureNonNullElement("properties", i, c);
@@ -755,7 +753,7 @@ public class FeatureQuery extends Query implements 
Cloneable, Serializable {
                  * We may have collision of their `String` representations 
however, which is okay.
                  */
                 if (names == null) {
-                    names = new 
HashSet<>(Containers.hashMapCapacity(projection.length));
+                    names = JDK19.newHashSet(projection.length);
                     for (final NamedExpression p : projection) {
                         if (p.alias != null) {
                             names.add(p.alias.toString());
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/event/StoreListeners.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/event/StoreListeners.java
index ef3cc182f2..8bdc7e6504 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/event/StoreListeners.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/event/StoreListeners.java
@@ -18,7 +18,6 @@ package org.apache.sis.storage.event;
 
 import java.util.Map;
 import java.util.Set;
-import java.util.HashSet;
 import java.util.Locale;
 import java.util.Optional;
 import java.util.IdentityHashMap;
@@ -35,14 +34,14 @@ import org.apache.sis.util.Exceptions;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.logging.Logging;
 import org.apache.sis.util.resources.Vocabulary;
-import org.apache.sis.util.collection.Containers;
+import org.apache.sis.util.internal.Strings;
+import org.apache.sis.pending.jdk.JDK19;
 import org.apache.sis.storage.DataStoreProvider;
 import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.Resource;
 import org.apache.sis.storage.internal.Resources;
 import org.apache.sis.storage.base.StoreResource;
 import org.apache.sis.storage.base.StoreUtilities;
-import org.apache.sis.util.internal.Strings;
 
 
 /**
@@ -886,7 +885,7 @@ public class StoreListeners implements Localized {
     public synchronized void setUsableEventTypes(final Class<?>... permitted) {
         ArgumentChecks.ensureNonEmpty("permitted", permitted);
         final Set<Class<? extends StoreEvent>> current = permittedEventTypes;
-        final Set<Class<? extends StoreEvent>> types = new 
HashSet<>(Containers.hashMapCapacity(permitted.length));
+        final Set<Class<? extends StoreEvent>> types = 
JDK19.newHashSet(permitted.length);
         for (final Class<?> type : permitted) {
             if (current != null ? current.contains(type) : 
StoreEvent.class.isAssignableFrom(type)) {
                 types.add((Class<? extends StoreEvent>) type);
diff --git a/endorsed/src/org.apache.sis.util/main/module-info.java 
b/endorsed/src/org.apache.sis.util/main/module-info.java
index 1862fabe6b..4f9e559113 100644
--- a/endorsed/src/org.apache.sis.util/main/module-info.java
+++ b/endorsed/src/org.apache.sis.util/main/module-info.java
@@ -165,6 +165,7 @@ module org.apache.sis.util {
             org.apache.sis.referencing.database;        // In the "non-free" 
sub-project.
 
     exports org.apache.sis.pending.jdk to
+            org.apache.sis.metadata,
             org.apache.sis.referencing,
             org.apache.sis.referencing.gazetteer,
             org.apache.sis.feature,
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/jdk/JDK19.java 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/jdk/JDK19.java
index 933e9ef92e..12c8f7ba76 100644
--- 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/jdk/JDK19.java
+++ 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/jdk/JDK19.java
@@ -16,6 +16,12 @@
  */
 package org.apache.sis.pending.jdk;
 
+import java.util.HashSet;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedHashMap;
+import static org.apache.sis.util.collection.Containers.hashMapCapacity;
+
 
 /**
  * Place holder for some functionalities defined in a JDK more recent than 
Java 11.
@@ -38,4 +44,20 @@ public final class JDK19 {
      */
     private JDK19() {
     }
+
+    public static <T> HashSet<T> newHashSet(int n) {
+        return new HashSet<>(hashMapCapacity(n));
+    }
+
+    public static <K,V> HashMap<K,V> newHashMap(int n) {
+        return new HashMap<>(hashMapCapacity(n));
+    }
+
+    public static <T> LinkedHashSet<T> newLinkedHashSet(int n) {
+        return new LinkedHashSet<>(hashMapCapacity(n));
+    }
+
+    public static <K, V> LinkedHashMap<K,V> newLinkedHashMap(int n) {
+        return new LinkedHashMap<>(hashMapCapacity(n));
+    }
 }
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Classes.java 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Classes.java
index cf86f7836b..194d0938b6 100644
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Classes.java
+++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Classes.java
@@ -33,7 +33,7 @@ import java.lang.reflect.GenericDeclaration;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Modifier;
 import org.opengis.annotation.UML;
-import static org.apache.sis.util.collection.Containers.hashMapCapacity;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -466,7 +466,7 @@ public final class Classes extends Static {
         final Class<?>[] interfaces = type.getInterfaces();
         for (int i=0; i<interfaces.length; i++) {
             if (addTo == null) {
-                addTo = new 
LinkedHashSet<>(hashMapCapacity(interfaces.length));
+                addTo = JDK19.newLinkedHashSet(interfaces.length);
             }
             if (!addTo.add(interfaces[i])) {
                 interfaces[i] = null;           // Remember that this 
interface is already present.
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Locales.java 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Locales.java
index f72c51f242..274640eb78 100644
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Locales.java
+++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Locales.java
@@ -21,15 +21,13 @@ import java.util.Set;
 import java.util.Arrays;
 import java.util.Locale;
 import java.util.TreeMap;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
 import java.util.MissingResourceException;
 import java.util.IllformedLocaleException;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
+import org.apache.sis.pending.jdk.JDK19;
 import org.apache.sis.util.logging.Logging;
 import static org.apache.sis.util.CharSequences.trimWhitespaces;
-import static org.apache.sis.util.collection.Containers.hashMapCapacity;
 import static org.apache.sis.util.resources.IndexedResourceBundle.LOGGER;
 
 
@@ -57,7 +55,7 @@ public final class Locales extends Static {
     private static final Map<Locale,Locale> POOL;
     static {
         final Locale[] locales = Locale.getAvailableLocales();
-        POOL = new HashMap<>(hashMapCapacity(locales.length));
+        POOL = JDK19.newHashMap(locales.length);
         for (final Locale lc : locales) {
             POOL.put(lc, lc);
         }
@@ -211,7 +209,7 @@ filter: for (final Locale locale : locales) {
      */
     @SuppressWarnings("deprecation")
     private static Locale[] getLanguages(final Locale... locales) {
-        final Set<String> codes = new 
LinkedHashSet<>(hashMapCapacity(locales.length));
+        final Set<String> codes = JDK19.newLinkedHashSet(locales.length);
         for (final Locale locale : locales) {
             codes.add(locale.getLanguage());
         }
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/Containers.java
 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/Containers.java
index 72404c405a..d2e90b086c 100644
--- 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/Containers.java
+++ 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/Containers.java
@@ -251,26 +251,24 @@ public final class Containers extends Static {
     }
 
     /**
-     * Returns the capacity to be given to the {@link 
java.util.HashMap#HashMap(int) HashMap}
-     * constructor for holding the given number of elements. This method 
computes the capacity
-     * for the default <cite>load factor</cite>, which is 0.75.
+     * Returns the capacity to give to the {@code HashMap} and {@code HashSet} 
constructors for holding the
+     * given number of elements. This method computes the capacity for the 
default load factor, which is 0.75.
+     * This capacity is applicable to the following classes:
+     * {@link java.util.HashSet},
+     * {@link java.util.HashMap},
+     * {@link java.util.LinkedHashSet} and
+     * {@link java.util.LinkedHashMap}.
+     * This capacity is <strong>not</strong> applicable to {@link 
java.util.IdentityHashMap}.
      *
-     * <p>The same calculation can be used for {@link java.util.LinkedHashMap} 
and
-     * {@link java.util.HashSet} as well, which are built on top of {@code 
HashMap}.
-     * However, it is not needed for {@link java.util.IdentityHashMap}.</p>
-     *
-     * <h4>Future evolution</h4>
-     * This method may be deprecated in favor of {@code 
HashMap.newHashMap(int)}
-     * when Apache SIS will be allowed to compile for JDK19.
+     * <p>Since Java 19, the static factory methods in above-cited classes 
should be used instead of this method.
+     * However, this {@code hashMapCapacity} method is still useful in a few 
cases where the standard factory methods
+     * cannot be invoked, for example because the collection to construct is a 
subclasses for the standard classes.</p>
      *
      * @param  count  the number of elements to be put into the hash map or 
hash set.
      * @return the minimal initial capacity to be given to the hash map 
constructor.
      */
     public static int hashMapCapacity(final int count) {
-        /*
-         * Dividing 'count' by 0.75 is equivalent to multiplying by 1.333333…
-         * rounded to next integer.
-         */
+        // Dividing `count` by 0.75 is equivalent to multiplying by 1.333333… 
rounded to next integer.
         return (count * 4 + 2) / 3;
     }
 
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/DefaultTreeTable.java
 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/DefaultTreeTable.java
index c5b9e07b59..a8387c81ce 100644
--- 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/DefaultTreeTable.java
+++ 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/collection/DefaultTreeTable.java
@@ -28,8 +28,8 @@ import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.internal.Cloner;
 import org.apache.sis.util.internal.Acyclic;
 import org.apache.sis.util.internal.UnmodifiableArrayList;
+import org.apache.sis.pending.jdk.JDK19;
 import static org.apache.sis.util.collection.Containers.isNullOrEmpty;
-import static org.apache.sis.util.collection.Containers.hashMapCapacity;
 
 
 /**
@@ -153,8 +153,8 @@ public class DefaultTreeTable implements TreeTable, 
Cloneable, Serializable {
         Map<TableColumn<?>,Integer> map;
         switch (columns.length) {
             case 0:  map = Map.of(); break;
-            case 1:  map = null; break; // Will be created inside the loop 
(common case).
-            default: map = new 
LinkedHashMap<>(hashMapCapacity(columns.length)); break;
+            case 1:  map = null; break;         // Will be created inside the 
loop (common case).
+            default: map = JDK19.newLinkedHashMap(columns.length); break;
         }
         for (int i=0; i<columns.length; i++) {
             final TableColumn<?> column = columns[i];
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/CollectionsExt.java
 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/CollectionsExt.java
index 57ff37a327..5cbe4bfd8d 100644
--- 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/CollectionsExt.java
+++ 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/CollectionsExt.java
@@ -25,7 +25,7 @@ import org.apache.sis.util.Numbers;
 import org.apache.sis.util.collection.CodeListSet;
 import org.apache.sis.util.collection.CheckedContainer;
 import org.apache.sis.util.resources.Errors;
-import static org.apache.sis.util.collection.Containers.hashMapCapacity;
+import org.apache.sis.pending.jdk.JDK19;
 
 
 /**
@@ -317,7 +317,7 @@ public final class CollectionsExt extends Static {
         if (Enum.class.isAssignableFrom(type)) {
             return EnumSet.noneOf((Class) type);
         }
-        return new LinkedHashSet<>(hashMapCapacity(count));
+        return JDK19.newLinkedHashSet(count);
     }
 
     /**
@@ -826,7 +826,7 @@ public final class CollectionsExt extends Static {
         if (entries == null || entries.isEmpty()) {
             return Collections.emptyMap();
         }
-        final Map<String,E> map = new 
LinkedHashMap<>(hashMapCapacity(entries.size()));
+        final Map<String,E> map = JDK19.newLinkedHashMap(entries.size());
         final Set<String> generated = new HashSet<>();
         for (final Map.Entry<String, ? extends E> entry : entries) {
             final String name = entry.getKey();
diff --git 
a/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/TestRunner.java 
b/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/TestRunner.java
index b6010515a5..9c4e92b59d 100644
--- a/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/TestRunner.java
+++ b/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/TestRunner.java
@@ -23,8 +23,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.io.PrintWriter;
 import org.apache.sis.util.ArraysExt;
+import org.apache.sis.pending.jdk.JDK19;
 import static org.apache.sis.util.collection.Containers.isNullOrEmpty;
-import static org.apache.sis.util.collection.Containers.hashMapCapacity;
 
 // Test dependencies
 import org.junit.Test;
@@ -178,7 +178,7 @@ public final class TestRunner extends 
BlockJUnit4ClassRunner {
         final TestClass testClass = getTestClass();
         final List<FrameworkMethod> depends = 
testClass.getAnnotatedMethods(DependsOnMethod.class);
         if (!isNullOrEmpty(depends)) {
-            final Set<String> dependencies = new 
HashSet<>(hashMapCapacity(depends.size()));
+            final Set<String> dependencies = JDK19.newHashSet(depends.size());
             for (final FrameworkMethod method : depends) {
                 for (final String value : 
method.getAnnotation(DependsOnMethod.class).value()) {
                     dependencies.add(value);

Reply via email to