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);