You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2022/12/13 13:27:26 UTC

[sis] branch master updated (217df02d3e -> e7c5ccf5a9)

This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/sis.git


    from 217df02d3e Set version number to 1.4-SNAPSHOT for next development cycle.
     add 123f05ebc0 Post-release cleanup.
     add 9bb1d80d20 Post-release: remove deprecated methods.
     add 0083d298c7 Set Java version requirement to Java 11 and update documentation. There is no code change in this commit.
     add a5835a6c1c Upgrade Derby dependency to series 10.15, which is the last series compatible with Java 11.
     add 3755cb816a Move JavaEE 8 dependency to `sis-webapp` module. Update links to Java 8 documentation. Update NetBeans project configuration.
     add ad687670cb Remove OSGi dependency from core SIS modules. OSGi support has never been completed anyway. The class moved to `sis-webapp` in case we want to try again in the future.
     add 036c9fb308 Remove a hack for a Java 8 limitation fixed in Java 9.
     add 929bc5d9c1 Delete some placeholder defined in the `JDK9` internal class, now replaced by their standard Java 11 counterparts.
     add 4108d96770 Replace more `JDK9` placeholder. Those replacements are more risky because they introduce slight behavioral changes (range checks in `Arrays.equals(…)`, different iteration order in `Set` and `Map`).
     add c33f347075 Rename `JDK9` as `JDK17` since it is now a placeholder for methods defined after Java 11.
     add 11293da0ed Rollback two changes from last commit where the order of elements in the `Set` matter.
     add ee6b293e6b Remove reference to JAXB internal implementation, which is not provided anymore.
     add eaf8024708 Reduce the use of `CollectionsExt` when Java 11 methods can do the work.
     add d37c8ce013 Use the safer Java 11 way to convert collection to array.
     add 7a733dc902 Resolve some of the cases (the easy ones) that where identified by a "Pending JDK9" comment.
     add d94732535a Resolve some more advanced cases that where identified by a "Pending JDK9" comment.
     add 922983279c Replace some `Collections` method calls by their `Map`, `Set` or `List` equivalent. The latter are immutable and check for null value.
     add 9a73feaadc Replace `Collections.singletonMap(…)` by `Map.of(…)` where applicabie. There is two cases where we don't do the replacement: - When the map needs to accept null values. - When the check for null value will be better done (with a better error message) by `IdentifiedObject` constructor.
     add 6b3c47f8e1 Replace more `Collections` method calls by `Map.of`, `List.of` or `Set.of`. The remaining `Collections` calls are intentional for accepting null values.
     add 2c7abea573 Resolve some "TODO" which were waiting for JDK 10 or JDK 11.
     add 9c4a34851d Add `since` tag into `@Deprecated` annotations. Remove 4 deprecated methods that where not used anymore.
     add f5bc633ac3 Merge branch 'geoapi-4.0' into geoapi-3.1. This is the upgrade from Java 8 to Java 11.
     new e7c5ccf5a9 Merge branch 'geoapi-3.1'. This is the upgrade from Java 8 to Java 11.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 README                                             |   2 +-
 application/sis-console/pom.xml                    |   5 +
 .../org/apache/sis/console/IdentifierCommand.java  |   1 +
 .../org/apache/sis/console/MetadataCommand.java    |   4 +-
 .../apache/sis/console/ResourcesDownloader.java    |   3 +-
 .../org/apache/sis/console/TransformCommand.java   |   3 +-
 application/sis-javafx/pom.xml                     |   5 +
 application/sis-javafx/src/main/artifact/README    |   6 +-
 application/sis-javafx/src/main/artifact/bin/sis   |   2 +-
 .../sis-javafx/src/main/artifact/bin/sis.bat       |   2 +-
 application/sis-javafx/src/main/artifact/bin/sisfx |   2 +-
 .../sis-javafx/src/main/artifact/bin/sisfx.bat     |   2 +-
 .../main/java/org/apache/sis/gui/DataViewer.java   |   3 +-
 .../main/java/org/apache/sis/gui/RecentFiles.java  |   4 +-
 .../apache/sis/gui/coverage/CoverageControls.java  |   4 +-
 .../apache/sis/gui/coverage/CoverageExplorer.java  |  24 +-
 .../apache/sis/gui/coverage/CoverageStyling.java   |   2 +-
 .../org/apache/sis/gui/coverage/package-info.java  |   2 +-
 .../apache/sis/gui/dataset/ExpandedFeature.java    |   8 +-
 .../org/apache/sis/gui/dataset/PathAction.java     |   3 +-
 .../java/org/apache/sis/gui/map/StatusBar.java     |  63 +---
 .../java/org/apache/sis/gui/map/package-info.java  |   2 +-
 .../sis/gui/metadata/StandardMetadataTree.java     |   6 +-
 .../apache/sis/gui/referencing/AuthorityCodes.java |   3 +-
 .../gui/referencing/PositionableProjection.java    |   2 +-
 .../gui/referencing/RecentReferenceSystems.java    |  20 +-
 .../apache/sis/gui/referencing/package-info.java   |   2 +-
 .../org/apache/sis/internal/gui/GUIUtilities.java  |   4 +-
 .../apache/sis/internal/gui/ImageConverter.java    |   5 +-
 .../org/apache/sis/internal/gui/RecentChoices.java |   4 +-
 .../apache/sis/internal/gui/GUIUtilitiesTest.java  |   7 +-
 application/sis-openoffice/pom.xml                 |   5 +
 application/sis-webapp/pom.xml                     |  10 +
 .../org/apache/sis/services}/OSGiActivator.java    |   7 +-
 .../org/apache/sis/services}/ServletListener.java  |   8 +-
 .../org/apache/sis/internal/book/Assembler.java    |  10 +-
 .../apache/sis/internal/book/CodeColorizer.java    |   7 +-
 .../org/apache/sis/internal/book/package-info.java |   4 +-
 .../org/apache/sis/coverage/SampleDimension.java   |   4 +-
 .../sis/coverage/grid/BufferedGridCoverage.java    |   3 +-
 .../sis/coverage/grid/GridCoordinatesView.java     |   5 +-
 .../org/apache/sis/coverage/grid/GridCoverage.java |   2 +-
 .../apache/sis/coverage/grid/GridCoverage2D.java   |   3 +-
 .../apache/sis/coverage/grid/GridDerivation.java   |   3 +-
 .../org/apache/sis/coverage/grid/GridExtent.java   |  42 +--
 .../apache/sis/coverage/grid/GridExtentCRS.java    |   3 +-
 .../org/apache/sis/coverage/grid/GridGeometry.java |  31 +-
 .../apache/sis/coverage/grid/ImageRenderer.java    |   3 +-
 .../apache/sis/coverage/grid/PixelTranslation.java |  23 +-
 .../org/apache/sis/coverage/grid/package-info.java |   2 +-
 .../org/apache/sis/feature/AbstractAttribute.java  |   4 +-
 .../org/apache/sis/feature/AbstractFeature.java    |   7 +-
 .../org/apache/sis/feature/DefaultFeatureType.java |   2 +-
 .../org/apache/sis/feature/FeatureOperations.java  |   2 +-
 .../java/org/apache/sis/feature/LinkOperation.java |   3 +-
 .../sis/feature/builder/FeatureTypeBuilder.java    |   9 +-
 .../org/apache/sis/filter/AssociationValue.java    |   6 +-
 .../java/org/apache/sis/filter/BinaryFunction.java |   3 +-
 .../apache/sis/filter/BinaryGeometryFilter.java    |   3 +-
 .../org/apache/sis/filter/ComparisonFilter.java    |   3 +-
 .../org/apache/sis/filter/ConvertFunction.java     |   4 +-
 .../java/org/apache/sis/filter/DistanceFilter.java |   7 +-
 .../org/apache/sis/filter/IdentifierFilter.java    |   9 +-
 .../java/org/apache/sis/filter/LeafExpression.java |   3 +-
 .../java/org/apache/sis/filter/LikeFilter.java     |   7 +-
 .../java/org/apache/sis/filter/LogicalFilter.java  |   5 +-
 .../java/org/apache/sis/filter/Optimization.java   |   5 +-
 .../java/org/apache/sis/filter/PropertyValue.java  |   4 +-
 .../java/org/apache/sis/filter/UnaryFunction.java  |   3 +-
 .../java/org/apache/sis/image/BandSelectImage.java |   3 +-
 .../java/org/apache/sis/image/ComputedImage.java   |   2 +-
 .../java/org/apache/sis/image/ImageCombiner.java   |   5 +-
 .../java/org/apache/sis/image/PlanarImage.java     |  15 +-
 .../sis/image/PositionalConsistencyImage.java      |   3 +-
 .../org/apache/sis/image/SourceAlignedImage.java   |   3 +-
 .../main/java/org/apache/sis/image/TileCache.java  |   3 +-
 .../org/apache/sis/index/tree/PointTreeNode.java   |   2 +-
 .../org/apache/sis/index/tree/QuadTreeNode.java    |   4 +-
 .../internal/coverage/j2d/BatchComputedImage.java  |   4 +-
 .../internal/coverage/j2d/ColorModelFactory.java   |  31 +-
 .../sis/internal/coverage/j2d/ColorModelPatch.java | 121 -------
 .../internal/coverage/j2d/DeferredProperty.java    |   4 +-
 .../sis/internal/coverage/j2d/ImageUtilities.java  |   2 +-
 .../coverage/j2d/MultiBandsIndexColorModel.java    |  43 ++-
 .../sis/internal/coverage/j2d/TiledImage.java      |   4 +-
 .../sis/internal/coverage/j2d/package-info.java    |   2 +-
 .../sis/internal/feature/AttributeConvention.java  |  30 +-
 .../sis/internal/feature/GeometryFactories.java    |   3 +-
 .../sis/internal/feature/MovingFeatures.java       |   7 +-
 .../internal/feature/SpatialOperationContext.java  |   5 +-
 .../apache/sis/internal/feature/j2d/Factory.java   |   4 +-
 .../sis/internal/feature/j2d/PathBuilder.java      |   2 +-
 .../apache/sis/internal/feature/j2d/Wrapper.java   |   4 +-
 .../internal/feature/jts/PathIteratorAdapter.java  |   6 +-
 .../sis/internal/feature/jts/ShapeConverter.java   |   5 +-
 .../sis/internal/filter/GeometryConverter.java     |   3 +-
 .../java/org/apache/sis/internal/filter/Node.java  |   1 +
 .../sis/internal/filter/SortByComparator.java      |   2 +-
 .../internal/filter/sqlmm/GeometryConstructor.java |   7 +-
 .../sis/internal/filter/sqlmm/OneGeometry.java     |   7 +-
 .../apache/sis/internal/filter/sqlmm/Registry.java |   4 +-
 .../sis/internal/filter/sqlmm/ST_Transform.java    |   3 +-
 .../sis/internal/filter/sqlmm/TwoGeometries.java   |   7 +-
 .../internal/processing/image/TiledProcess.java    |   3 +-
 .../coverage/grid/BufferedGridCoverageTest.java    |   5 +-
 .../coverage/grid/ConvertedGridCoverageTest.java   |  10 +-
 .../sis/coverage/grid/GridCoverage2DTest.java      |   7 +-
 .../sis/coverage/grid/GridDerivationTest.java      |   8 +-
 .../apache/sis/coverage/grid/GridExtentTest.java   |   4 +-
 .../apache/sis/feature/AbstractOperationTest.java  |   4 +-
 .../sis/feature/CharacteristicTypeMapTest.java     |  15 +-
 .../org/apache/sis/feature/CustomAttribute.java    |   7 +-
 .../sis/feature/DefaultAssociationRoleTest.java    |  17 +-
 .../sis/feature/DefaultAttributeTypeTest.java      |   5 +-
 .../apache/sis/feature/DefaultFeatureTypeTest.java |   3 +-
 .../org/apache/sis/feature/FeatureFormatTest.java  |   7 +-
 .../apache/sis/feature/FeatureMemoryBenchmark.java |  11 +-
 .../apache/sis/feature/FeatureOperationsTest.java  |   7 +-
 .../org/apache/sis/feature/FeatureTestCase.java    |  20 +-
 .../org/apache/sis/feature/LinkOperationTest.java  |   6 +-
 .../apache/sis/feature/PropertySingletonTest.java  |   8 +-
 .../sis/feature/SingletonAssociationTest.java      |  15 +-
 .../sis/feature/StringJoinOperationTest.java       |   3 +-
 .../feature/builder/AttributeTypeBuilderTest.java  |  13 +-
 .../builder/CharacteristicTypeBuilderTest.java     |   6 +-
 .../feature/builder/FeatureTypeBuilderTest.java    |   4 +-
 .../org/apache/sis/filter/LogicalFilterTest.java   |   8 +-
 .../sis/internal/coverage/j2d/ColorizerTest.java   |   4 +-
 .../internal/feature/AttributeConventionTest.java  |  19 +-
 .../sis/internal/feature/GeometriesTestCase.java   |   8 +-
 .../apache/sis/internal/feature/jts/JTSTest.java   |   4 +-
 .../internal/filter/sqlmm/RegistryTestCase.java    |   6 +-
 core/sis-metadata/pom.xml                          |   5 +
 .../sis/internal/jaxb/IdentifierMapAdapter.java    |   8 +-
 .../sis/internal/jaxb/NonMarshalledAuthority.java  |   5 +-
 .../apache/sis/internal/jaxb/TypeRegistration.java |   7 +-
 .../internal/jaxb/metadata/replace/SensorType.java |   2 +-
 .../apache/sis/internal/metadata/ExcludedSet.java  |   2 -
 .../apache/sis/internal/metadata/NameMeaning.java  |  27 +-
 .../sis/internal/metadata/RecordSchemaSIS.java     |   5 +-
 .../internal/metadata/TransformationAccuracy.java  |   6 +-
 .../sis/internal/xml/StreamWriterDelegate.java     |   2 +-
 .../java/org/apache/sis/metadata/TreeNode.java     |   4 +-
 .../iso/DefaultExtendedElementInformation.java     |  16 +-
 .../apache/sis/metadata/iso/DefaultMetadata.java   |  50 +--
 .../sis/metadata/iso/citation/DefaultCitation.java |   6 +-
 .../sis/metadata/iso/citation/DefaultContact.java  |  12 +-
 .../iso/citation/DefaultResponsibleParty.java      |  16 +-
 .../metadata/iso/citation/DefaultTelephone.java    |  10 +-
 .../iso/constraint/DefaultReleasability.java       |  26 +-
 .../sis/metadata/iso/constraint/package-info.java  |   2 +-
 .../iso/content/DefaultCoverageDescription.java    |   8 +-
 .../DefaultFeatureCatalogueDescription.java        |   8 +-
 .../iso/content/DefaultRangeDimension.java         |   4 +-
 .../metadata/iso/distribution/DefaultDataFile.java |   6 +-
 .../DefaultDigitalTransferOptions.java             |   4 +-
 .../metadata/iso/distribution/DefaultFormat.java   |  12 +-
 .../metadata/iso/distribution/DefaultMedium.java   |   4 +-
 .../distribution/DefaultStandardOrderProcess.java  |  24 --
 .../iso/identification/AbstractIdentification.java |   4 +-
 .../DefaultAggregateInformation.java               |   8 +-
 .../identification/DefaultDataIdentification.java  |   8 +-
 .../metadata/iso/lineage/DefaultProcessStep.java   |   4 +-
 .../sis/metadata/iso/lineage/DefaultSource.java    |   8 +-
 .../maintenance/DefaultMaintenanceInformation.java |  12 +-
 .../sis/metadata/iso/quality/AbstractElement.java  |  28 +-
 .../iso/quality/AbstractTemporalAccuracy.java      |   2 +-
 .../iso/quality/DefaultCoverageResult.java         |   6 +-
 .../metadata/iso/quality/DefaultDataQuality.java   |   6 +-
 .../DefaultNonQuantitativeAttributeAccuracy.java   |   2 +-
 .../iso/quality/DefaultQuantitativeResult.java     |   6 +-
 .../sis/metadata/iso/quality/DefaultScope.java     |   2 +-
 .../sis/metadata/iso/quality/DefaultUsability.java |   2 +-
 .../apache/sis/metadata/sql/MetadataWriter.java    |   5 +-
 .../org/apache/sis/util/iso/DefaultLocalName.java  |   3 +-
 .../apache/sis/util/iso/DefaultNameFactory.java    |   2 +-
 .../org/apache/sis/util/iso/DefaultRecord.java     |   3 +-
 .../org/apache/sis/util/iso/DefaultRecordType.java |   2 +-
 .../org/apache/sis/util/iso/DefaultTypeName.java   |  17 +-
 .../main/java/org/apache/sis/util/iso/Names.java   |   4 +-
 .../java/org/apache/sis/util/iso/package-info.java |   2 +-
 .../java/org/apache/sis/xml/Implementation.java    |  55 +---
 .../java/org/apache/sis/xml/MarshalContext.java    |   2 +-
 .../java/org/apache/sis/xml/MarshallerPool.java    |   4 +-
 .../main/java/org/apache/sis/xml/Namespaces.java   |  71 ++--
 .../src/main/java/org/apache/sis/xml/Pooled.java   |  50 +--
 .../java/org/apache/sis/xml/PooledTemplate.java    |   7 +-
 .../main/java/org/apache/sis/xml/Transformer.java  |  19 +-
 .../org/apache/sis/xml/TransformingReader.java     |   6 +-
 .../org/apache/sis/xml/TransformingWriter.java     |  11 +-
 .../src/main/java/org/apache/sis/xml/XML.java      |  15 +-
 .../main/java/org/apache/sis/xml/package-info.java |   2 +-
 .../internal/jaxb/cat/CodeListMarshallingTest.java |   8 +-
 .../sis/internal/jaxb/cat/EnumMarshallingTest.java |   4 +-
 .../sis/internal/jaxb/gco/MultiplicityTest.java    |   4 +-
 .../metadata/ImplementationHelperTest.java         |   5 +-
 .../apache/sis/internal/metadata/MergerTest.java   |  17 +-
 .../java/org/apache/sis/metadata/HashCodeTest.java |   8 +-
 .../apache/sis/metadata/InformationMapTest.java    |   6 +-
 .../apache/sis/metadata/MetadataStandardTest.java  |   5 +-
 .../sis/metadata/ModifiableMetadataTest.java       |   8 +-
 .../apache/sis/metadata/PropertyAccessorTest.java  |  11 +-
 .../java/org/apache/sis/metadata/PrunerTest.java   |  12 +-
 .../java/org/apache/sis/metadata/TreeNodeTest.java |  10 +-
 .../apache/sis/metadata/TreeTableFormatTest.java   |  19 +-
 .../java/org/apache/sis/metadata/ValueMapTest.java |  64 ++--
 .../sis/metadata/iso/CustomMetadataTest.java       |   4 +-
 .../sis/metadata/iso/citation/CitationsTest.java   |   3 +-
 .../metadata/iso/citation/DefaultCitationTest.java |  24 +-
 .../metadata/iso/citation/DefaultContactTest.java  |   8 +-
 .../iso/citation/DefaultResponsibilityTest.java    |   6 +-
 .../constraint/DefaultLegalConstraintsTest.java    |   4 +-
 .../sis/metadata/iso/extent/DefaultExtentTest.java |   4 +-
 .../identification/DefaultBrowseGraphicTest.java   |   7 +-
 .../identification/DefaultCoupledResourceTest.java |  12 +-
 .../DefaultDataIdentificationTest.java             |  16 +-
 .../DefaultServiceIdentificationTest.java          |  10 +-
 .../metadata/iso/quality/AbstractElementTest.java  |   4 +-
 .../iso/quality/DefaultDomainConsistencyTest.java  |   7 +-
 .../iso/quality/DefaultQuantitativeResultTest.java |  11 +-
 .../sis/metadata/sql/MetadataFallbackVerifier.java |   4 +-
 .../sis/metadata/sql/MetadataSourceTest.java       |   3 +-
 .../sis/metadata/sql/MetadataWriterTest.java       |   4 +-
 .../java/org/apache/sis/test/MetadataAssert.java   |   3 +-
 .../org/apache/sis/test/mock/MetadataMock.java     |   4 +-
 .../apache/sis/test/xml/DocumentComparator.java    |  26 +-
 .../apache/sis/util/iso/DefaultRecordTypeTest.java |   4 +-
 .../apache/sis/util/iso/DefaultScopedNameTest.java |   7 +-
 .../apache/sis/util/iso/NameMarshallingTest.java   |   4 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |   3 +-
 .../org/apache/sis/xml/MarshallerPoolTest.java     |   4 -
 .../apache/sis/xml/TransformingNamespacesTest.java |   9 +-
 .../org/apache/sis/xml/XLinkMarshallingTest.java   |   6 +-
 .../coverage/MultiResolutionCoverageLoader.java    |   5 +-
 .../main/java/org/apache/sis/portrayal/Canvas.java |   2 +-
 .../MultiResolutionCoverageLoaderTest.java         |  13 +-
 core/sis-referencing-by-identifiers/pom.xml        |   5 +
 .../referencing/gazetteer/FinalLocationType.java   |   8 +-
 .../referencing/gazetteer/GazetteerFactory.java    |   4 +-
 .../gazetteer/MilitaryGridReferenceSystem.java     |   3 +-
 .../referencing/gazetteer/LocationTypeTest.java    |   4 +-
 core/sis-referencing/pom.xml                       |   5 +
 .../org/apache/sis/geometry/CoordinateFormat.java  |   3 +-
 .../java/org/apache/sis/geometry/Envelopes.java    |   2 +-
 .../apache/sis/geometry/WraparoundAdjustment.java  |   6 +-
 .../referencing/CC_GeneralOperationParameter.java  |   5 +-
 .../jaxb/referencing/CC_OperationMethod.java       |   5 +-
 .../referencing/CC_OperationParameterGroup.java    |   2 +-
 .../sis/internal/referencing/AxisDirections.java   |  22 +-
 .../internal/referencing/CoordinateOperations.java |  11 +-
 .../referencing/GeodeticObjectBuilder.java         |   8 +-
 .../apache/sis/internal/referencing/Legacy.java    |  10 +-
 .../referencing/PositionalAccuracyConstant.java    |   4 +-
 .../internal/referencing/ReferencingUtilities.java |   4 +-
 .../internal/referencing/j2d/TileOrganizer.java    |   2 +-
 .../sis/internal/referencing/provider/Affine.java  |   8 +-
 .../provider/DatumShiftGridCompressed.java         |   4 +-
 .../referencing/provider/DatumShiftGridFile.java   |   2 +-
 .../provider/FranceGeocentricInterpolation.java    |   6 +-
 .../referencing/provider/GeodeticOperation.java    |   2 +-
 .../referencing/provider/MapProjection.java        |   4 +-
 .../referencing/provider/MapProjection3D.java      |   6 +-
 .../internal/referencing/provider/Molodensky.java  |   3 +-
 .../sis/internal/referencing/provider/NTv2.java    |   2 +-
 .../provider/PolarStereographicNorth.java          |   3 +-
 .../main/java/org/apache/sis/io/wkt/Element.java   |   5 +-
 .../main/java/org/apache/sis/io/wkt/Formatter.java |   5 +-
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |   8 +-
 .../org/apache/sis/io/wkt/MathTransformParser.java |   3 +-
 .../org/apache/sis/io/wkt/SingletonElement.java    |   2 +-
 .../java/org/apache/sis/io/wkt/Transliterator.java |  23 +-
 .../java/org/apache/sis/io/wkt/VerticalInfo.java   |   3 +-
 .../java/org/apache/sis/io/wkt/WKTDictionary.java  |  12 +-
 .../main/java/org/apache/sis/io/wkt/WKTFormat.java |   3 +-
 .../parameter/DefaultParameterDescriptorGroup.java |  13 +-
 .../sis/parameter/DefaultParameterValueGroup.java  |   3 +-
 .../sis/parameter/MapProjectionParameters.java     |  13 +-
 .../org/apache/sis/parameter/ParameterFormat.java  |   3 +-
 .../org/apache/sis/parameter/TensorParameters.java |   5 +-
 .../sis/referencing/AbstractIdentifiedObject.java  |   2 +-
 .../java/org/apache/sis/referencing/Builder.java   |   4 +-
 .../main/java/org/apache/sis/referencing/CRS.java  |  29 +-
 .../java/org/apache/sis/referencing/CommonCRS.java |   5 +-
 .../sis/referencing/EPSGFactoryFallback.java       |   3 +-
 .../sis/referencing/crs/DefaultCompoundCRS.java    |  14 +-
 .../cs/DefaultCoordinateSystemAxis.java            |  27 +-
 .../org/apache/sis/referencing/cs/Normalizer.java  |   3 +-
 .../sis/referencing/datum/DatumShiftGrid.java      |   4 +-
 .../org/apache/sis/referencing/datum/formulas.html |   2 +-
 .../referencing/factory/AuthorityFactoryProxy.java |  31 +-
 .../sis/referencing/factory/CacheRecord.java       |   2 +-
 .../factory/CommonAuthorityFactory.java            |   4 +-
 .../factory/GeodeticAuthorityFactory.java          |   5 +-
 .../referencing/factory/GeodeticObjectFactory.java |  12 +-
 .../factory/IdentifiedObjectFinder.java            |   5 +-
 .../referencing/factory/IdentifiedObjectSet.java   |   2 +-
 .../factory/MultiAuthoritiesFactory.java           |   6 +-
 .../referencing/factory/sql/EPSGCodeFinder.java    |  15 +-
 .../referencing/factory/sql/EPSGDataAccess.java    |  13 +-
 .../sis/referencing/factory/sql/EPSGFactory.java   |   5 +-
 .../factory/sql/InstallationScriptProvider.java    |   3 +-
 .../operation/AbstractCoordinateOperation.java     |   5 +-
 .../operation/AbstractSingleOperation.java         |   2 +-
 .../operation/CoordinateOperationFinder.java       |   2 +-
 .../operation/CoordinateOperationRegistry.java     |   5 +-
 .../operation/DefaultConcatenatedOperation.java    |  10 +-
 .../DefaultCoordinateOperationFactory.java         |  14 +-
 .../operation/DefaultOperationMethod.java          |  20 +-
 .../operation/InverseOperationMethod.java          |   2 +-
 .../operation/builder/LinearTransformBuilder.java  |   2 +-
 .../operation/builder/ResidualGrid.java            |   5 +-
 .../sis/referencing/operation/matrix/Matrices.java |   2 +-
 .../transform/CoordinateSystemTransform.java       |   3 +-
 .../transform/DefaultMathTransformFactory.java     |  46 +--
 .../transform/EllipsoidToCentricTransform.java     |   5 +-
 .../operation/transform/MathTransformProvider.java |   2 +-
 .../operation/transform/MathTransforms.java        |   5 +-
 .../operation/transform/PoleRotation.java          |   6 +-
 .../transform/SpecializableTransform.java          |   7 +-
 .../referencing/operation/transform/formulas.html  |   2 +-
 .../operation/transform/package-info.java          |   2 +-
 .../org/apache/sis/referencing/package-info.java   |   2 +-
 .../org/apache/sis/geometry/EnvelopesTest.java     |   4 +-
 .../CC_OperationParameterGroupTest.java            |   9 +-
 .../sis/internal/jaxb/referencing/CodeTest.java    |   6 +-
 .../referencing/SecondDefiningParameterTest.java   |  16 +-
 .../referencing/EllipsoidalHeightCombinerTest.java |   7 +-
 .../sis/internal/referencing/FormulasTest.java     |   7 +-
 .../sis/internal/referencing/WKTKeywordsTest.java  |   5 +-
 .../sis/io/wkt/GeodeticObjectParserTest.java       |   4 +-
 .../org/apache/sis/io/wkt/WKTDictionaryTest.java   |  12 +-
 .../java/org/apache/sis/io/wkt/WKTFormatTest.java  |   7 +-
 .../DefaultParameterDescriptorGroupTest.java       |   9 +-
 .../parameter/DefaultParameterValueGroupTest.java  |  16 +-
 .../sis/parameter/DefaultParameterValueTest.java   |   4 +-
 .../sis/parameter/MapProjectionParametersTest.java |   3 +-
 .../apache/sis/parameter/ParameterFormatTest.java  |   2 +-
 .../sis/parameter/ParameterMarshallingTest.java    |   7 +-
 .../org/apache/sis/parameter/ParametersTest.java   |   6 +-
 .../apache/sis/parameter/TensorParametersTest.java |   3 +-
 .../org/apache/sis/parameter/TensorValuesTest.java |  10 +-
 .../referencing/AbstractIdentifiedObjectTest.java  |  11 +-
 .../sis/referencing/EPSGFactoryFallbackTest.java   |  24 +-
 .../sis/referencing/crs/AbstractCRSTest.java       |  10 +-
 .../referencing/crs/DefaultCompoundCRSTest.java    |  23 +-
 .../sis/referencing/crs/DefaultDerivedCRSTest.java |   4 +-
 .../referencing/crs/DefaultEngineeringCRSTest.java |  10 +-
 .../sis/referencing/crs/DefaultImageCRSTest.java   |  10 +-
 .../referencing/crs/DefaultTemporalCRSTest.java    |   6 +-
 .../apache/sis/referencing/crs/HardCodedCRS.java   |  11 +-
 .../apache/sis/referencing/cs/AbstractCSTest.java  |  18 +-
 .../sis/referencing/cs/CoordinateSystemsTest.java  |  16 +-
 .../sis/referencing/cs/DefaultCartesianCSTest.java |   9 +-
 .../sis/referencing/cs/DefaultCompoundCSTest.java  |   5 +-
 .../cs/DefaultCoordinateSystemAxisTest.java        |   4 +-
 .../referencing/cs/DefaultCylindricalCSTest.java   |   4 +-
 .../sis/referencing/cs/DefaultPolarCSTest.java     |   4 +-
 .../sis/referencing/cs/DefaultSphericalCSTest.java |   4 +-
 .../org/apache/sis/referencing/cs/HardCodedCS.java |  31 +-
 .../apache/sis/referencing/cs/NormalizerTest.java  |   8 +-
 .../datum/DefaultPrimeMeridianTest.java            |   5 +-
 .../datum/DefaultVerticalDatumTest.java            |  11 +-
 .../factory/CommonAuthorityFactoryTest.java        |  18 +-
 .../factory/IdentifiedObjectFinderTest.java        |   4 +-
 .../factory/MultiAuthoritiesFactoryTest.java       |  30 +-
 .../factory/sql/epsg/DataScriptFormatter.java      |   3 +-
 .../operation/CoordinateOperationFinderTest.java   |  11 +-
 .../DefaultConcatenatedOperationTest.java          |  12 +-
 .../operation/DefaultConversionTest.java           |  13 +-
 .../operation/HardCodedConversions.java            |  12 +-
 .../builder/LinearTransformBuilderTest.java        |   7 +-
 .../sis/referencing/operation/projection/NoOp.java |   6 +-
 .../projection/SatelliteTrackingTest.java          |   4 +-
 .../operation/transform/CoordinateDomain.java      |   2 +-
 .../transform/DefaultMathTransformFactoryTest.java |   3 +-
 .../transform/MathTransformFactoryBase.java        |   3 +-
 .../transform/MathTransformFactoryMock.java        |   3 +-
 .../transform/OperationMethodSetTest.java          |  10 +-
 .../operation/transform/SinusoidalShiftGrid.java   |   4 +-
 .../transform/WraparoundTransformTest.java         |  10 +-
 .../report/CoordinateOperationMethods.java         |   2 +-
 .../sis/test/integration/ConsistencyTest.java      |   7 +-
 .../apache/sis/test/integration/MetadataTest.java  |  90 +++--
 core/sis-utility/pom.xml                           |  16 -
 .../sis/internal/converter/SystemRegistry.java     |   7 +-
 .../sis/internal/converter/package-info.java       |   7 +-
 .../sis/internal/{jdk9 => jdk17}/HexFormat.java    |   2 +-
 .../java/org/apache/sis/internal/jdk17/JDK17.java  |  72 ++++
 .../sis/internal/{jdk9 => jdk17}/package-info.java |   6 +-
 .../java/org/apache/sis/internal/jdk9/JDK9.java    | 366 ---------------------
 .../sis/internal/system/DefaultFactories.java      |  76 +++--
 .../apache/sis/internal/system/SystemListener.java |   3 +-
 .../apache/sis/internal/system/package-info.java   |   2 +-
 .../java/org/apache/sis/internal/util/Cloner.java  |   8 +-
 .../apache/sis/internal/util/CollectionsExt.java   | 232 ++++---------
 .../apache/sis/internal/util/DefinitionURI.java    |  13 +-
 .../apache/sis/internal/util/FinalFieldSetter.java |   6 +-
 .../org/apache/sis/internal/util/Numerics.java     |  16 +-
 .../org/apache/sis/internal/util/package-info.java |   2 +-
 .../main/java/org/apache/sis/math/ArrayVector.java |  13 +-
 .../main/java/org/apache/sis/math/Fraction.java    |  17 +-
 .../org/apache/sis/math/LinearlyDerivedVector.java |   8 +-
 .../java/org/apache/sis/math/MathFunctions.java    |   2 +-
 .../java/org/apache/sis/math/SequenceVector.java   |   5 +-
 .../java/org/apache/sis/math/StatisticsFormat.java |   2 +-
 .../src/main/java/org/apache/sis/math/Vector.java  |  41 +--
 .../org/apache/sis/measure/AbstractConverter.java  |   3 +-
 .../java/org/apache/sis/measure/UnitDimension.java |  23 +-
 .../java/org/apache/sis/measure/UnitFormat.java    |  10 +-
 .../src/main/java/org/apache/sis/setup/About.java  |   3 +-
 .../java/org/apache/sis/setup/GeometryLibrary.java |   2 -
 .../main/java/org/apache/sis/setup/OptionKey.java  |   2 +-
 .../apache/sis/setup/OptionalInstallations.java    |   3 +-
 .../java/org/apache/sis/util/CharSequences.java    |   4 +-
 .../src/main/java/org/apache/sis/util/Classes.java |   4 +-
 .../sis/util/DefaultInternationalString.java       |  10 +-
 .../src/main/java/org/apache/sis/util/Locales.java |   2 +-
 .../sis/util/collection/BackingStoreException.java |   2 +-
 .../sis/util/collection/DefaultTreeTable.java      |  20 +-
 .../sis/util/collection/FrequencySortedSet.java    |   3 +-
 .../apache/sis/util/collection/IntegerList.java    |   9 +-
 .../apache/sis/util/collection/TableColumn.java    |   3 +-
 .../sis/util/collection/TreeTableFormat.java       |   4 +-
 .../java/org/apache/sis/util/logging/Logging.java  |  86 ++---
 .../apache/sis/util/logging/PerformanceLevel.java  |   8 +-
 .../org/apache/sis/util/logging/package-info.java  |   2 +-
 .../java/org/apache/sis/util/resources/Loader.java |   3 +-
 .../apache/sis/internal/util/AbstractMapTest.java  |   3 +-
 .../sis/internal/util/CheckedArrayListTest.java    |   6 +-
 .../sis/internal/util/CollectionsExtTest.java      |  27 +-
 .../org/apache/sis/internal/util/NumericsTest.java |  35 +-
 .../org/apache/sis/measure/SystemUnitTest.java     |   9 +-
 .../org/apache/sis/measure/UnitDimensionTest.java  |   3 +-
 .../org/apache/sis/measure/UnitServicesTest.java   |   4 +-
 .../org/apache/sis/test/ProjectDirectories.java    |   3 +-
 .../test/java/org/apache/sis/test/TestRunner.java  |   3 +-
 .../org/apache/sis/util/collection/CacheTest.java  |  10 +-
 .../sis/util/collection/CodeListSetTest.java       |   2 +-
 .../apache/sis/util/collection/DerivedSetTest.java |  10 +-
 .../util/collection/FrequencySortedSetTest.java    |   3 +-
 .../sis/util/collection/IntegerListTest.java       |   5 +-
 .../apache/sis/util/collection/LargeCodeList.java  |   2 +-
 ide-project/NetBeans/nbproject/build-impl.xml      |  25 +-
 ide-project/NetBeans/nbproject/genfiles.properties |   6 +-
 ide-project/NetBeans/nbproject/project.properties  |  17 +-
 ide-project/NetBeans/nbproject/project.xml         |   1 -
 pom.xml                                            |  28 +-
 .../profile/fra/DirectReferenceSystemTest.java     |   6 +-
 .../apache/sis/internal/earth/netcdf/GCOM_C.java   |  33 +-
 .../apache/sis/internal/earth/netcdf/GCOM_W.java   |  32 +-
 src/main/javadoc/overview.html                     |   2 +-
 storage/pom.xml                                    |   5 +
 .../storage/inflater/CompressionChannel.java       |   3 +-
 .../internal/storage/inflater/CopyFromBytes.java   |   8 +-
 .../storage/inflater/HorizontalPredictor.java      |   4 +-
 .../storage/inflater/PredictorChannel.java         |   4 +-
 .../apache/sis/internal/storage/inflater/ZIP.java  |  31 +-
 .../internal/storage/inflater/package-info.java    |   2 +-
 .../org/apache/sis/storage/geotiff/CRSBuilder.java |   7 +-
 .../sis/storage/geotiff/CompressedSubset.java      |   2 +-
 .../org/apache/sis/storage/geotiff/DataSubset.java |   2 +-
 .../apache/sis/storage/geotiff/Localization.java   |   2 +-
 .../sis/storage/geotiff/MultiResolutionImage.java  |   2 +-
 .../sis/storage/geotiff/ReversedBitsChannel.java   |   2 +-
 .../apache/sis/storage/geotiff/XMLMetadata.java    |   4 +-
 .../java/org/apache/sis/internal/netcdf/Axis.java  |   2 +-
 .../org/apache/sis/internal/netcdf/CRSBuilder.java |   3 +-
 .../org/apache/sis/internal/netcdf/Convention.java |   5 +-
 .../org/apache/sis/internal/netcdf/FeatureSet.java |   2 +-
 .../apache/sis/internal/netcdf/GridMapping.java    |   3 +-
 .../apache/sis/internal/netcdf/RasterResource.java |   5 +-
 .../org/apache/sis/internal/netcdf/Variable.java   |   2 +-
 .../sis/internal/netcdf/impl/ChannelDecoder.java   |  10 +-
 .../sis/internal/netcdf/impl/VariableInfo.java     |   3 +-
 .../sis/internal/netcdf/ucar/DecoderWrapper.java   |   6 +-
 .../sis/internal/netcdf/ucar/VariableWrapper.java  |   4 +-
 .../apache/sis/storage/netcdf/MetadataReader.java  |  16 +-
 .../org/apache/sis/storage/netcdf/NetcdfStore.java |   2 +-
 storage/sis-sqlstore/pom.xml                       |   5 +
 .../apache/sis/internal/sql/feature/Analyzer.java  |   3 +-
 .../sis/internal/sql/feature/BinaryEncoding.java   |   2 +-
 .../apache/sis/internal/sql/feature/Database.java  |   4 +-
 .../sis/internal/sql/feature/PrimaryKey.java       |   5 +-
 .../sis/internal/sql/feature/QueryAnalyzer.java    |   2 +-
 .../sis/internal/sql/feature/TableAnalyzer.java    |   2 +-
 .../sis/internal/sql/postgis/RasterReader.java     |   3 +-
 .../apache/sis/storage/sql/ResourceDefinition.java |   6 +-
 .../sis/internal/storage/StoreUtilities.java       |   3 +-
 .../sis/internal/storage/TiledGridCoverage.java    |   2 +-
 .../org/apache/sis/internal/storage/csv/Store.java |   5 +-
 .../sis/internal/storage/esri/CharactersView.java  |   6 +-
 .../sis/internal/storage/esri/RawRasterReader.java |   2 +-
 .../apache/sis/internal/storage/folder/Store.java  |   5 +-
 .../apache/sis/internal/storage/io/ByteWriter.java |   5 +-
 .../sis/internal/storage/io/ChannelFactory.java    |   3 +-
 .../sis/internal/storage/wkt/FirstKeywordPeek.java |   2 +-
 .../sis/internal/storage/xml/AbstractProvider.java |  45 ++-
 .../org/apache/sis/internal/storage/xml/Store.java |   3 +-
 .../sis/internal/storage/xml/StoreProvider.java    |  19 +-
 .../sis/internal/storage/xml/package-info.java     |   2 +-
 .../sis/storage/AbstractGridCoverageResource.java  |   3 +-
 .../java/org/apache/sis/storage/FeatureNaming.java |   6 +-
 .../apache/sis/storage/GridCoverageResource.java   |   5 +-
 .../org/apache/sis/storage/StorageConnector.java   |   7 +-
 .../storage/aggregate/AggregatedFeatureSet.java    |   4 +-
 .../aggregate/ConcatenatedGridResource.java        |   3 +-
 .../sis/storage/aggregate/GroupBySample.java       |   2 +-
 .../sis/storage/aggregate/JoinFeatureSet.java      |  13 +-
 .../apache/sis/storage/event/StoreListeners.java   |  53 +--
 .../org/apache/sis/storage/event/package-info.java |   2 +-
 .../sis/internal/storage/MetadataBuilderTest.java  |   7 +-
 .../apache/sis/internal/storage/csv/StoreTest.java |  26 +-
 .../sis/internal/storage/folder/StoreTest.java     |   6 +-
 .../internal/storage/xml/MimeTypeDetectorTest.java |  11 +-
 .../org/apache/sis/storage/GridResourceMock.java   |   3 +-
 .../aggregate/ConcatenatedFeatureSetTest.java      |  17 +-
 .../sis/storage/aggregate/JoinFeatureSetTest.java  |   6 +-
 .../sis/test/storage/CoverageReadConsistency.java  |   2 +-
 .../apache/sis/internal/storage/gpx/Copyright.java |   4 +-
 .../storage/gpx/GroupAsPolylineOperation.java      |   6 +-
 .../apache/sis/internal/storage/gpx/Metadata.java  |   2 +-
 .../org/apache/sis/internal/storage/gpx/Store.java |   2 +-
 .../sis/internal/storage/gpx/StoreProvider.java    |  11 +-
 .../org/apache/sis/internal/storage/gpx/Types.java |   7 +-
 .../sis/internal/storage/gpx/WritableStore.java    |   2 +-
 .../sis/internal/storage/gpx/package-info.java     |   2 +-
 .../storage/xml/stream/FormattedWriter.java        |   6 +-
 .../storage/xml/stream/StaxDataStoreProvider.java  |  12 +-
 .../internal/storage/xml/stream/package-info.java  |   2 +-
 .../sis/internal/storage/gpx/MetadataTest.java     |  10 +-
 .../sis/internal/storage/gpx/UpdaterTest.java      |   6 +-
 .../sis/internal/storage/gpx/WriterTest.java       |  31 +-
 532 files changed, 2084 insertions(+), 3209 deletions(-)
 rename {core/sis-utility/src/main/java/org/apache/sis/internal/system => application/sis-webapp/src/main/java/org/apache/sis/services}/OSGiActivator.java (95%)
 rename {core/sis-utility/src/main/java/org/apache/sis/internal/system => application/sis-webapp/src/main/java/org/apache/sis/services}/ServletListener.java (95%)
 delete mode 100644 core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/ColorModelPatch.java
 rename core/sis-utility/src/main/java/org/apache/sis/internal/{jdk9 => jdk17}/HexFormat.java (98%)
 create mode 100644 core/sis-utility/src/main/java/org/apache/sis/internal/jdk17/JDK17.java
 rename core/sis-utility/src/main/java/org/apache/sis/internal/{jdk9 => jdk17}/package-info.java (90%)
 delete mode 100644 core/sis-utility/src/main/java/org/apache/sis/internal/jdk9/JDK9.java


[sis] 01/01: Merge branch 'geoapi-3.1'. This is the upgrade from Java 8 to Java 11.

Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sis.git

commit e7c5ccf5a900bf49cf045ad9a55c5cb36b8b2477
Merge: 217df02d3e f5bc633ac3
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Tue Dec 13 14:25:57 2022 +0100

    Merge branch 'geoapi-3.1'.
    This is the upgrade from Java 8 to Java 11.
    
    https://issues.apache.org/jira/browse/SIS-561

 README                                             |   2 +-
 application/sis-console/pom.xml                    |   5 +
 .../org/apache/sis/console/IdentifierCommand.java  |   1 +
 .../org/apache/sis/console/MetadataCommand.java    |   4 +-
 .../apache/sis/console/ResourcesDownloader.java    |   3 +-
 .../org/apache/sis/console/TransformCommand.java   |   3 +-
 application/sis-javafx/pom.xml                     |   5 +
 application/sis-javafx/src/main/artifact/README    |   6 +-
 application/sis-javafx/src/main/artifact/bin/sis   |   2 +-
 .../sis-javafx/src/main/artifact/bin/sis.bat       |   2 +-
 application/sis-javafx/src/main/artifact/bin/sisfx |   2 +-
 .../sis-javafx/src/main/artifact/bin/sisfx.bat     |   2 +-
 .../main/java/org/apache/sis/gui/DataViewer.java   |   3 +-
 .../main/java/org/apache/sis/gui/RecentFiles.java  |   4 +-
 .../apache/sis/gui/coverage/CoverageControls.java  |   4 +-
 .../apache/sis/gui/coverage/CoverageExplorer.java  |  24 +-
 .../apache/sis/gui/coverage/CoverageStyling.java   |   2 +-
 .../org/apache/sis/gui/coverage/package-info.java  |   2 +-
 .../apache/sis/gui/dataset/ExpandedFeature.java    |   8 +-
 .../org/apache/sis/gui/dataset/PathAction.java     |   3 +-
 .../java/org/apache/sis/gui/map/StatusBar.java     |  63 +---
 .../java/org/apache/sis/gui/map/package-info.java  |   2 +-
 .../sis/gui/metadata/StandardMetadataTree.java     |   6 +-
 .../apache/sis/gui/referencing/AuthorityCodes.java |   3 +-
 .../gui/referencing/PositionableProjection.java    |   2 +-
 .../gui/referencing/RecentReferenceSystems.java    |  20 +-
 .../apache/sis/gui/referencing/package-info.java   |   2 +-
 .../org/apache/sis/internal/gui/GUIUtilities.java  |   4 +-
 .../apache/sis/internal/gui/ImageConverter.java    |   5 +-
 .../org/apache/sis/internal/gui/RecentChoices.java |   4 +-
 .../apache/sis/internal/gui/GUIUtilitiesTest.java  |   7 +-
 application/sis-openoffice/pom.xml                 |   5 +
 application/sis-webapp/pom.xml                     |  10 +
 .../org/apache/sis/services}/OSGiActivator.java    |   7 +-
 .../org/apache/sis/services}/ServletListener.java  |   8 +-
 .../org/apache/sis/internal/book/Assembler.java    |  10 +-
 .../apache/sis/internal/book/CodeColorizer.java    |   7 +-
 .../org/apache/sis/internal/book/package-info.java |   4 +-
 .../org/apache/sis/coverage/SampleDimension.java   |   4 +-
 .../sis/coverage/grid/BufferedGridCoverage.java    |   3 +-
 .../sis/coverage/grid/GridCoordinatesView.java     |   5 +-
 .../org/apache/sis/coverage/grid/GridCoverage.java |   2 +-
 .../apache/sis/coverage/grid/GridCoverage2D.java   |   3 +-
 .../apache/sis/coverage/grid/GridDerivation.java   |   3 +-
 .../org/apache/sis/coverage/grid/GridExtent.java   |  42 +--
 .../apache/sis/coverage/grid/GridExtentCRS.java    |   3 +-
 .../org/apache/sis/coverage/grid/GridGeometry.java |  31 +-
 .../apache/sis/coverage/grid/ImageRenderer.java    |   3 +-
 .../apache/sis/coverage/grid/PixelTranslation.java |  23 +-
 .../org/apache/sis/coverage/grid/package-info.java |   2 +-
 .../org/apache/sis/feature/AbstractAttribute.java  |   4 +-
 .../org/apache/sis/feature/AbstractFeature.java    |   7 +-
 .../org/apache/sis/feature/DefaultFeatureType.java |   2 +-
 .../org/apache/sis/feature/FeatureOperations.java  |   2 +-
 .../java/org/apache/sis/feature/LinkOperation.java |   3 +-
 .../sis/feature/builder/FeatureTypeBuilder.java    |   9 +-
 .../org/apache/sis/filter/AssociationValue.java    |   6 +-
 .../java/org/apache/sis/filter/BinaryFunction.java |   3 +-
 .../apache/sis/filter/BinaryGeometryFilter.java    |   3 +-
 .../org/apache/sis/filter/ComparisonFilter.java    |   3 +-
 .../org/apache/sis/filter/ConvertFunction.java     |   4 +-
 .../java/org/apache/sis/filter/DistanceFilter.java |   7 +-
 .../org/apache/sis/filter/IdentifierFilter.java    |   9 +-
 .../java/org/apache/sis/filter/LeafExpression.java |   3 +-
 .../java/org/apache/sis/filter/LikeFilter.java     |   7 +-
 .../java/org/apache/sis/filter/LogicalFilter.java  |   5 +-
 .../java/org/apache/sis/filter/Optimization.java   |   5 +-
 .../java/org/apache/sis/filter/PropertyValue.java  |   4 +-
 .../java/org/apache/sis/filter/UnaryFunction.java  |   3 +-
 .../java/org/apache/sis/image/BandSelectImage.java |   3 +-
 .../java/org/apache/sis/image/ComputedImage.java   |   2 +-
 .../java/org/apache/sis/image/ImageCombiner.java   |   5 +-
 .../java/org/apache/sis/image/PlanarImage.java     |  15 +-
 .../sis/image/PositionalConsistencyImage.java      |   3 +-
 .../org/apache/sis/image/SourceAlignedImage.java   |   3 +-
 .../main/java/org/apache/sis/image/TileCache.java  |   3 +-
 .../org/apache/sis/index/tree/PointTreeNode.java   |   2 +-
 .../org/apache/sis/index/tree/QuadTreeNode.java    |   4 +-
 .../internal/coverage/j2d/BatchComputedImage.java  |   4 +-
 .../internal/coverage/j2d/ColorModelFactory.java   |  31 +-
 .../sis/internal/coverage/j2d/ColorModelPatch.java | 121 -------
 .../internal/coverage/j2d/DeferredProperty.java    |   4 +-
 .../sis/internal/coverage/j2d/ImageUtilities.java  |   2 +-
 .../coverage/j2d/MultiBandsIndexColorModel.java    |  43 ++-
 .../sis/internal/coverage/j2d/TiledImage.java      |   4 +-
 .../sis/internal/coverage/j2d/package-info.java    |   2 +-
 .../sis/internal/feature/AttributeConvention.java  |  30 +-
 .../sis/internal/feature/GeometryFactories.java    |   3 +-
 .../sis/internal/feature/MovingFeatures.java       |   7 +-
 .../internal/feature/SpatialOperationContext.java  |   5 +-
 .../apache/sis/internal/feature/j2d/Factory.java   |   4 +-
 .../sis/internal/feature/j2d/PathBuilder.java      |   2 +-
 .../apache/sis/internal/feature/j2d/Wrapper.java   |   4 +-
 .../internal/feature/jts/PathIteratorAdapter.java  |   6 +-
 .../sis/internal/feature/jts/ShapeConverter.java   |   5 +-
 .../sis/internal/filter/GeometryConverter.java     |   3 +-
 .../java/org/apache/sis/internal/filter/Node.java  |   1 +
 .../sis/internal/filter/SortByComparator.java      |   2 +-
 .../internal/filter/sqlmm/GeometryConstructor.java |   7 +-
 .../sis/internal/filter/sqlmm/OneGeometry.java     |   7 +-
 .../apache/sis/internal/filter/sqlmm/Registry.java |   4 +-
 .../sis/internal/filter/sqlmm/ST_Transform.java    |   3 +-
 .../sis/internal/filter/sqlmm/TwoGeometries.java   |   7 +-
 .../internal/processing/image/TiledProcess.java    |   3 +-
 .../coverage/grid/BufferedGridCoverageTest.java    |   5 +-
 .../coverage/grid/ConvertedGridCoverageTest.java   |  10 +-
 .../sis/coverage/grid/GridCoverage2DTest.java      |   7 +-
 .../sis/coverage/grid/GridDerivationTest.java      |   8 +-
 .../apache/sis/coverage/grid/GridExtentTest.java   |   4 +-
 .../apache/sis/feature/AbstractOperationTest.java  |   4 +-
 .../sis/feature/CharacteristicTypeMapTest.java     |  15 +-
 .../org/apache/sis/feature/CustomAttribute.java    |   7 +-
 .../sis/feature/DefaultAssociationRoleTest.java    |  17 +-
 .../sis/feature/DefaultAttributeTypeTest.java      |   5 +-
 .../apache/sis/feature/DefaultFeatureTypeTest.java |   3 +-
 .../org/apache/sis/feature/FeatureFormatTest.java  |   7 +-
 .../apache/sis/feature/FeatureMemoryBenchmark.java |  11 +-
 .../apache/sis/feature/FeatureOperationsTest.java  |   7 +-
 .../org/apache/sis/feature/FeatureTestCase.java    |  20 +-
 .../org/apache/sis/feature/LinkOperationTest.java  |   6 +-
 .../apache/sis/feature/PropertySingletonTest.java  |   8 +-
 .../sis/feature/SingletonAssociationTest.java      |  15 +-
 .../sis/feature/StringJoinOperationTest.java       |   3 +-
 .../feature/builder/AttributeTypeBuilderTest.java  |  13 +-
 .../builder/CharacteristicTypeBuilderTest.java     |   6 +-
 .../feature/builder/FeatureTypeBuilderTest.java    |   4 +-
 .../org/apache/sis/filter/LogicalFilterTest.java   |   8 +-
 .../sis/internal/coverage/j2d/ColorizerTest.java   |   4 +-
 .../internal/feature/AttributeConventionTest.java  |  19 +-
 .../sis/internal/feature/GeometriesTestCase.java   |   8 +-
 .../apache/sis/internal/feature/jts/JTSTest.java   |   4 +-
 .../internal/filter/sqlmm/RegistryTestCase.java    |   6 +-
 core/sis-metadata/pom.xml                          |   5 +
 .../sis/internal/jaxb/IdentifierMapAdapter.java    |   8 +-
 .../sis/internal/jaxb/NonMarshalledAuthority.java  |   5 +-
 .../apache/sis/internal/jaxb/TypeRegistration.java |   7 +-
 .../internal/jaxb/metadata/replace/SensorType.java |   2 +-
 .../apache/sis/internal/metadata/ExcludedSet.java  |   2 -
 .../apache/sis/internal/metadata/NameMeaning.java  |  27 +-
 .../sis/internal/metadata/RecordSchemaSIS.java     |   5 +-
 .../internal/metadata/TransformationAccuracy.java  |   6 +-
 .../sis/internal/xml/StreamWriterDelegate.java     |   2 +-
 .../java/org/apache/sis/metadata/TreeNode.java     |   4 +-
 .../iso/DefaultExtendedElementInformation.java     |  16 +-
 .../apache/sis/metadata/iso/DefaultMetadata.java   |  50 +--
 .../sis/metadata/iso/citation/DefaultCitation.java |   6 +-
 .../sis/metadata/iso/citation/DefaultContact.java  |  12 +-
 .../iso/citation/DefaultResponsibleParty.java      |  16 +-
 .../metadata/iso/citation/DefaultTelephone.java    |  10 +-
 .../iso/constraint/DefaultReleasability.java       |  26 +-
 .../sis/metadata/iso/constraint/package-info.java  |   2 +-
 .../iso/content/DefaultCoverageDescription.java    |   8 +-
 .../DefaultFeatureCatalogueDescription.java        |   8 +-
 .../iso/content/DefaultRangeDimension.java         |   4 +-
 .../metadata/iso/distribution/DefaultDataFile.java |   6 +-
 .../DefaultDigitalTransferOptions.java             |   4 +-
 .../metadata/iso/distribution/DefaultFormat.java   |  12 +-
 .../metadata/iso/distribution/DefaultMedium.java   |   4 +-
 .../distribution/DefaultStandardOrderProcess.java  |  24 --
 .../iso/identification/AbstractIdentification.java |   4 +-
 .../DefaultAggregateInformation.java               |   8 +-
 .../identification/DefaultDataIdentification.java  |   8 +-
 .../metadata/iso/lineage/DefaultProcessStep.java   |   4 +-
 .../sis/metadata/iso/lineage/DefaultSource.java    |   8 +-
 .../maintenance/DefaultMaintenanceInformation.java |  12 +-
 .../sis/metadata/iso/quality/AbstractElement.java  |  28 +-
 .../iso/quality/AbstractTemporalAccuracy.java      |   2 +-
 .../iso/quality/DefaultCoverageResult.java         |   6 +-
 .../metadata/iso/quality/DefaultDataQuality.java   |   6 +-
 .../DefaultNonQuantitativeAttributeAccuracy.java   |   2 +-
 .../iso/quality/DefaultQuantitativeResult.java     |   6 +-
 .../sis/metadata/iso/quality/DefaultScope.java     |   2 +-
 .../sis/metadata/iso/quality/DefaultUsability.java |   2 +-
 .../apache/sis/metadata/sql/MetadataWriter.java    |   5 +-
 .../org/apache/sis/util/iso/DefaultLocalName.java  |   3 +-
 .../apache/sis/util/iso/DefaultNameFactory.java    |   2 +-
 .../org/apache/sis/util/iso/DefaultRecord.java     |   3 +-
 .../org/apache/sis/util/iso/DefaultRecordType.java |   2 +-
 .../org/apache/sis/util/iso/DefaultTypeName.java   |  17 +-
 .../main/java/org/apache/sis/util/iso/Names.java   |   4 +-
 .../java/org/apache/sis/util/iso/package-info.java |   2 +-
 .../java/org/apache/sis/xml/Implementation.java    |  55 +---
 .../java/org/apache/sis/xml/MarshalContext.java    |   2 +-
 .../java/org/apache/sis/xml/MarshallerPool.java    |   4 +-
 .../main/java/org/apache/sis/xml/Namespaces.java   |  71 ++--
 .../src/main/java/org/apache/sis/xml/Pooled.java   |  50 +--
 .../java/org/apache/sis/xml/PooledTemplate.java    |   7 +-
 .../main/java/org/apache/sis/xml/Transformer.java  |  19 +-
 .../org/apache/sis/xml/TransformingReader.java     |   6 +-
 .../org/apache/sis/xml/TransformingWriter.java     |  11 +-
 .../src/main/java/org/apache/sis/xml/XML.java      |  15 +-
 .../main/java/org/apache/sis/xml/package-info.java |   2 +-
 .../internal/jaxb/cat/CodeListMarshallingTest.java |   8 +-
 .../sis/internal/jaxb/cat/EnumMarshallingTest.java |   4 +-
 .../sis/internal/jaxb/gco/MultiplicityTest.java    |   4 +-
 .../metadata/ImplementationHelperTest.java         |   5 +-
 .../apache/sis/internal/metadata/MergerTest.java   |  17 +-
 .../java/org/apache/sis/metadata/HashCodeTest.java |   8 +-
 .../apache/sis/metadata/InformationMapTest.java    |   6 +-
 .../apache/sis/metadata/MetadataStandardTest.java  |   5 +-
 .../sis/metadata/ModifiableMetadataTest.java       |   8 +-
 .../apache/sis/metadata/PropertyAccessorTest.java  |  11 +-
 .../java/org/apache/sis/metadata/PrunerTest.java   |  12 +-
 .../java/org/apache/sis/metadata/TreeNodeTest.java |  10 +-
 .../apache/sis/metadata/TreeTableFormatTest.java   |  19 +-
 .../java/org/apache/sis/metadata/ValueMapTest.java |  64 ++--
 .../sis/metadata/iso/CustomMetadataTest.java       |   4 +-
 .../sis/metadata/iso/citation/CitationsTest.java   |   3 +-
 .../metadata/iso/citation/DefaultCitationTest.java |  24 +-
 .../metadata/iso/citation/DefaultContactTest.java  |   8 +-
 .../iso/citation/DefaultResponsibilityTest.java    |   6 +-
 .../constraint/DefaultLegalConstraintsTest.java    |   4 +-
 .../sis/metadata/iso/extent/DefaultExtentTest.java |   4 +-
 .../identification/DefaultBrowseGraphicTest.java   |   7 +-
 .../identification/DefaultCoupledResourceTest.java |  12 +-
 .../DefaultDataIdentificationTest.java             |  16 +-
 .../DefaultServiceIdentificationTest.java          |  10 +-
 .../metadata/iso/quality/AbstractElementTest.java  |   4 +-
 .../iso/quality/DefaultDomainConsistencyTest.java  |   7 +-
 .../iso/quality/DefaultQuantitativeResultTest.java |  11 +-
 .../sis/metadata/sql/MetadataFallbackVerifier.java |   4 +-
 .../sis/metadata/sql/MetadataSourceTest.java       |   3 +-
 .../sis/metadata/sql/MetadataWriterTest.java       |   4 +-
 .../java/org/apache/sis/test/MetadataAssert.java   |   3 +-
 .../org/apache/sis/test/mock/MetadataMock.java     |   4 +-
 .../apache/sis/test/xml/DocumentComparator.java    |  26 +-
 .../apache/sis/util/iso/DefaultRecordTypeTest.java |   4 +-
 .../apache/sis/util/iso/DefaultScopedNameTest.java |   7 +-
 .../apache/sis/util/iso/NameMarshallingTest.java   |   4 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |   3 +-
 .../org/apache/sis/xml/MarshallerPoolTest.java     |   4 -
 .../apache/sis/xml/TransformingNamespacesTest.java |   9 +-
 .../org/apache/sis/xml/XLinkMarshallingTest.java   |   6 +-
 .../coverage/MultiResolutionCoverageLoader.java    |   5 +-
 .../main/java/org/apache/sis/portrayal/Canvas.java |   2 +-
 .../MultiResolutionCoverageLoaderTest.java         |  13 +-
 core/sis-referencing-by-identifiers/pom.xml        |   5 +
 .../referencing/gazetteer/FinalLocationType.java   |   8 +-
 .../referencing/gazetteer/GazetteerFactory.java    |   4 +-
 .../gazetteer/MilitaryGridReferenceSystem.java     |   3 +-
 .../referencing/gazetteer/LocationTypeTest.java    |   4 +-
 core/sis-referencing/pom.xml                       |   5 +
 .../org/apache/sis/geometry/CoordinateFormat.java  |   3 +-
 .../java/org/apache/sis/geometry/Envelopes.java    |   2 +-
 .../apache/sis/geometry/WraparoundAdjustment.java  |   6 +-
 .../referencing/CC_GeneralOperationParameter.java  |   5 +-
 .../jaxb/referencing/CC_OperationMethod.java       |   5 +-
 .../referencing/CC_OperationParameterGroup.java    |   2 +-
 .../sis/internal/referencing/AxisDirections.java   |  22 +-
 .../internal/referencing/CoordinateOperations.java |  11 +-
 .../referencing/GeodeticObjectBuilder.java         |   8 +-
 .../apache/sis/internal/referencing/Legacy.java    |  10 +-
 .../referencing/PositionalAccuracyConstant.java    |   4 +-
 .../internal/referencing/ReferencingUtilities.java |   4 +-
 .../internal/referencing/j2d/TileOrganizer.java    |   2 +-
 .../sis/internal/referencing/provider/Affine.java  |   8 +-
 .../provider/DatumShiftGridCompressed.java         |   4 +-
 .../referencing/provider/DatumShiftGridFile.java   |   2 +-
 .../provider/FranceGeocentricInterpolation.java    |   6 +-
 .../referencing/provider/GeodeticOperation.java    |   2 +-
 .../referencing/provider/MapProjection.java        |   4 +-
 .../referencing/provider/MapProjection3D.java      |   6 +-
 .../internal/referencing/provider/Molodensky.java  |   3 +-
 .../sis/internal/referencing/provider/NTv2.java    |   2 +-
 .../provider/PolarStereographicNorth.java          |   3 +-
 .../main/java/org/apache/sis/io/wkt/Element.java   |   5 +-
 .../main/java/org/apache/sis/io/wkt/Formatter.java |   5 +-
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |   8 +-
 .../org/apache/sis/io/wkt/MathTransformParser.java |   3 +-
 .../org/apache/sis/io/wkt/SingletonElement.java    |   2 +-
 .../java/org/apache/sis/io/wkt/Transliterator.java |  23 +-
 .../java/org/apache/sis/io/wkt/VerticalInfo.java   |   3 +-
 .../java/org/apache/sis/io/wkt/WKTDictionary.java  |  12 +-
 .../main/java/org/apache/sis/io/wkt/WKTFormat.java |   3 +-
 .../parameter/DefaultParameterDescriptorGroup.java |  13 +-
 .../sis/parameter/DefaultParameterValueGroup.java  |   3 +-
 .../sis/parameter/MapProjectionParameters.java     |  13 +-
 .../org/apache/sis/parameter/ParameterFormat.java  |   3 +-
 .../org/apache/sis/parameter/TensorParameters.java |   5 +-
 .../sis/referencing/AbstractIdentifiedObject.java  |   2 +-
 .../java/org/apache/sis/referencing/Builder.java   |   4 +-
 .../main/java/org/apache/sis/referencing/CRS.java  |  29 +-
 .../java/org/apache/sis/referencing/CommonCRS.java |   5 +-
 .../sis/referencing/EPSGFactoryFallback.java       |   3 +-
 .../sis/referencing/crs/DefaultCompoundCRS.java    |  14 +-
 .../cs/DefaultCoordinateSystemAxis.java            |  27 +-
 .../org/apache/sis/referencing/cs/Normalizer.java  |   3 +-
 .../sis/referencing/datum/DatumShiftGrid.java      |   4 +-
 .../org/apache/sis/referencing/datum/formulas.html |   2 +-
 .../referencing/factory/AuthorityFactoryProxy.java |  31 +-
 .../sis/referencing/factory/CacheRecord.java       |   2 +-
 .../factory/CommonAuthorityFactory.java            |   4 +-
 .../factory/GeodeticAuthorityFactory.java          |   5 +-
 .../referencing/factory/GeodeticObjectFactory.java |  12 +-
 .../factory/IdentifiedObjectFinder.java            |   5 +-
 .../referencing/factory/IdentifiedObjectSet.java   |   2 +-
 .../factory/MultiAuthoritiesFactory.java           |   6 +-
 .../referencing/factory/sql/EPSGCodeFinder.java    |  15 +-
 .../referencing/factory/sql/EPSGDataAccess.java    |  13 +-
 .../sis/referencing/factory/sql/EPSGFactory.java   |   5 +-
 .../factory/sql/InstallationScriptProvider.java    |   3 +-
 .../operation/AbstractCoordinateOperation.java     |   5 +-
 .../operation/AbstractSingleOperation.java         |   2 +-
 .../operation/CoordinateOperationFinder.java       |   2 +-
 .../operation/CoordinateOperationRegistry.java     |   5 +-
 .../operation/DefaultConcatenatedOperation.java    |  10 +-
 .../DefaultCoordinateOperationFactory.java         |  14 +-
 .../operation/DefaultOperationMethod.java          |  20 +-
 .../operation/InverseOperationMethod.java          |   2 +-
 .../operation/builder/LinearTransformBuilder.java  |   2 +-
 .../operation/builder/ResidualGrid.java            |   5 +-
 .../sis/referencing/operation/matrix/Matrices.java |   2 +-
 .../transform/CoordinateSystemTransform.java       |   3 +-
 .../transform/DefaultMathTransformFactory.java     |  46 +--
 .../transform/EllipsoidToCentricTransform.java     |   5 +-
 .../operation/transform/MathTransformProvider.java |   2 +-
 .../operation/transform/MathTransforms.java        |   5 +-
 .../operation/transform/PoleRotation.java          |   6 +-
 .../transform/SpecializableTransform.java          |   7 +-
 .../referencing/operation/transform/formulas.html  |   2 +-
 .../operation/transform/package-info.java          |   2 +-
 .../org/apache/sis/referencing/package-info.java   |   2 +-
 .../org/apache/sis/geometry/EnvelopesTest.java     |   4 +-
 .../CC_OperationParameterGroupTest.java            |   9 +-
 .../sis/internal/jaxb/referencing/CodeTest.java    |   6 +-
 .../referencing/SecondDefiningParameterTest.java   |  16 +-
 .../referencing/EllipsoidalHeightCombinerTest.java |   7 +-
 .../sis/internal/referencing/FormulasTest.java     |   7 +-
 .../sis/internal/referencing/WKTKeywordsTest.java  |   5 +-
 .../sis/io/wkt/GeodeticObjectParserTest.java       |   4 +-
 .../org/apache/sis/io/wkt/WKTDictionaryTest.java   |  12 +-
 .../java/org/apache/sis/io/wkt/WKTFormatTest.java  |   7 +-
 .../DefaultParameterDescriptorGroupTest.java       |   9 +-
 .../parameter/DefaultParameterValueGroupTest.java  |  16 +-
 .../sis/parameter/DefaultParameterValueTest.java   |   4 +-
 .../sis/parameter/MapProjectionParametersTest.java |   3 +-
 .../apache/sis/parameter/ParameterFormatTest.java  |   2 +-
 .../sis/parameter/ParameterMarshallingTest.java    |   7 +-
 .../org/apache/sis/parameter/ParametersTest.java   |   6 +-
 .../apache/sis/parameter/TensorParametersTest.java |   3 +-
 .../org/apache/sis/parameter/TensorValuesTest.java |  10 +-
 .../referencing/AbstractIdentifiedObjectTest.java  |  11 +-
 .../sis/referencing/EPSGFactoryFallbackTest.java   |  24 +-
 .../sis/referencing/crs/AbstractCRSTest.java       |  10 +-
 .../referencing/crs/DefaultCompoundCRSTest.java    |  23 +-
 .../sis/referencing/crs/DefaultDerivedCRSTest.java |   4 +-
 .../referencing/crs/DefaultEngineeringCRSTest.java |  10 +-
 .../sis/referencing/crs/DefaultImageCRSTest.java   |  10 +-
 .../referencing/crs/DefaultTemporalCRSTest.java    |   6 +-
 .../apache/sis/referencing/crs/HardCodedCRS.java   |  11 +-
 .../apache/sis/referencing/cs/AbstractCSTest.java  |  18 +-
 .../sis/referencing/cs/CoordinateSystemsTest.java  |  16 +-
 .../sis/referencing/cs/DefaultCartesianCSTest.java |   9 +-
 .../sis/referencing/cs/DefaultCompoundCSTest.java  |   5 +-
 .../cs/DefaultCoordinateSystemAxisTest.java        |   4 +-
 .../referencing/cs/DefaultCylindricalCSTest.java   |   4 +-
 .../sis/referencing/cs/DefaultPolarCSTest.java     |   4 +-
 .../sis/referencing/cs/DefaultSphericalCSTest.java |   4 +-
 .../org/apache/sis/referencing/cs/HardCodedCS.java |  31 +-
 .../apache/sis/referencing/cs/NormalizerTest.java  |   8 +-
 .../datum/DefaultPrimeMeridianTest.java            |   5 +-
 .../datum/DefaultVerticalDatumTest.java            |  11 +-
 .../factory/CommonAuthorityFactoryTest.java        |  18 +-
 .../factory/IdentifiedObjectFinderTest.java        |   4 +-
 .../factory/MultiAuthoritiesFactoryTest.java       |  30 +-
 .../factory/sql/epsg/DataScriptFormatter.java      |   3 +-
 .../operation/CoordinateOperationFinderTest.java   |  11 +-
 .../DefaultConcatenatedOperationTest.java          |  12 +-
 .../operation/DefaultConversionTest.java           |  13 +-
 .../operation/HardCodedConversions.java            |  12 +-
 .../builder/LinearTransformBuilderTest.java        |   7 +-
 .../sis/referencing/operation/projection/NoOp.java |   6 +-
 .../projection/SatelliteTrackingTest.java          |   4 +-
 .../operation/transform/CoordinateDomain.java      |   2 +-
 .../transform/DefaultMathTransformFactoryTest.java |   3 +-
 .../transform/MathTransformFactoryBase.java        |   3 +-
 .../transform/MathTransformFactoryMock.java        |   3 +-
 .../transform/OperationMethodSetTest.java          |  10 +-
 .../operation/transform/SinusoidalShiftGrid.java   |   4 +-
 .../transform/WraparoundTransformTest.java         |  10 +-
 .../report/CoordinateOperationMethods.java         |   2 +-
 .../sis/test/integration/ConsistencyTest.java      |   7 +-
 .../apache/sis/test/integration/MetadataTest.java  |  90 +++--
 core/sis-utility/pom.xml                           |  16 -
 .../sis/internal/converter/SystemRegistry.java     |   7 +-
 .../sis/internal/converter/package-info.java       |   7 +-
 .../sis/internal/{jdk9 => jdk17}/HexFormat.java    |   2 +-
 .../java/org/apache/sis/internal/jdk17/JDK17.java  |  72 ++++
 .../sis/internal/{jdk9 => jdk17}/package-info.java |   6 +-
 .../java/org/apache/sis/internal/jdk9/JDK9.java    | 366 ---------------------
 .../sis/internal/system/DefaultFactories.java      |  76 +++--
 .../apache/sis/internal/system/SystemListener.java |   3 +-
 .../apache/sis/internal/system/package-info.java   |   2 +-
 .../java/org/apache/sis/internal/util/Cloner.java  |   8 +-
 .../apache/sis/internal/util/CollectionsExt.java   | 232 ++++---------
 .../apache/sis/internal/util/DefinitionURI.java    |  13 +-
 .../apache/sis/internal/util/FinalFieldSetter.java |   6 +-
 .../org/apache/sis/internal/util/Numerics.java     |  16 +-
 .../org/apache/sis/internal/util/package-info.java |   2 +-
 .../main/java/org/apache/sis/math/ArrayVector.java |  13 +-
 .../main/java/org/apache/sis/math/Fraction.java    |  17 +-
 .../org/apache/sis/math/LinearlyDerivedVector.java |   8 +-
 .../java/org/apache/sis/math/MathFunctions.java    |   2 +-
 .../java/org/apache/sis/math/SequenceVector.java   |   5 +-
 .../java/org/apache/sis/math/StatisticsFormat.java |   2 +-
 .../src/main/java/org/apache/sis/math/Vector.java  |  41 +--
 .../org/apache/sis/measure/AbstractConverter.java  |   3 +-
 .../java/org/apache/sis/measure/UnitDimension.java |  23 +-
 .../java/org/apache/sis/measure/UnitFormat.java    |  10 +-
 .../src/main/java/org/apache/sis/setup/About.java  |   3 +-
 .../java/org/apache/sis/setup/GeometryLibrary.java |   2 -
 .../main/java/org/apache/sis/setup/OptionKey.java  |   2 +-
 .../apache/sis/setup/OptionalInstallations.java    |   3 +-
 .../java/org/apache/sis/util/CharSequences.java    |   4 +-
 .../src/main/java/org/apache/sis/util/Classes.java |   4 +-
 .../sis/util/DefaultInternationalString.java       |  10 +-
 .../src/main/java/org/apache/sis/util/Locales.java |   2 +-
 .../sis/util/collection/BackingStoreException.java |   2 +-
 .../sis/util/collection/DefaultTreeTable.java      |  20 +-
 .../sis/util/collection/FrequencySortedSet.java    |   3 +-
 .../apache/sis/util/collection/IntegerList.java    |   9 +-
 .../apache/sis/util/collection/TableColumn.java    |   3 +-
 .../sis/util/collection/TreeTableFormat.java       |   4 +-
 .../java/org/apache/sis/util/logging/Logging.java  |  86 ++---
 .../apache/sis/util/logging/PerformanceLevel.java  |   8 +-
 .../org/apache/sis/util/logging/package-info.java  |   2 +-
 .../java/org/apache/sis/util/resources/Loader.java |   3 +-
 .../apache/sis/internal/util/AbstractMapTest.java  |   3 +-
 .../sis/internal/util/CheckedArrayListTest.java    |   6 +-
 .../sis/internal/util/CollectionsExtTest.java      |  27 +-
 .../org/apache/sis/internal/util/NumericsTest.java |  35 +-
 .../org/apache/sis/measure/SystemUnitTest.java     |   9 +-
 .../org/apache/sis/measure/UnitDimensionTest.java  |   3 +-
 .../org/apache/sis/measure/UnitServicesTest.java   |   4 +-
 .../org/apache/sis/test/ProjectDirectories.java    |   3 +-
 .../test/java/org/apache/sis/test/TestRunner.java  |   3 +-
 .../org/apache/sis/util/collection/CacheTest.java  |  10 +-
 .../sis/util/collection/CodeListSetTest.java       |   2 +-
 .../apache/sis/util/collection/DerivedSetTest.java |  10 +-
 .../util/collection/FrequencySortedSetTest.java    |   3 +-
 .../sis/util/collection/IntegerListTest.java       |   5 +-
 .../apache/sis/util/collection/LargeCodeList.java  |   2 +-
 ide-project/NetBeans/nbproject/build-impl.xml      |  25 +-
 ide-project/NetBeans/nbproject/genfiles.properties |   6 +-
 ide-project/NetBeans/nbproject/project.properties  |  17 +-
 ide-project/NetBeans/nbproject/project.xml         |   1 -
 pom.xml                                            |  28 +-
 .../profile/fra/DirectReferenceSystemTest.java     |   6 +-
 .../apache/sis/internal/earth/netcdf/GCOM_C.java   |  33 +-
 .../apache/sis/internal/earth/netcdf/GCOM_W.java   |  32 +-
 src/main/javadoc/overview.html                     |   2 +-
 storage/pom.xml                                    |   5 +
 .../storage/inflater/CompressionChannel.java       |   3 +-
 .../internal/storage/inflater/CopyFromBytes.java   |   8 +-
 .../storage/inflater/HorizontalPredictor.java      |   4 +-
 .../storage/inflater/PredictorChannel.java         |   4 +-
 .../apache/sis/internal/storage/inflater/ZIP.java  |  31 +-
 .../internal/storage/inflater/package-info.java    |   2 +-
 .../org/apache/sis/storage/geotiff/CRSBuilder.java |   7 +-
 .../sis/storage/geotiff/CompressedSubset.java      |   2 +-
 .../org/apache/sis/storage/geotiff/DataSubset.java |   2 +-
 .../apache/sis/storage/geotiff/Localization.java   |   2 +-
 .../sis/storage/geotiff/MultiResolutionImage.java  |   2 +-
 .../sis/storage/geotiff/ReversedBitsChannel.java   |   2 +-
 .../apache/sis/storage/geotiff/XMLMetadata.java    |   4 +-
 .../java/org/apache/sis/internal/netcdf/Axis.java  |   2 +-
 .../org/apache/sis/internal/netcdf/CRSBuilder.java |   3 +-
 .../org/apache/sis/internal/netcdf/Convention.java |   5 +-
 .../org/apache/sis/internal/netcdf/FeatureSet.java |   2 +-
 .../apache/sis/internal/netcdf/GridMapping.java    |   3 +-
 .../apache/sis/internal/netcdf/RasterResource.java |   5 +-
 .../org/apache/sis/internal/netcdf/Variable.java   |   2 +-
 .../sis/internal/netcdf/impl/ChannelDecoder.java   |  10 +-
 .../sis/internal/netcdf/impl/VariableInfo.java     |   3 +-
 .../sis/internal/netcdf/ucar/DecoderWrapper.java   |   6 +-
 .../sis/internal/netcdf/ucar/VariableWrapper.java  |   4 +-
 .../apache/sis/storage/netcdf/MetadataReader.java  |  16 +-
 .../org/apache/sis/storage/netcdf/NetcdfStore.java |   2 +-
 storage/sis-sqlstore/pom.xml                       |   5 +
 .../apache/sis/internal/sql/feature/Analyzer.java  |   3 +-
 .../sis/internal/sql/feature/BinaryEncoding.java   |   2 +-
 .../apache/sis/internal/sql/feature/Database.java  |   4 +-
 .../sis/internal/sql/feature/PrimaryKey.java       |   5 +-
 .../sis/internal/sql/feature/QueryAnalyzer.java    |   2 +-
 .../sis/internal/sql/feature/TableAnalyzer.java    |   2 +-
 .../sis/internal/sql/postgis/RasterReader.java     |   3 +-
 .../apache/sis/storage/sql/ResourceDefinition.java |   6 +-
 .../sis/internal/storage/StoreUtilities.java       |   3 +-
 .../sis/internal/storage/TiledGridCoverage.java    |   2 +-
 .../org/apache/sis/internal/storage/csv/Store.java |   5 +-
 .../sis/internal/storage/esri/CharactersView.java  |   6 +-
 .../sis/internal/storage/esri/RawRasterReader.java |   2 +-
 .../apache/sis/internal/storage/folder/Store.java  |   5 +-
 .../apache/sis/internal/storage/io/ByteWriter.java |   5 +-
 .../sis/internal/storage/io/ChannelFactory.java    |   3 +-
 .../sis/internal/storage/wkt/FirstKeywordPeek.java |   2 +-
 .../sis/internal/storage/xml/AbstractProvider.java |  45 ++-
 .../org/apache/sis/internal/storage/xml/Store.java |   3 +-
 .../sis/internal/storage/xml/StoreProvider.java    |  19 +-
 .../sis/internal/storage/xml/package-info.java     |   2 +-
 .../sis/storage/AbstractGridCoverageResource.java  |   3 +-
 .../java/org/apache/sis/storage/FeatureNaming.java |   6 +-
 .../apache/sis/storage/GridCoverageResource.java   |   5 +-
 .../org/apache/sis/storage/StorageConnector.java   |   7 +-
 .../storage/aggregate/AggregatedFeatureSet.java    |   4 +-
 .../aggregate/ConcatenatedGridResource.java        |   3 +-
 .../sis/storage/aggregate/GroupBySample.java       |   2 +-
 .../sis/storage/aggregate/JoinFeatureSet.java      |  13 +-
 .../apache/sis/storage/event/StoreListeners.java   |  53 +--
 .../org/apache/sis/storage/event/package-info.java |   2 +-
 .../sis/internal/storage/MetadataBuilderTest.java  |   7 +-
 .../apache/sis/internal/storage/csv/StoreTest.java |  26 +-
 .../sis/internal/storage/folder/StoreTest.java     |   6 +-
 .../internal/storage/xml/MimeTypeDetectorTest.java |  11 +-
 .../org/apache/sis/storage/GridResourceMock.java   |   3 +-
 .../aggregate/ConcatenatedFeatureSetTest.java      |  17 +-
 .../sis/storage/aggregate/JoinFeatureSetTest.java  |   6 +-
 .../sis/test/storage/CoverageReadConsistency.java  |   2 +-
 .../apache/sis/internal/storage/gpx/Copyright.java |   4 +-
 .../storage/gpx/GroupAsPolylineOperation.java      |   6 +-
 .../apache/sis/internal/storage/gpx/Metadata.java  |   2 +-
 .../org/apache/sis/internal/storage/gpx/Store.java |   2 +-
 .../sis/internal/storage/gpx/StoreProvider.java    |  11 +-
 .../org/apache/sis/internal/storage/gpx/Types.java |   7 +-
 .../sis/internal/storage/gpx/WritableStore.java    |   2 +-
 .../sis/internal/storage/gpx/package-info.java     |   2 +-
 .../storage/xml/stream/FormattedWriter.java        |   6 +-
 .../storage/xml/stream/StaxDataStoreProvider.java  |  12 +-
 .../internal/storage/xml/stream/package-info.java  |   2 +-
 .../sis/internal/storage/gpx/MetadataTest.java     |  10 +-
 .../sis/internal/storage/gpx/UpdaterTest.java      |   6 +-
 .../sis/internal/storage/gpx/WriterTest.java       |  31 +-
 532 files changed, 2084 insertions(+), 3209 deletions(-)

diff --cc application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageExplorer.java
index 508305767e,d4bcfba71c..9a8b168400
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageExplorer.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageExplorer.java
@@@ -68,10 -68,10 +68,10 @@@ import org.apache.sis.gui.Widget
   *
   * <h2>Limitations</h2>
   * Current implementation is restricted to {@link GridCoverage} instances, but a future
 - * implementation may generalize to {@link org.opengis.coverage.Coverage} instances.
 + * implementation may generalize to {@code org.opengis.coverage.Coverage} instances.
   *
   * @author  Martin Desruisseaux (Geomatys)
-  * @version 1.3
+  * @version 1.4
   *
   * @see CoverageCanvas
   * @see GridView
diff --cc application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandedFeature.java
index 64c8a59f87,26a78bc4ea..edec90fd8b
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandedFeature.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandedFeature.java
@@@ -19,9 -19,10 +19,11 @@@ package org.apache.sis.gui.dataset
  import java.util.Arrays;
  import java.util.Map;
  import java.util.Collection;
- import java.util.Collections;
+ import java.util.List;
 -import org.opengis.feature.Feature;
 -import org.opengis.feature.FeatureType;
 -import org.opengis.feature.Property;
++
++// Branch-dependent imports
 +import org.apache.sis.feature.AbstractFeature;
 +import org.apache.sis.feature.DefaultFeatureType;
  
  
  /**
diff --cc core/sis-feature/src/main/java/org/apache/sis/coverage/grid/BufferedGridCoverage.java
index e434b87630,07a0549ee3..a18028f358
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/BufferedGridCoverage.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/BufferedGridCoverage.java
@@@ -39,9 -39,8 +39,8 @@@ import org.apache.sis.util.collection.C
  import org.apache.sis.image.DataType;
  
  // Branch-specific imports
- import org.apache.sis.internal.jdk9.JDK9;
 -import org.opengis.coverage.CannotEvaluateException;
 -import org.opengis.coverage.PointOutsideCoverageException;
 +import org.apache.sis.coverage.CannotEvaluateException;
 +import org.apache.sis.coverage.PointOutsideCoverageException;
  
  
  /**
diff --cc core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
index 09e1193d49,92d67f4201..ad8f132b6d
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
@@@ -17,8 -17,9 +17,7 @@@
  package org.apache.sis.coverage.grid;
  
  import java.util.Arrays;
 -import org.opengis.coverage.grid.GridCoordinates;
 -import org.apache.sis.util.resources.Errors;
  import org.apache.sis.util.ArgumentChecks;
- import org.apache.sis.internal.jdk9.JDK9;
  
  
  /**
diff --cc core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
index 3f1c4397fb,45742cebb2..30bbeab54a
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
@@@ -150,9 -156,9 +150,9 @@@ public abstract class AbstractAttribute
       */
      private void writeObject(final ObjectOutputStream out) throws IOException {
          out.defaultWriteObject();
 -        final Attribute<?>[] characterizedBy;
 +        final AbstractAttribute<?>[] characterizedBy;
          if (characteristics instanceof CharacteristicMap) {
-             characterizedBy = characteristics.values().toArray(new AbstractAttribute<?>[characteristics.size()]);
 -            characterizedBy = characteristics.values().toArray(Attribute[]::new);
++            characterizedBy = characteristics.values().toArray(AbstractAttribute[]::new);
          } else {
              characterizedBy = null;
          }
@@@ -351,13 -356,13 +351,13 @@@
       * This method does not store the new map in the {@link #characteristics} field;
       * it is caller responsibility to do so if desired.
       */
 -    private Map<String,Attribute<?>> newCharacteristicsMap() {
 +    private Map<String,AbstractAttribute<?>> newCharacteristicsMap() {
          if (type instanceof DefaultAttributeType<?>) {
 -            Map<String, AttributeType<?>> map = ((DefaultAttributeType<?>) type).characteristics();
 +            Map<String, DefaultAttributeType<?>> map = type.characteristics();
              if (!map.isEmpty()) {
                  if (!(map instanceof CharacteristicTypeMap)) {
 -                    final Collection<AttributeType<?>> types = map.values();
 -                    map = CharacteristicTypeMap.create(type, types.toArray(AttributeType<?>[]::new));
 +                    final Collection<DefaultAttributeType<?>> types = map.values();
-                     map = CharacteristicTypeMap.create(type, types.toArray(new DefaultAttributeType<?>[types.size()]));
++                    map = CharacteristicTypeMap.create(type, types.toArray(DefaultAttributeType<?>[]::new));
                  }
                  return new CharacteristicMap(this, (CharacteristicTypeMap) map);
              }
diff --cc core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
index fca73023b3,193da7f434..25d5c47511
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
@@@ -353,7 -353,7 +353,7 @@@ public class DefaultFeatureType extend
          assignableTo = new HashSet<>(4);
          assignableTo.add(super.getName());
          scanPropertiesFrom(this, properties);
-         allProperties = UnmodifiableArrayList.wrap(byName.values().toArray(new AbstractIdentifiedType[byName.size()]));
 -        allProperties = UnmodifiableArrayList.wrap(byName.values().toArray(PropertyType[]::new));
++        allProperties = UnmodifiableArrayList.wrap(byName.values().toArray(AbstractIdentifiedType[]::new));
          /*
           * Now check if the feature is simple/complex or dense/sparse. We perform this check after we finished
           * to create the list of all properties, because some properties may be overridden and we want to take
diff --cc core/sis-feature/src/main/java/org/apache/sis/feature/builder/FeatureTypeBuilder.java
index cb464a4653,98b969b62e..262a89b6f1
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/builder/FeatureTypeBuilder.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/builder/FeatureTypeBuilder.java
@@@ -412,8 -407,8 +411,8 @@@ public class FeatureTypeBuilder extend
       *
       * @see DefaultFeatureType#getSuperTypes()
       */
 -    public FeatureType[] getSuperTypes() {
 -        return superTypes.toArray(FeatureType[]::new);
 +    public DefaultFeatureType[] getSuperTypes() {
-         return superTypes.toArray(new DefaultFeatureType[superTypes.size()]);
++        return superTypes.toArray(DefaultFeatureType[]::new);
      }
  
      /**
@@@ -1015,7 -991,7 +1014,7 @@@
                  }
              }
              feature = new DefaultFeatureType(identification(), isAbstract(),
-                     superTypes.toArray(new DefaultFeatureType[superTypes.size()]),
 -                    superTypes.toArray(FeatureType[]::new),
++                    superTypes.toArray(DefaultFeatureType[]::new),
                      ArraysExt.resize(propertyTypes, propertyCursor));
          }
          return feature;
diff --cc core/sis-feature/src/main/java/org/apache/sis/filter/IdentifierFilter.java
index 23884bae02,83ee72bbfe..02dc5e2182
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/IdentifierFilter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/IdentifierFilter.java
@@@ -21,8 -21,11 +21,9 @@@ import java.util.Collection
  import org.apache.sis.util.ArgumentChecks;
  import org.apache.sis.internal.feature.AttributeConvention;
  
+ // Branch-dependent imports
 -import org.opengis.feature.Feature;
 -import org.opengis.filter.Expression;
 -import org.opengis.filter.ResourceId;
++import org.apache.sis.feature.AbstractFeature;
+ 
  
  /**
   * Filter features using a set of predefined identifiers and discarding features
diff --cc core/sis-feature/src/main/java/org/apache/sis/filter/Optimization.java
index d7ff6e6d13,ffc8e17298..93048e4ea3
--- a/core/sis-feature/src/main/java/org/apache/sis/filter/Optimization.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/filter/Optimization.java
@@@ -423,9 -425,9 +422,9 @@@ public class Optimization 
       */
      private static <R> List<Filter<? super R>> toAndOperands(final Filter<R> filter) {
          if (filter == null) {
-             return Collections.emptyList();
+             return List.of();
          }
 -        final CodeList<?> type = filter.getOperatorType();
 +        final Enum<?> type = filter.getOperatorType();
          if (type == LogicalOperatorName.AND) {
              return ((LogicalOperator<R>) filter).getOperands();
          }
diff --cc core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java
index 50b461ab77,5062863567..36442c9c6f
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/AttributeConvention.java
@@@ -102,15 -106,15 +102,15 @@@ public final class AttributeConvention 
       * <p>The {@linkplain org.apache.sis.feature.DefaultAttributeType#getValueClass() value class} can be
       * the {@link com.esri.core.geometry.Geometry} class from ESRI's API, or the {@code Geometry} class from
       * <cite>Java Topology Suite</cite> (JTS) library, or any other class defined in future SIS versions.
 -     * See {@link #isGeometryAttribute(IdentifiedType)} for testing whether the value is a supported type.</p>
 +     * See {@code isGeometryAttribute(IdentifiedType)} for testing whether the value is a supported type.</p>
       *
 -     * @see #isGeometryAttribute(IdentifiedType)
 +     * @see #isGeometryAttribute(AbstractIdentifiedType)
       */
-     public static final ScopedName GEOMETRY_PROPERTY;
+     public static final ScopedName GEOMETRY_PROPERTY = Names.createScopedName(SCOPE, null, "geometry");
  
      /**
-      * Conventional name for fetching the envelope encompassing all geometries in a feature. Most {@code FeatureType}s
-      * have at most one geometry, which is also the {@link #GEOMETRY_PROPERTY default geometry}.
+      * Conventional name for fetching the envelope encompassing all geometries in a feature.
+      * Most {@code FeatureType}s have at most one geometry, which is also the {@link #GEOMETRY_PROPERTY default geometry}.
       * But if several geometries exist, then the value for this synthetic property is the union of all geometries.
       *
       * <p>Properties of this name are usually
@@@ -136,9 -140,9 +136,9 @@@
       * <p>The {@linkplain org.apache.sis.feature.DefaultAttributeType#getValueClass() value class} should be
       * {@link org.opengis.referencing.crs.CoordinateReferenceSystem}.</p>
       *
 -     * @see #getCRSCharacteristic(Property)
 +     * @see #getCRSCharacteristic(Object)
       */
-     public static final ScopedName CRS_CHARACTERISTIC;
+     public static final ScopedName CRS_CHARACTERISTIC = Names.createScopedName(SCOPE, null, "crs");
  
      /**
       * Conventional name for fetching the unit of measurement of a property.
@@@ -166,9 -170,9 +166,9 @@@
       * <p>The {@linkplain org.apache.sis.feature.DefaultAttributeType#getValueClass() value class} should be
       * {@link Integer}.</p>
       *
 -     * @see #getMaximalLengthCharacteristic(Property)
 +     * @see #getMaximalLengthCharacteristic(Object)
       */
-     public static final ScopedName MAXIMAL_LENGTH_CHARACTERISTIC;
+     public static final ScopedName MAXIMAL_LENGTH_CHARACTERISTIC = Names.createScopedName(SCOPE, null, "maximalLength");
  
      /**
       * Conventional name for fetching the enumeration of valid values.
diff --cc core/sis-feature/src/main/java/org/apache/sis/internal/feature/MovingFeatures.java
index 46f52afd4f,fec27f404f..8824c781f0
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/MovingFeatures.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/MovingFeatures.java
@@@ -54,11 -53,10 +52,10 @@@ public class MovingFeatures 
       * This characteristic uses the same name than {@code TIME_AS_INSTANTS}. Consequently, at most one
       * of {@code TIME_AS_INSTANTS} and {@code TIME_AS_NUMBERS} can be used on the same property.
       */
 -    private static final AttributeType<Number> TIME_AS_NUMBERS;
 +    private static final DefaultAttributeType<Number> TIME_AS_NUMBERS;
      static {
-         final LocalName scope = Names.createLocalName("OGC", null, "MF");
-         final Map<String,Object> properties = Collections.singletonMap(
-                 DefaultAttributeType.NAME_KEY, Names.createScopedName(scope, null, "datetimes"));
+         final var scope = Names.createLocalName("OGC", null, "MF");
+         final var properties = Map.of(DefaultAttributeType.NAME_KEY, Names.createScopedName(scope, null, "datetimes"));
          TIME_AS_INSTANTS = new DefaultAttributeType<>(properties, Instant.class, 0, Integer.MAX_VALUE, null);
          TIME_AS_NUMBERS  = new DefaultAttributeType<>(properties,  Number.class, 0, Integer.MAX_VALUE, null);
      }
diff --cc core/sis-feature/src/main/java/org/apache/sis/internal/filter/Node.java
index cd78942517,4fe8e0e1f7..944184c617
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/Node.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/Node.java
@@@ -84,9 -86,10 +84,10 @@@ public abstract class Node implements S
       *
       * @see Expression#getFunctionName()
       */
 -    protected static <T> AttributeType<T> createType(final Class<T> type, final Object name) {
 +    protected static <T> DefaultAttributeType<T> createType(final Class<T> type, final Object name) {
+         // We do not use `Map.of(…)` for letting the attribute type constructor do the null check.
          return new DefaultAttributeType<>(Collections.singletonMap(DefaultAttributeType.NAME_KEY, name),
 -                                          type, 1, 1, null, (AttributeType<?>[]) null);
 +                                          type, 1, 1, null, (DefaultAttributeType<?>[]) null);
      }
  
      /**
diff --cc core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/Registry.java
index 9202548677,397f181b00..163349e1bd
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/Registry.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/Registry.java
@@@ -20,10 -20,10 +20,10 @@@ import java.util.Arrays
  import java.util.Collection;
  import org.apache.sis.internal.feature.Geometries;
  import org.apache.sis.internal.filter.FunctionRegister;
- import org.apache.sis.internal.jdk9.JDK9;
+ import org.apache.sis.internal.jdk17.JDK17;
  
  // Branch-dependent imports
 -import org.opengis.filter.Expression;
 +import org.apache.sis.filter.Expression;
  
  
  /**
diff --cc core/sis-feature/src/test/java/org/apache/sis/feature/CharacteristicTypeMapTest.java
index d7ae539fe2,8246b7add6..e8e34acf50
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/CharacteristicTypeMapTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/CharacteristicTypeMapTest.java
@@@ -114,12 -116,12 +113,12 @@@ public final strictfp class Characteris
      @Test
      public void testQualifiedNames() {
          final DefaultAttributeType<?> a1, a2, a3, tp;
-         a1 = new DefaultAttributeType<>(singletonMap(NAME_KEY, Names.parseGenericName(null, null, "ns1:accuracy")), Float.class, 1, 1, 0.1f);
-         a2 = new DefaultAttributeType<>(singletonMap(NAME_KEY, Names.parseGenericName(null, null, "ns2:accuracy")), Float.class, 1, 1, 0.1f);
-         a3 = new DefaultAttributeType<>(singletonMap(NAME_KEY, Names.parseGenericName(null, null, "ns2:s3:units")), String.class, 1, 1, "°C");
-         tp = new DefaultAttributeType<>(singletonMap(NAME_KEY, "temperature"), Float.class, 1, 1, null, a1, a2, a3);
+         a1 = new DefaultAttributeType<>(Map.of(NAME_KEY, Names.parseGenericName(null, null, "ns1:accuracy")), Float.class, 1, 1, 0.1f);
+         a2 = new DefaultAttributeType<>(Map.of(NAME_KEY, Names.parseGenericName(null, null, "ns2:accuracy")), Float.class, 1, 1, 0.1f);
+         a3 = new DefaultAttributeType<>(Map.of(NAME_KEY, Names.parseGenericName(null, null, "ns2:s3:units")), String.class, 1, 1, "°C");
+         tp = new DefaultAttributeType<>(Map.of(NAME_KEY, "temperature"), Float.class, 1, 1, null, a1, a2, a3);
  
 -        final Map<String, AttributeType<?>> characteristics = tp.characteristics();
 +        final Map<String, DefaultAttributeType<?>> characteristics = tp.characteristics();
          assertSame("ns1:accuracy", a1, characteristics.get("ns1:accuracy"));
          assertSame("ns2:accuracy", a2, characteristics.get("ns2:accuracy"));
          assertSame("ns2:s3:units", a3, characteristics.get("ns2:s3:units"));
diff --cc core/sis-feature/src/test/java/org/apache/sis/feature/CustomAttribute.java
index ac8fa16a9b,d2fd163eb4..4b48808ac1
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/CustomAttribute.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/CustomAttribute.java
@@@ -23,8 -24,9 +24,6 @@@ import org.apache.sis.metadata.iso.qual
  import org.apache.sis.util.SimpleInternationalString;
  import org.apache.sis.referencing.NamedIdentifier;
  
- import static java.util.Collections.singleton;
 -// Branch-dependent imports
 -import org.opengis.feature.AttributeType;
--
  
  /**
   * For testing {@link AbstractAttribute} customization.
diff --cc core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
index 9cb66a9ce6,614b81cfe0..1491a6be2d
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
@@@ -83,10 -86,10 +82,10 @@@ public final strictfp class DefaultAsso
       * @return the feature type to use for testing purpose.
       */
      private static DefaultFeatureType createType(final Object name,
 -            final FeatureType parent, final FeatureAssociationRole... property)
 +            final DefaultFeatureType parent, final DefaultAssociationRole... property)
      {
-         return new DefaultFeatureType(singletonMap(NAME_KEY, name),
+         return new DefaultFeatureType(Map.of(NAME_KEY, name),
 -                false, new FeatureType[] {parent}, property);
 +                false, new DefaultFeatureType[] {parent}, property);
      }
  
      /**
diff --cc core/sis-feature/src/test/java/org/apache/sis/feature/DefaultFeatureTypeTest.java
index 362a8cde02,ccd058b601..33335b48e4
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultFeatureTypeTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultFeatureTypeTest.java
@@@ -30,8 -30,11 +30,7 @@@ import org.junit.Test
  
  import static org.apache.sis.test.Assert.*;
  import static org.apache.sis.test.TestUtilities.getSingleton;
- import static java.util.Collections.singletonMap;
  
 -// Branch-dependent imports
 -import org.opengis.feature.PropertyType;
 -import org.opengis.feature.AttributeType;
 -
  
  /**
   * Tests {@link DefaultFeatureType}.
diff --cc core/sis-feature/src/test/java/org/apache/sis/feature/FeatureMemoryBenchmark.java
index e420655a40,3112dd90a1..6d65371eb7
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureMemoryBenchmark.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureMemoryBenchmark.java
@@@ -19,11 -19,11 +19,10 @@@ package org.apache.sis.feature
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
+ import java.util.Map;
  import java.util.Random;
 -import org.opengis.feature.Feature;
  import org.apache.sis.internal.util.StandardDateFormat;
  
- import static java.util.Collections.singletonMap;
- 
  
  /**
   * Compares {@link org.apache.sis.feature} memory usage with a plain {@link HashMap}.
diff --cc core/sis-feature/src/test/java/org/apache/sis/feature/builder/FeatureTypeBuilderTest.java
index 3226c00e59,a6a8b8b5bf..ebc2600cff
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/builder/FeatureTypeBuilderTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/builder/FeatureTypeBuilderTest.java
@@@ -368,15 -370,15 +368,15 @@@ public final strictfp class FeatureType
      @Test
      public void testOverrideByOperation() {
          FeatureTypeBuilder builder = new FeatureTypeBuilder().setName("Parent").setAbstract(true);
 -        final AttributeType<Integer> pa = builder.addAttribute(Integer.class).setName("A").build();
 +        final DefaultAttributeType<Integer> pa = builder.addAttribute(Integer.class).setName("A").build();
          builder.addAttribute(Integer.class).setName("B");
 -        final FeatureType parentType = builder.build();
 +        final DefaultFeatureType parentType = builder.build();
  
          builder = new FeatureTypeBuilder().setName("Child").setSuperTypes(parentType);
-         builder.addProperty(FeatureOperations.link(Collections.singletonMap(AbstractOperation.NAME_KEY, "B"), pa));
+         builder.addProperty(FeatureOperations.link(Map.of(AbstractOperation.NAME_KEY, "B"), pa));
 -        final FeatureType childType = builder.build();
 +        final DefaultFeatureType childType = builder.build();
  
 -        final Iterator<? extends PropertyType> it = childType.getProperties(true).iterator();
 +        final Iterator<? extends AbstractIdentifiedType> it = childType.getProperties(true).iterator();
          assertPropertyEquals("A", Integer.class, it.next());
          assertPropertyEquals("B", Integer.class, it.next());
          assertFalse(it.hasNext());
diff --cc core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFilterTest.java
index 673d92052f,7faabe4268..9776c0b849
--- a/core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFilterTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/filter/LogicalFilterTest.java
@@@ -139,7 -143,7 +139,7 @@@ public final strictfp class LogicalFilt
          assertEquals(expected, filter.test(null));
          assertSerializedEquals(filter);
  
-         filter = (LogicalOperator<AbstractFeature>) anyArity.apply(Arrays.asList(f1, f2, f1));
 -        filter = anyArity.apply(List.of(f1, f2, f1));
++        filter = (LogicalOperator<AbstractFeature>) anyArity.apply(List.of(f1, f2, f1));
          assertArrayEquals(new Filter<?>[] {f1, f2, f1}, filter.getOperands().toArray());
          assertEquals(expected, filter.test(null));
          assertSerializedEquals(filter);
diff --cc core/sis-feature/src/test/java/org/apache/sis/internal/feature/AttributeConventionTest.java
index 231bd46595,a13bd75df7..f42c890475
--- a/core/sis-feature/src/test/java/org/apache/sis/internal/feature/AttributeConventionTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/internal/feature/AttributeConventionTest.java
@@@ -93,10 -94,10 +92,10 @@@ public final strictfp class AttributeCo
          /*
           * Test again AttributeConvention.getCRSCharacteristic(…, PropertyType), but following link.
           */
-         final AbstractOperation link = FeatureOperations.link(Collections.singletonMap(DefaultAttributeType.NAME_KEY, "geom"), type);
-         final DefaultFeatureType feat = new DefaultFeatureType(Collections.singletonMap(DefaultAttributeType.NAME_KEY, "feat"), false, null, type, link);
-         assertEquals(HardCodedCRS.WGS84, AttributeConvention.getCRSCharacteristic(feat, link));
-         assertNull(                      AttributeConvention.getCRSCharacteristic(null, link));
 -        final Operation link = FeatureOperations.link(Map.of(DefaultAttributeType.NAME_KEY, "geom"), type);
++        final var link = FeatureOperations.link(Map.of(DefaultAttributeType.NAME_KEY, "geom"), type);
+         final var feature = new DefaultFeatureType(Map.of(DefaultAttributeType.NAME_KEY, "feat"), false, null, type, link);
+         assertEquals(HardCodedCRS.WGS84, AttributeConvention.getCRSCharacteristic(feature, link));
+         assertNull(AttributeConvention.getCRSCharacteristic(null, link));
      }
  
      /**
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultExtendedElementInformation.java
index a5703b1071,066c1b896e..fafa9b4d94
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultExtendedElementInformation.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultExtendedElementInformation.java
@@@ -577,10 -574,32 +577,10 @@@ public class DefaultExtendedElementInfo
       * @return reason for creating the extended element.
       */
      @Override
-     @Deprecated
+     @Deprecated(since="1.0")
      @Dependencies("getRationale")
      public Collection<InternationalString> getRationales() {
 -        return new AbstractSet<InternationalString>() {
 -            /** Returns 0 if empty, or 1 if a density has been specified. */
 -            @Override public int size() {
 -                return getRationale() != null ? 1 : 0;
 -            }
 -
 -            /** Returns an iterator over 0 or 1 element. Current iterator implementation is unmodifiable. */
 -            @Override public Iterator<InternationalString> iterator() {
 -                return CollectionsExt.singletonOrEmpty(getRationale()).iterator();
 -            }
 -
 -            /** Adds an element only if the set is empty. This method is invoked by JAXB at unmarshalling time. */
 -            @Override public boolean add(final InternationalString newValue) {
 -                if (isEmpty()) {
 -                    setRationale(newValue);
 -                    return true;
 -                } else {
 -                    LegacyPropertyAdapter.warnIgnoredExtraneous(InternationalString.class,
 -                            DefaultExtendedElementInformation.class, "setRationales");
 -                    return false;
 -                }
 -            }
 -        };
 +        return rationales = nonNullCollection(rationales, InternationalString.class);
      }
  
      /**
@@@ -588,9 -607,10 +588,9 @@@
       *
       * @param  newValues  the new rationales.
       */
-     @Deprecated
+     @Deprecated(since="1.0")
      public void setRationales(final Collection<? extends InternationalString> newValues) {
 -        setRationale(LegacyPropertyAdapter.getSingleton(newValues, InternationalString.class,
 -                null, DefaultExtendedElementInformation.class, "setRationales"));
 +        rationales = writeCollection(newValues, rationales, InternationalString.class);
      }
  
      /**
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultResponsibleParty.java
index 2b9c948b1e,5e8f5bf5bd..3be0e055b4
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultResponsibleParty.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultResponsibleParty.java
@@@ -268,9 -255,9 +268,9 @@@ public class DefaultResponsibleParty ex
       *
       * @deprecated As of ISO 19115:2014, replaced by {@code setName(InternationalString)} in {@link DefaultIndividual}.
       */
-     @Deprecated
+     @Deprecated(since="1.0")
      public void setIndividualName(final String newValue) {
 -        setName(Individual.class, false, Types.toInternationalString(newValue), DefaultResponsibleParty::individual);
 +        setName(DefaultIndividual.class, false, Types.toInternationalString(newValue), DefaultResponsibleParty::individual);
      }
  
      /**
@@@ -312,9 -299,9 +312,9 @@@
       *
       * @deprecated As of ISO 19115:2014, replaced by {@code setName(InternationalString)} in {@link DefaultOrganisation}.
       */
-     @Deprecated
+     @Deprecated(since="1.0")
      public void setOrganisationName(final InternationalString newValue) {
 -        setName(Organisation.class, false, newValue, DefaultResponsibleParty::organisation);
 +        setName(DefaultOrganisation.class, false, newValue, DefaultResponsibleParty::organisation);
      }
  
      /**
@@@ -410,19 -397,21 +410,19 @@@
       *
       * @deprecated As of ISO 19115:2014, replaced by {@link AbstractParty#setContactInfo(Collection)}.
       */
-     @Deprecated
+     @Deprecated(since="1.0")
      public void setContactInfo(final Contact newValue) {
 -        final Collection<Party> parties = getParties();
 +        final Collection<AbstractParty> parties = getParties();
          checkWritePermission(valueIfDefined(parties));
          if (parties != null) {                                  // May be null on unmarshalling.
 -            final Iterator<Party> it = parties.iterator();
 +            final Iterator<AbstractParty> it = parties.iterator();
              while (it.hasNext()) {
 -                final Party party = it.next();
 -                if (party instanceof AbstractParty) {
 -                    ((AbstractParty) party).setContactInfo(newValue != null ? Collections.singleton(newValue) : null);
 -                    if (((AbstractParty) party).isEmpty()) {
 -                        it.remove();
 -                    }
 -                    return;
 +                final AbstractParty party = it.next();
 +                party.setContactInfo(newValue != null ? Collections.singleton(newValue) : null);
 +                if (party.isEmpty()) {
 +                    it.remove();
                  }
 +                return;
              }
          }
          /*
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultTelephone.java
index c3893476c8,17a8901433..69a0ad0f2a
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultTelephone.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultTelephone.java
@@@ -325,10 -274,10 +325,10 @@@ public class DefaultTelephone extends I
       * @return telephone numbers by which individuals can speak to the responsible organization or individual.
       *
       * @deprecated As of ISO 19115:2014, replaced by a {@linkplain #getNumber() number}
 -     *             with {@link TelephoneType#VOICE}.
 +     *             with {@code TelephoneType.VOICE}.
       */
      @Override
-     @Deprecated
+     @Deprecated(since="1.0")
      @Dependencies({"getNumber", "getNumberType"})
      @XmlElement(name = "voice", namespace = LegacyNamespaces.GMD)
      public final Collection<String> getVoices() {
@@@ -346,9 -295,9 +346,9 @@@
       * @param  newValues  the new telephone numbers, or {@code null} if none.
       *
       * @deprecated As of ISO 19115:2014, replaced by a {@linkplain #setNumber(String) number}
 -     *             with {@link TelephoneType#VOICE}.
 +     *             code {@code TelephoneType.VOICE}.
       */
-     @Deprecated
+     @Deprecated(since="1.0")
      public void setVoices(final Collection<? extends String> newValues) {
          ((LegacyTelephones) getVoices()).setValues(newValues);
      }
@@@ -361,10 -310,10 +361,10 @@@
       * @return telephone numbers of a facsimile machine for the responsible organization or individual.
       *
       * @deprecated As of ISO 19115:2014, replaced by a {@linkplain #getNumber() number}
 -     *             with {@link TelephoneType#FACSIMILE}.
 +     *             code {@code TelephoneType.FACSIMILE}.
       */
      @Override
-     @Deprecated
+     @Deprecated(since="1.0")
      @Dependencies({"getNumber", "getNumberType"})
      @XmlElement(name = "facsimile", namespace = LegacyNamespaces.GMD)
      public final Collection<String> getFacsimiles() {
@@@ -382,9 -331,9 +382,9 @@@
       * @param  newValues  the new telephone number, or {@code null} if none.
       *
       * @deprecated As of ISO 19115:2014, replaced by a {@linkplain #setNumber(String) number}
 -     *             with {@link TelephoneType#FACSIMILE}.
 +     *             with {@code TelephoneType.FACSIMILE}.
       */
-     @Deprecated
+     @Deprecated(since="1.0")
      public void setFacsimiles(final Collection<? extends String> newValues) {
          ((LegacyTelephones) getFacsimiles()).setValues(newValues);
      }
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/constraint/DefaultReleasability.java
index 407029973e,d482dba13c..f40c44a34a
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/constraint/DefaultReleasability.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/constraint/DefaultReleasability.java
@@@ -128,29 -137,12 +128,17 @@@ public class DefaultReleasability exten
      /**
       * Sets the parties to which the release statement applies.
       *
 +     * <div class="warning"><b>Upcoming API change — generalization</b><br>
 +     * The element type will be changed to the {@code Responsibility} interface
 +     * when GeoAPI will provide it (tentatively in GeoAPI 3.1).
 +     * </div>
 +     *
       * @param  newValues  the new parties.
       */
 -    public void setAddressees(final Collection<? extends Responsibility> newValues) {
 -        addressees = writeCollection(newValues, addressees, Responsibility.class);
 +    public void setAddressees(final Collection<? extends DefaultResponsibility> newValues) {
 +        addressees = writeCollection(newValues, addressees, DefaultResponsibility.class);
      }
  
-     /**
-      * Sets the parties to which the release statement applies.
-      *
-      * @param  newValues  the new parties.
-      *
-      * @deprecated Renamed {@link #setAddressees(Collection)}.
-      */
-     @Deprecated
-     public void getAddressees(final Collection<? extends DefaultResponsibility> newValues) {
-         setAddressees(newValues);
-     }
- 
      /**
       * Returns the release statement.
       *
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultMedium.java
index fcf15df6cc,1e68d884c0..a0a42dfeb0
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultMedium.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultMedium.java
@@@ -273,9 -288,9 +273,9 @@@ public class DefaultMedium extends ISOM
       *
       * @param  newValues  the new densities.
       */
-     @Deprecated
+     @Deprecated(since="1.0")
      public void setDensities(final Collection<? extends Double> newValues) {
 -        setDensity(LegacyPropertyAdapter.getSingleton(newValues, Double.class, null, DefaultMedium.class, "setDensities"));
 +        densities = writeCollection(newValues, densities, Double.class);
      }
  
      /**
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/AbstractIdentification.java
index 9e18c382ff,acb7f2142d..0c99ec9c11
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/AbstractIdentification.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/AbstractIdentification.java
@@@ -830,22 -837,9 +830,22 @@@ public class AbstractIdentification ext
       *
       * @deprecated As of ISO 19115:2014, replaced by {@link #setAssociatedResources(Collection)}.
       */
-     @Deprecated
+     @Deprecated(since="1.0")
      public void setAggregationInfo(final Collection<? extends AggregateInformation> newValues) {
 -        setAssociatedResources(newValues);
 +        checkWritePermission(associatedResources);
 +        /*
 +         * We can not invoke getAggregationInfo().setValues(newValues) because this method
 +         * is invoked by the constructor, which is itself invoked at JAXB marshalling time,
 +         * in which case getAggregationInfo() may return null.
 +         */
 +        List<DefaultAssociatedResource> r = null;
 +        if (newValues != null) {
 +            r = new ArrayList<DefaultAssociatedResource>(newValues.size());
 +            for (final AggregateInformation value : newValues) {
 +                r.add(DefaultAssociatedResource.castOrCopy(value));
 +            }
 +        }
 +        setAssociatedResources(r);
      }
  
  
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultMaintenanceInformation.java
index c57ce2a093,75f2966485..686b6494d4
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultMaintenanceInformation.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultMaintenanceInformation.java
@@@ -257,11 -241,11 +257,11 @@@ public class DefaultMaintenanceInformat
       * @return scheduled revision date, or {@code null}.
       *
       * @deprecated As of ISO 19115:2014, replaced by {@link #getMaintenanceDates()} in order to enable inclusion
 -     *             of a {@link DateType} to describe the type of the date. Note that {@link DateType#NEXT_UPDATE}
 -     *             was added to that code list.
 +     *             of a {@link DateType} to describe the type of the date. The associated date type is
 +     *             {@code DateType.valueOf("NEXT_UPDATE")}.
       */
      @Override
-     @Deprecated
+     @Deprecated(since="1.0")
      @Dependencies("getMaintenanceDates")
      @XmlElement(name = "dateOfNextUpdate", namespace = LegacyNamespaces.GMD)
      public Date getDateOfNextUpdate() {
diff --cc core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
index 0cb736e75a,e70021ff00..1eb0b616a1
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
@@@ -178,28 -177,12 +177,28 @@@ public class DefaultRecord implements R
       *
       * @return the dictionary of all (<var>name</var>, <var>value</var>) pairs in this record.
       *
 -     * @see RecordType#getFieldTypes()
 +     * @see RecordType#getMemberTypes()
 +     *
 +     * @deprecated Renamed {@link #getFields()} for consistency with the 2015 revision of ISO 19103 standard.
       */
      @Override
 +    @Deprecated
 +    public Map<MemberName, Object> getAttributes() {
 +        return getFields();
 +    }
 +
 +    /**
 +     * Returns the dictionary of all (<var>name</var>, <var>value</var>) pairs in this record.
 +     * This method returns a view which will delegate all {@code get} and {@code put} operations to
 +     * the {@link #locate(MemberName)} and {@link #set(MemberName, Object)} methods respectively.
 +     *
 +     * @return the dictionary of all (<var>name</var>, <var>value</var>) pairs in this record.
 +     *
 +     * @since 1.1
 +     */
      public Map<MemberName, Object> getFields() {
          if (values == null) {                         // Should never be null, except temporarily at XML unmarshalling time.
-             return Collections.emptyMap();
+             return Map.of();
          }
          return new AbstractMap<MemberName, Object>() {
              /** Returns the number of fields in the record. */
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/CustomMetadataTest.java
index 87186e4871,a23ef5488b..86d531f8ad
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/CustomMetadataTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/CustomMetadataTest.java
@@@ -110,28 -105,12 +110,28 @@@ public final strictfp class CustomMetad
                  return factory.createInternationalString(names);
              }
  
 -            @Override public Citation                  getCitation()           {return null;}
 -            @Override public Collection<TopicCategory> getTopicCategories()    {return null;}
 -            @Override public Collection<Extent>        getExtents()            {return null;}
 +            @Override public InternationalString                   getSupplementalInformation()    {return null;}
 +            @Override public Citation                              getCitation()                   {return null;}
 +            @Override public InternationalString                   getPurpose()                    {return null;}
 +            @Override public Collection<SpatialRepresentationType> getSpatialRepresentationTypes() {return null;}
 +            @Override public Collection<Resolution>                getSpatialResolutions()         {return null;}
 +            @Override public Collection<Locale>                    getLanguages()                  {return null;}
 +            @Override public Collection<CharacterSet>              getCharacterSets()              {return null;}
 +            @Override public Collection<TopicCategory>             getTopicCategories()            {return null;}
 +            @Override public Collection<Extent>                    getExtents()                    {return null;}
 +            @Override public Collection<String>                    getCredits()                    {return null;}
 +            @Override public Collection<Progress>                  getStatus()                     {return null;}
 +            @Override public Collection<ResponsibleParty>          getPointOfContacts()            {return null;}
 +            @Override public Collection<MaintenanceInformation>    getResourceMaintenances()       {return null;}
 +            @Override public Collection<BrowseGraphic>             getGraphicOverviews()           {return null;}
 +            @Override public Collection<Format>                    getResourceFormats()            {return null;}
 +            @Override public Collection<Keywords>                  getDescriptiveKeywords()        {return null;}
 +            @Override public Collection<Usage>                     getResourceSpecificUsages()     {return null;}
 +            @Override public Collection<Constraints>               getResourceConstraints()        {return null;}
 +@Deprecated @Override public Collection<AggregateInformation>      getAggregationInfo()            {return null;}
          };
          final DefaultMetadata data = new DefaultMetadata();
-         data.setIdentificationInfo(singleton(identification));
+         data.setIdentificationInfo(Set.of(identification));
          final String xml = XML.marshal(data);
          /*
           * A few simple checks.
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/CitationsTest.java
index e7494bc585,c9faf85073..963983e9c4
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/CitationsTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/CitationsTest.java
@@@ -287,14 -284,14 +286,14 @@@ public final strictfp class CitationsTe
       */
      @Test
      public void testIdentifierMatches() {
 -        final Identifier ogc = new DefaultIdentifier("OGC", "06-042", null);
 -        final Identifier iso = new DefaultIdentifier("ISO", "19128", null);
 +        final Identifier ogc = new Id("OGC", "06-042");
 +        final Identifier iso = new Id("ISO", "19128");
          final DefaultCitation citation = new DefaultCitation("Web Map Server");
-         citation.setIdentifiers(Arrays.asList(ogc, iso, new DefaultIdentifier("Foo", "06-042", null)));
+         citation.setIdentifiers(List.of(ogc, iso, new DefaultIdentifier("Foo", "06-042", null)));
          assertTrue ("With full identifier",  Citations.identifierMatches(citation, ogc, ogc.getCode()));
          assertTrue ("With full identifier",  Citations.identifierMatches(citation, iso, iso.getCode()));
 -        assertFalse("With wrong code",       Citations.identifierMatches(citation, new DefaultIdentifier("ISO", "19115", null), "19115"));
 -        assertFalse("With wrong code space", Citations.identifierMatches(citation, new DefaultIdentifier("Foo", "19128", null), "19128"));
 +        assertFalse("With wrong code",       Citations.identifierMatches(citation, new Id("ISO", "19115"), "19115"));
 +        assertFalse("With wrong code space", Citations.identifierMatches(citation, new Id("Foo", "19128"), "19128"));
          assertFalse("With wrong code",       Citations.identifierMatches(citation, "Foo"));
          assertTrue ("Without identifier",    Citations.identifierMatches(citation, "19128"));
          assertTrue ("With parsing",          Citations.identifierMatches(citation, "ISO:19128"));
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java
index b3ec5b107e,8fe47ab471..05093683ca
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java
@@@ -88,13 -90,13 +88,13 @@@ public final strictfp class DefaultCita
                  new SimpleInternationalString("Andākarento")));   // Actually a different script of the Japanese title.
  
          final DefaultResponsibleParty author = new DefaultResponsibleParty(Role.AUTHOR);
-         author.setParties(Collections.singleton(new DefaultIndividual("Testsuya Toyoda", null, null)));
+         author.setParties(Set.of(new DefaultIndividual("Testsuya Toyoda", null, null)));
  
 -        final DefaultResponsibleParty editor = new DefaultResponsibleParty(Role.EDITOR);
 +        final DefaultResponsibleParty editor = new DefaultResponsibleParty(Role.valueOf("EDITOR"));
-         editor.setParties(Collections.singleton(new DefaultOrganisation("Kōdansha", null, null, null)));
-         editor.setExtents(Collections.singleton(Extents.WORLD));
+         editor.setParties(Set.of(new DefaultOrganisation("Kōdansha", null, null, null)));
+         editor.setExtents(Set.of(Extents.WORLD));
  
-         citation.setCitedResponsibleParties(Arrays.asList(author, editor));
+         citation.setCitedResponsibleParties(List.of(author, editor));
          return citation;
      }
  
@@@ -253,12 -255,12 +253,12 @@@
          contact.getIdentifierMap().putSpecialized(IdentifierSpace.ID, "ip-protocol");
          final DefaultCitation c = new DefaultCitation("Fight against poverty");
          final DefaultResponsibleParty r1 = new DefaultResponsibleParty(Role.ORIGINATOR);
 -        final DefaultResponsibleParty r2 = new DefaultResponsibleParty(Role.FUNDER);
 +        final DefaultResponsibleParty r2 = new DefaultResponsibleParty(Role.valueOf("funder"));
-         r1.setParties(Collections.singleton(new DefaultIndividual("Maid Marian", null, contact)));
-         r2.setParties(Collections.singleton(new DefaultIndividual("Robin Hood",  null, contact)));
-         c.setCitedResponsibleParties(Arrays.asList(r1, r2));
+         r1.setParties(Set.of(new DefaultIndividual("Maid Marian", null, contact)));
+         r2.setParties(Set.of(new DefaultIndividual("Robin Hood",  null, contact)));
+         c.setCitedResponsibleParties(List.of(r1, r2));
 -        c.getDates().add(new DefaultCitationDate(TestUtilities.date("2015-10-17 00:00:00"), DateType.ADOPTED));
 -        c.getPresentationForms().add(PresentationForm.PHYSICAL_OBJECT);
 +        c.getDates().add(new DefaultCitationDate(TestUtilities.date("2015-10-17 00:00:00"), DateType.valueOf("adopted")));
 +        c.getPresentationForms().add(PresentationForm.valueOf("physicalObject"));
          /*
           * Check that XML file built by the marshaller is the same as the example file.
           */
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultContactTest.java
index ce74e4c5eb,1f001a364b..3f71e90576
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultContactTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/citation/DefaultContactTest.java
@@@ -82,13 -82,13 +82,13 @@@ public final strictfp class DefaultCont
      @SuppressWarnings("deprecation")
      public void testSetPhones() {
          init();
 -        final DefaultTelephone   tel1 = new DefaultTelephone("00.01", TelephoneType.SMS);
 -        final DefaultTelephone   tel2 = new DefaultTelephone("00.02", TelephoneType.VOICE);
 -        final DefaultTelephone   tel3 = new DefaultTelephone("00.03", TelephoneType.FACSIMILE);
 -        final DefaultTelephone   tel4 = new DefaultTelephone("00.04", TelephoneType.VOICE);
 +        final DefaultTelephone   tel1 = new DefaultTelephone("00.01", UnsupportedCodeList.valueOf("SMS"));
 +        final DefaultTelephone   tel2 = new DefaultTelephone("00.02", UnsupportedCodeList.VOICE);
 +        final DefaultTelephone   tel3 = new DefaultTelephone("00.03", UnsupportedCodeList.FACSIMILE);
 +        final DefaultTelephone   tel4 = new DefaultTelephone("00.04", UnsupportedCodeList.VOICE);
          final DefaultTelephone[] tels = new DefaultTelephone[] {tel1, tel2, tel3, tel4};
          final DefaultContact  contact = new DefaultContact();
-         contact.setPhones(Arrays.asList(tel1, tel2, tel3, tel4));
+         contact.setPhones(List.of(tel1, tel2, tel3, tel4));
          assertArrayEquals("getPhones", tels, contact.getPhones().toArray());
          /*
           * Test the deprecated 'getPhone()' method. Invoking that method shall emit
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java
index 6bb9b4d7f9,1e41e1df9b..085444c50e
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java
@@@ -84,10 -85,10 +84,10 @@@ public final strictfp class DefaultLega
                  "</mco:MD_LegalConstraints>\n";
  
          final DefaultLegalConstraints c = new DefaultLegalConstraints();
-         c.setUseConstraints(singleton(Restriction.LICENSE));
 -        c.setUseConstraints(Set.of(Restriction.LICENCE));
++        c.setUseConstraints(Set.of(Restriction.LICENSE));
          assertXmlEquals(xml, marshal(c), "xmlns:*");
          DefaultLegalConstraints actual = unmarshal(DefaultLegalConstraints.class, xml);
 -        assertSame(Restriction.LICENCE, getSingleton(actual.getUseConstraints()));
 +        assertSame(Restriction.LICENSE, getSingleton(actual.getUseConstraints()));
          assertEquals(c, actual);
          /*
           * Above code tested ISO 19115-3 (un)marshalling. Code below test legacy ISO 19139:2007 (un)marshalling.
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResourceTest.java
index 6ebf23e54f,1d98dd9363..7130c595a2
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResourceTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResourceTest.java
@@@ -46,11 -47,10 +46,11 @@@ public final strictfp class DefaultCoup
       * Creates the resource to use for testing purpose.
       */
      static DefaultCoupledResource create(final NameFactory factory) {
 -        final DefaultOperationMetadata operation = new DefaultOperationMetadata("Get Map",
 -                DistributedComputingPlatform.WEB_SERVICES, null);
 +        final DefaultOperationMetadata operation = new DefaultOperationMetadata();
 +        operation.setOperationName("Get Map");
-         operation.setDistributedComputingPlatforms(singleton(UnsupportedCodeList.valueOf("WEB_SERVICES")));
-         operation.setParameters(singleton((ParameterDescriptor<?>) ServiceParameterTest.create()));
-         operation.setConnectPoints(singleton(NilReason.MISSING.createNilObject(OnlineResource.class)));
++        operation.setDistributedComputingPlatforms(Set.of(UnsupportedCodeList.valueOf("WEB_SERVICES")));
+         operation.setParameters(Set.of((ParameterDescriptor<?>) ServiceParameterTest.create()));
+         operation.setConnectPoints(Set.of(NilReason.MISSING.createNilObject(OnlineResource.class)));
  
          final DefaultCoupledResource resource = new DefaultCoupledResource();
          resource.setScopedName((ScopedName) factory.createGenericName(null, "mySpace", "ABC-123"));
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java
index b27d919138,3c26eac39b..41fdcc0039
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java
@@@ -16,11 -16,17 +16,12 @@@
   */
  package org.apache.sis.metadata.iso.identification;
  
+ import java.util.Set;
  import javax.xml.bind.JAXBException;
  import org.opengis.util.NameFactory;
 -import org.opengis.parameter.ParameterDirection;
  import org.opengis.parameter.ParameterDescriptor;
  import org.opengis.metadata.citation.Citation;
 -import org.opengis.metadata.identification.CouplingType;
 -import org.opengis.metadata.identification.CoupledResource;
 -import org.opengis.metadata.identification.OperationMetadata;
 -import org.opengis.metadata.identification.ServiceIdentification;
 -import org.opengis.metadata.identification.DistributedComputingPlatform;
 +import org.apache.sis.internal.geoapi.evolution.UnsupportedCodeList;
  import org.apache.sis.metadata.iso.citation.DefaultCitation;
  import org.apache.sis.internal.system.DefaultFactories;
  import org.apache.sis.metadata.xml.TestUsingFile;
@@@ -63,10 -68,10 +63,10 @@@ public final strictfp class DefaultServ
                  factory.createGenericName(null, "Web Map Server"),      // serviceType
                  NilReason.MISSING.createNilObject(Citation.class),      // citation
                  "A dummy service for testing purpose.");                // abstract
-         id.setServiceTypeVersions(singleton("1.0"));
-         id.setCoupledResources(singleton(resource));
+         id.setServiceTypeVersions(Set.of("1.0"));
+         id.setCoupledResources(Set.of(resource));
 -        id.setCouplingType(CouplingType.LOOSE);
 +        id.setCouplingType(UnsupportedCodeList.valueOf("LOOSE"));
-         id.setContainsOperations(singleton(resource.getOperation()));
+         id.setContainsOperations(Set.of(resource.getOperation()));
          return id;
      }
  
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataFallbackVerifier.java
index 3cfbd28bec,9429c08c41..99ddaa8efc
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataFallbackVerifier.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataFallbackVerifier.java
@@@ -16,13 -16,12 +16,11 @@@
   */
  package org.apache.sis.metadata.sql;
  
- import java.util.Arrays;
  import java.util.Set;
- import java.util.HashSet;
  import org.opengis.util.InternationalString;
  import org.opengis.metadata.Identifier;
 -import org.opengis.metadata.citation.Party;
  import org.opengis.metadata.citation.Citation;
 -import org.opengis.metadata.citation.Responsibility;
 +import org.opengis.metadata.citation.ResponsibleParty;
  import org.apache.sis.internal.simple.CitationConstant;
  import org.apache.sis.metadata.iso.citation.Citations;
  import org.apache.sis.metadata.MetadataStandard;
diff --cc core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
index 4cb97f8907,24401459ae..01f8227743
--- a/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
@@@ -16,7 -16,8 +16,7 @@@
   */
  package org.apache.sis.metadata.sql;
  
- import java.util.Collections;
+ import java.util.Set;
 -import org.opengis.metadata.citation.Contact;
  import org.opengis.metadata.citation.Citation;
  import org.opengis.metadata.citation.PresentationForm;
  import org.opengis.metadata.citation.OnLineFunction;
diff --cc core/sis-metadata/src/test/java/org/apache/sis/test/MetadataAssert.java
index 4e99c36c1c,04269a6334..79aa4b20af
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/MetadataAssert.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/MetadataAssert.java
@@@ -121,10 -117,10 +120,10 @@@ public strictfp class MetadataAssert ex
       */
      public static void assertFeatureSourceEquals(final String name, final String[] features, final Source source) {
          assertEquals("metadata.lineage.source.sourceCitation.title", name, String.valueOf(source.getSourceCitation().getTitle()));
 -        final Scope scope = source.getScope();
 +        final DefaultScope scope = (DefaultScope) ((DefaultSource) source).getScope();
          assertNotNull("metadata.lineage.source.scope", scope);
          assertEquals("metadata.lineage.source.scope.level", ScopeCode.FEATURE_TYPE, scope.getLevel());
-         final Object[] actual = CollectionsExt.toArray(getSingleton(scope.getLevelDescription()).getFeatures(), Object.class);
 -        final var actual = getSingleton(scope.getLevelDescription()).getFeatures().toArray(CharSequence[]::new);
++        final Object[] actual = getSingleton(scope.getLevelDescription()).getFeatures().toArray();
          for (int i=0; i<actual.length; i++) {
              actual[i] = actual[i].toString();
          }
diff --cc core/sis-metadata/src/test/java/org/apache/sis/test/mock/MetadataMock.java
index 5479bc2022,3303ddb1cf..bcdd092e7f
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/mock/MetadataMock.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/mock/MetadataMock.java
@@@ -16,9 -16,12 +16,9 @@@
   */
  package org.apache.sis.test.mock;
  
 -import java.util.Map;
 +import java.util.Locale;
+ import java.util.Set;
  import java.util.Collection;
--import java.util.Collections;
 -import java.util.Locale;
 -import java.nio.charset.Charset;
  import javax.xml.bind.annotation.XmlElement;
  import javax.xml.bind.annotation.XmlRootElement;
  import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@@@ -72,8 -85,9 +72,8 @@@ public final strictfp class MetadataMoc
       * @return {@link #language}
       */
      @Override
 -    @Deprecated
      public Collection<Locale> getLanguages() {
-         return (language != null) ? Collections.singleton(language) : Collections.emptySet();
+         return (language != null) ? Set.of(language) : Set.of();
      }
  
      /**
diff --cc core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/FinalLocationType.java
index 3bf250350b,9c1d259e12..60605b3c2d
--- a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/FinalLocationType.java
+++ b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/FinalLocationType.java
@@@ -161,12 -163,12 +161,12 @@@ final class FinalLocationType extends A
       * @param rs        the reference system to assign to the new location types.
       * @param existing  an initially empty identity hash map for internal usage by this method.
       */
 -    static List<LocationType> snapshot(final Collection<? extends LocationType> types,
 -            final ReferenceSystemUsingIdentifiers rs, final Map<LocationType, FinalLocationType> existing)
 +    static List<AbstractLocationType> snapshot(final Collection<? extends AbstractLocationType> types,
 +            final ReferencingByIdentifiers rs, final Map<AbstractLocationType, FinalLocationType> existing)
      {
-         final AbstractLocationType[] array = types.toArray(new AbstractLocationType[types.size()]);
 -        final LocationType[] array = types.toArray(LocationType[]::new);
++        final AbstractLocationType[] array = types.toArray(AbstractLocationType[]::new);
          for (int i=0; i < array.length; i++) {
 -            final LocationType source = array[i];
 +            final AbstractLocationType source = array[i];
              ArgumentChecks.ensureNonNullElement("types", i, source);
              FinalLocationType copy = existing.get(source);
              if (copy == null) {
diff --cc core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
index 923bb4a085,d80d5ca66d..c5b80c0144
--- a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
+++ b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
@@@ -76,10 -80,12 +76,9 @@@ import org.apache.sis.measure.Latitude
  import org.apache.sis.measure.Quantities;
  import org.apache.sis.measure.Units;
  
 -import static java.util.logging.Logger.getLogger;
  
  // Branch-dependent imports
 -import org.opengis.metadata.citation.Party;
 -import org.opengis.referencing.gazetteer.Location;
 -import org.opengis.referencing.gazetteer.LocationType;
 +import org.apache.sis.metadata.iso.citation.AbstractParty;
- import org.apache.sis.internal.jdk9.JDK9;
  
  
  /**
diff --cc core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/LocationTypeTest.java
index e69e23ae97,e0c1bbe950..a7a335d818
--- a/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/LocationTypeTest.java
+++ b/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/LocationTypeTest.java
@@@ -180,8 -182,7 +179,7 @@@ public final strictfp class LocationTyp
      @Test
      @DependsOnMethod("testInheritance")
      public void testSnapshot() {
-         final List<AbstractLocationType> snapshot = ModifiableLocationType.snapshot(null, create(true));
-         verify(snapshot.toArray(new AbstractLocationType[snapshot.size()]));
 -        verify(ModifiableLocationType.snapshot(null, create(true)).toArray(LocationType[]::new));
++        verify(ModifiableLocationType.snapshot(null, create(true)).toArray(AbstractLocationType[]::new));
      }
  
      /**
diff --cc core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
index e018487c84,02d8863e5a..30dc73773e
--- a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/Formatter.java
@@@ -853,12 -851,12 +852,12 @@@ public class Formatter implements Local
              appendForSubtypes(object);
          }
          if (showIDs) {
 -            Collection<? extends Identifier> identifiers = object.getIdentifiers();
 +            Collection<ReferenceIdentifier> identifiers = object.getIdentifiers();
              if (identifiers != null) {                                                  // Paranoiac check
                  if (filterID) {
 -                    for (final Identifier id : identifiers) {
 +                    for (final ReferenceIdentifier id : identifiers) {
                          if (Citations.identifierMatches(authority, id.getAuthority())) {
-                             identifiers = Collections.singleton(id);
+                             identifiers = Set.of(id);
                              break;
                          }
                      }
diff --cc core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
index e6f7e8b8be,2c7b8ab36e..d77873c5bd
--- a/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/internal/jaxb/referencing/CodeTest.java
@@@ -16,9 -16,9 +16,9 @@@
   */
  package org.apache.sis.internal.jaxb.referencing;
  
- import java.util.Collections;
+ import java.util.Set;
  import org.opengis.referencing.crs.GeographicCRS;
 -import org.opengis.metadata.Identifier;
 +import org.opengis.referencing.ReferenceIdentifier;
  import org.apache.sis.internal.util.Constants;
  import org.apache.sis.internal.simple.SimpleCitation;
  import org.apache.sis.referencing.ImmutableIdentifier;
@@@ -94,8 -94,8 +94,8 @@@ public final strictfp class CodeTest ex
      @Test
      @DependsOnMethod("testWithVersion")
      public void testForIdentifiedObject() {
 -        final Identifier id = new ImmutableIdentifier(Citations.EPSG, "EPSG", "4326", "8.2", null);
 +        final ReferenceIdentifier id = new ImmutableIdentifier(Citations.EPSG, "EPSG", "4326", "8.2", null);
-         final Code value = Code.forIdentifiedObject(GeographicCRS.class, Collections.singleton(id));
+         final Code value = Code.forIdentifiedObject(GeographicCRS.class, Set.of(id));
          assertNotNull(value);
          assertEquals("codeSpace", Constants.IOGP, value.codeSpace);
          assertEquals("code", "urn:ogc:def:crs:EPSG:8.2:4326", value.code);
@@@ -111,8 -111,8 +111,8 @@@
          final DefaultCitation authority = new DefaultCitation("EPSG");
          authority.getIdentifiers().add(new ImmutableIdentifier(null, "OGP", "EPSG"));
  
 -        final Identifier id = new ImmutableIdentifier(authority, "EPSG", "4326", "8.2", null);
 +        final ReferenceIdentifier id = new ImmutableIdentifier(authority, "EPSG", "4326", "8.2", null);
-         final Code value = Code.forIdentifiedObject(GeographicCRS.class, Collections.singleton(id));
+         final Code value = Code.forIdentifiedObject(GeographicCRS.class, Set.of(id));
          assertNotNull(value);
          assertEquals("codeSpace", "OGP", value.codeSpace);
          assertEquals("code", "urn:ogc:def:crs:EPSG:8.2:4326", value.code);
diff --cc core/sis-referencing/src/test/java/org/apache/sis/parameter/DefaultParameterDescriptorGroupTest.java
index d9c709e326,88e0487826..61a10bf572
--- a/core/sis-referencing/src/test/java/org/apache/sis/parameter/DefaultParameterDescriptorGroupTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/parameter/DefaultParameterDescriptorGroupTest.java
@@@ -19,7 -19,7 +19,6 @@@ package org.apache.sis.parameter
  import java.util.Map;
  import java.util.List;
  import java.util.HashMap;
- import java.util.Collections;
 -import org.opengis.parameter.ParameterDirection;
  import org.opengis.parameter.GeneralParameterDescriptor;
  import org.opengis.parameter.ParameterNotFoundException;
  import org.apache.sis.internal.util.Constants;
diff --cc core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java
index 278e8dbecd,d985502dce..b7ae48f2d0
--- a/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java
@@@ -16,13 -16,15 +16,13 @@@
   */
  package org.apache.sis.parameter;
  
+ import java.util.Map;
  import java.util.Set;
  import java.util.Collection;
- import java.util.Collections;
  import javax.measure.Unit;
  import org.opengis.parameter.ParameterDescriptor;
 -import org.opengis.parameter.ParameterDirection;
  import org.opengis.parameter.ParameterValue;
  import org.opengis.parameter.ParameterValueGroup;
 -import org.opengis.util.TypeName;
  import org.opengis.util.GenericName;
  import org.opengis.util.InternationalString;
  import org.apache.sis.measure.Range;
diff --cc core/sis-referencing/src/test/java/org/apache/sis/parameter/TensorParametersTest.java
index a89901ea3b,bb1969ebd1..79f7e49504
--- a/core/sis-referencing/src/test/java/org/apache/sis/parameter/TensorParametersTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/parameter/TensorParametersTest.java
@@@ -29,7 -29,7 +29,6 @@@ import org.apache.sis.test.TestCase
  import org.junit.AfterClass;
  import org.junit.Test;
  
- import static java.util.Collections.singletonMap;
 -import static org.opengis.test.Validators.validate;
  import static org.apache.sis.test.ReferencingAssert.*;
  import static org.apache.sis.internal.util.Constants.NUM_ROW;
  import static org.apache.sis.internal.util.Constants.NUM_COL;
@@@ -319,7 -319,8 +318,7 @@@ public strictfp class TensorParametersT
                      }
                  }
                  final ParameterValueGroup group = param.createValueGroup(
-                         singletonMap(ParameterDescriptor.NAME_KEY, "Test"), matrix);
+                         Map.of(ParameterDescriptor.NAME_KEY, "Test"), matrix);
 -                validate(group);
                  assertEquals(NUM_ROW,    numRow, group.parameter(NUM_ROW).intValue());
                  assertEquals(NUM_COL,    numCol, group.parameter(NUM_COL).intValue());
                  assertEquals("elements", matrix, param.toMatrix(group));
diff --cc core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
index cf85e0fa75,7d6e3a7da0..10d438272f
--- a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataTest.java
@@@ -155,12 -139,12 +153,12 @@@ public final strictfp class MetadataTes
              online.setProtocol("http");
              final DefaultContact contact = new DefaultContact(online);
              contact.getIdentifierMap().putSpecialized(IdentifierSpace.ID, "IFREMER");
-             contact.setPhones(Arrays.asList(
+             contact.setPhones(List.of(
 -                    new DefaultTelephone("+33 (0)2 xx.xx.xx.x6", TelephoneType.VOICE),
 -                    new DefaultTelephone("+33 (0)2 xx.xx.xx.x4", TelephoneType.FACSIMILE)
 +                    telephone("+33 (0)2 xx.xx.xx.x6", "VOICE"),
 +                    telephone("+33 (0)2 xx.xx.xx.x4", "FACSIMILE")
              ));
              final DefaultAddress address = new DefaultAddress();
-             address.setDeliveryPoints(singleton("Brest institute"));
+             address.setDeliveryPoints(Set.of("Brest institute"));
              address.setCity(new SimpleInternationalString("Plouzane"));
              address.setPostalCode("29280");
              address.setCountry(country);
@@@ -184,12 -168,12 +182,12 @@@
                  final DefaultOnlineResource online = new DefaultOnlineResource(URI.create("http://www.com.univ-mrs.fr/LOB/"));
                  online.setProtocol("http");
                  final DefaultContact contact = new DefaultContact(online);
-                 contact.setPhones(Arrays.asList(
+                 contact.setPhones(List.of(
 -                        new DefaultTelephone("+33 (0)4 xx.xx.xx.x5", TelephoneType.VOICE),
 -                        new DefaultTelephone("+33 (0)4 xx.xx.xx.x8", TelephoneType.FACSIMILE)
 +                        telephone("+33 (0)4 xx.xx.xx.x5", "VOICE"),
 +                        telephone("+33 (0)4 xx.xx.xx.x8", "FACSIMILE")
                  ));
                  final DefaultAddress address = new DefaultAddress();
-                 address.setDeliveryPoints(singleton("Oceanology institute"));
+                 address.setDeliveryPoints(Set.of("Oceanology institute"));
                  address.setCity(new SimpleInternationalString("Marseille"));
                  address.setPostalCode("13288");
                  address.setCountry(country);
@@@ -236,22 -220,22 +234,22 @@@
               */
              {
                  final DefaultLegalConstraints constraint = new DefaultLegalConstraints();
-                 constraint.setAccessConstraints(singleton(Restriction.LICENSE));
-                 identification.setResourceConstraints(singleton(constraint));
 -                constraint.setAccessConstraints(Set.of(Restriction.LICENCE));
++                constraint.setAccessConstraints(Set.of(Restriction.LICENSE));
+                 identification.setResourceConstraints(Set.of(constraint));
              }
              /*
               * Data indentification / Aggregate information.
               */
              {
                  @SuppressWarnings("deprecation")
 -                final DefaultAssociatedResource aggregateInfo = new DefaultAggregateInformation();
 +                final DefaultAggregateInformation aggregateInfo = new DefaultAggregateInformation();
                  final DefaultCitation name = new DefaultCitation("Some oceanographic campaign");
-                 name.setAlternateTitles(singleton(new SimpleInternationalString("Pseudo group of data")));
-                 name.setDates(singleton(new DefaultCitationDate(TestUtilities.date("1990-06-04 22:00:00"), DateType.REVISION)));
+                 name.setAlternateTitles(Set.of(new SimpleInternationalString("Pseudo group of data")));
+                 name.setDates(Set.of(new DefaultCitationDate(TestUtilities.date("1990-06-04 22:00:00"), DateType.REVISION)));
                  aggregateInfo.setName(name);
                  aggregateInfo.setInitiativeType(InitiativeType.CAMPAIGN);
 -                aggregateInfo.setAssociationType(AssociationType.LARGER_WORK_CITATION);
 +                aggregateInfo.setAssociationType(AssociationType.LARGER_WORD_CITATION); // There is a typo ("WORD" → "WORK"), but we have to use the wrong spelling for this branch.
-                 identification.setAggregationInfo(singleton(aggregateInfo));
+                 identification.setAssociatedResources(Set.of(aggregateInfo));
              }
              /*
               * Data indentification / Extent.
diff --cc ide-project/NetBeans/nbproject/genfiles.properties
index 9598b10f14,874d87f86b..b73c624292
--- a/ide-project/NetBeans/nbproject/genfiles.properties
+++ b/ide-project/NetBeans/nbproject/genfiles.properties
@@@ -3,6 -3,6 +3,6 @@@
  build.xml.data.CRC32=58e6b21c
  build.xml.script.CRC32=462eaba0
  build.xml.stylesheet.CRC32=28e38971@1.53.1.46
- nbproject/build-impl.xml.data.CRC32=f188e30a
- nbproject/build-impl.xml.script.CRC32=933f5834
- nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.101.0.48
 -nbproject/build-impl.xml.data.CRC32=e6c2891e
 -nbproject/build-impl.xml.script.CRC32=02d4f276
++nbproject/build-impl.xml.data.CRC32=61740f25
++nbproject/build-impl.xml.script.CRC32=101e7069
+ nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.104.0.48
diff --cc pom.xml
index db966691dc,1e8f742594..c24c9dff72
--- a/pom.xml
+++ b/pom.xml
@@@ -873,9 -867,9 +867,9 @@@
            <validateLinks>true</validateLinks>                   <!-- Validates content of package-list resources. -->
            <detectJavaApiLink>false</detectJavaApiLink>          <!-- Let us declare link to Java API. -->
            <links>
-             <link>https://docs.oracle.com/javase/8/docs/api</link>
+             <link>https://docs.oracle.com/en/java/javase/11/docs/api</link>
              <link>http://unitsofmeasurement.github.io/unit-api/site/apidocs</link>
 -            <link>http://www.geoapi.org/snapshot/javadoc</link>
 +            <link>http://www.geoapi.org/3.0/javadoc</link>
            </links>
  
            <additionalOptions>
diff --cc storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
index 3bc391981f,ed51bc0d94..080ca1f106
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
@@@ -80,8 -79,8 +79,7 @@@ import ucar.nc2.constants.ACDD
  import ucar.nc2.constants.CDM;
  import ucar.nc2.constants.CF;
  
- import static java.util.Collections.singleton;
  import static org.apache.sis.storage.netcdf.AttributeNames.*;
 -import static org.apache.sis.internal.util.CollectionsExt.first;
  
  
  /**
@@@ -513,11 -518,13 +511,13 @@@ split:  while ((start = CharSequences.s
              if (individualName != null || organisationName != null || contact != null) {        // Do not test role.
                  AbstractParty party = null;
                  if (individualName   != null) party = new DefaultIndividual(individualName, null, null);
 -                if (organisationName != null) party = new DefaultOrganisation(organisationName, null, (Individual) party, null);
 +                if (organisationName != null) party = new DefaultOrganisation(organisationName, null, (DefaultIndividual) party, null);
                  if (party            == null) party = isOrganisation(keys) ? new DefaultOrganisation() : new DefaultIndividual();
-                 if (contact          != null) party.setContactInfo(singleton(contact));
+                 if (contact          != null) party.setContactInfo(Set.of(contact));
                  responsibility = new DefaultResponsibleParty(role);
-                 ((DefaultResponsibleParty) responsibility).setParties(singleton(party));
+                 if (party != null) {
+                     ((DefaultResponsibleParty) responsibility).setParties(Set.of(party));
+                 }
              }
          }
          return responsibility;
diff --cc storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java
index eed2b67459,4c5370968e..64427ed861
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java
@@@ -576,20 -578,21 +576,21 @@@ final class Store extends URIDataStore 
              }
              properties.add(createProperty(name, type, minOccurrence, maxOccurrence, characteristics));
          }
+         // Do not use Map.of(…) because `name` may be null. Let constructor throw the exception.
          final String name = IOUtilities.filenameWithoutExtension(super.getDisplayName());
          return new DefaultFeatureType(Collections.singletonMap(DefaultFeatureType.NAME_KEY, name),
-                 false, null, properties.toArray(new AbstractIdentifiedType[properties.size()]));
 -                                      false, null, properties.toArray(PropertyType[]::new));
++                                      false, null, properties.toArray(AbstractIdentifiedType[]::new));
      }
  
      /**
       * Creates a property type for the given name and type.
       * This is a helper method for {@link #parseFeatureType(List)}.
       */
 -    private static PropertyType createProperty(final String name, final Class<?> type,
 -            final int minOccurrence, final int maxOccurrence, final AttributeType<?>[] characteristics)
 +    private static AbstractIdentifiedType createProperty(final String name, final Class<?> type,
 +            final int minOccurrence, final int maxOccurrence, final DefaultAttributeType<?>[] characteristics)
      {
          return new DefaultAttributeType<>(Collections.singletonMap(DefaultAttributeType.NAME_KEY, name),
-                 type, minOccurrence, maxOccurrence, null, characteristics);
+                                           type, minOccurrence, maxOccurrence, null, characteristics);
      }
  
      /**
diff --cc storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/JoinFeatureSet.java
index 9d7d340da0,d8297aff83..c8dfd8d964
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/JoinFeatureSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/JoinFeatureSet.java
@@@ -231,16 -232,16 +230,16 @@@ public class JoinFeatureSet extends Agg
           * We could build the FeatureType only when first needed, but the type is required by the iterators.
           * Since we are going to need the type for any use of this JoinFeatureSet, better to create it now.
           */
 -        PropertyType[] properties = new PropertyType[] {
 +        AbstractIdentifiedType[] properties = new AbstractIdentifiedType[] {
-             new DefaultAssociationRole(name(leftAlias),  leftType,  joinType.minimumOccurs(false), 1),
-             new DefaultAssociationRole(name(rightAlias), rightType, joinType.minimumOccurs(true),  1)
+             new DefaultAssociationRole(properties(leftAlias),  leftType,  joinType.minimumOccurs(false), 1),
+             new DefaultAssociationRole(properties(rightAlias), rightType, joinType.minimumOccurs(true),  1)
          };
          final String identifierDelimiter = Containers.property(featureInfo, "identifierDelimiter", String.class);
          if (identifierDelimiter != null && AttributeConvention.hasIdentifier(leftType)
                                          && AttributeConvention.hasIdentifier(rightType))
          {
 -            final Operation identifier = FeatureOperations.compound(
 +            final AbstractOperation identifier = FeatureOperations.compound(
-                     name(AttributeConvention.IDENTIFIER_PROPERTY), identifierDelimiter,
+                     properties(AttributeConvention.IDENTIFIER_PROPERTY), identifierDelimiter,
                      Containers.property(featureInfo, "identifierPrefix", String.class),
                      Containers.property(featureInfo, "identifierSuffix", String.class), properties);
              properties = ArraysExt.insert(properties, 0, 1);
diff --cc storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java
index 06f07681d3,421e59a612..46fdbe2bb0
--- a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java
+++ b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java
@@@ -98,10 -101,10 +102,10 @@@ public final strictfp class StoreTest e
      @Test
      public void testGetMetadata() throws DataStoreException {
          final Metadata metadata;
-         try (Store store = open()) {
+         try (Store store = open(true)) {
              metadata = store.getMetadata();
          }
 -        final Extent extent = getSingleton(getSingleton(metadata.getIdentificationInfo()).getExtents());
 +        final Extent extent = getSingleton(((AbstractIdentification) getSingleton(metadata.getIdentificationInfo())).getExtents());
          final GeographicBoundingBox bbox = (GeographicBoundingBox) getSingleton(extent.getGeographicElements());
          assertEquals("westBoundLongitude", 50.23, bbox.getWestBoundLongitude(), STRICT);
          assertEquals("eastBoundLongitude", 50.31, bbox.getEastBoundLongitude(), STRICT);
@@@ -117,10 -120,10 +121,10 @@@
       */
      @Test
      public void testStaticFeatures() throws DataStoreException {
-         try (Store store = open()) {
+         try (Store store = open(true)) {
              verifyFeatureType(store.featureType, double[].class, 1);
              assertEquals("foliation", Foliation.TIME, store.foliation);
 -            final Iterator<Feature> it = store.features(false).iterator();
 +            final Iterator<AbstractFeature> it = store.features(false).iterator();
              assertPropertyEquals(it.next(), "a", "12:33:51", "12:36:11", new double[] {11, 2, 12, 3},        "walking", 1);
              assertPropertyEquals(it.next(), "b", "12:33:51", "12:36:51", new double[] {10, 2, 11, 3},        "walking", 2);
              assertPropertyEquals(it.next(), "a", "12:36:11", "12:36:51", new double[] {12, 3, 10, 3},        "walking", 2);
@@@ -146,13 -149,13 +150,13 @@@
      @Test
      public void testMovingFeatures() throws DataStoreException {
          isMovingFeature = true;
-         try (Store store = new Store(null, new StorageConnector(testData()))) {
+         try (Store store = open(false)) {
              verifyFeatureType(store.featureType, Polyline.class, Integer.MAX_VALUE);
              assertEquals("foliation", Foliation.TIME, store.foliation);
 -            final Iterator<Feature> it = store.features(false).iterator();
 +            final Iterator<AbstractFeature> it = store.features(false).iterator();
-             assertPropertyEquals(it.next(), "a", "12:33:51", "12:36:51", new double[] {11, 2, 12, 3, 10, 3}, singletonList("walking"), Arrays.asList(1, 2));
-             assertPropertyEquals(it.next(), "b", "12:33:51", "12:36:51", new double[] {10, 2, 11, 3},        singletonList("walking"), singletonList(2));
-             assertPropertyEquals(it.next(), "c", "12:33:51", "12:36:51", new double[] {12, 1, 10, 2, 11, 3}, singletonList("vehicle"), singletonList(1));
+             assertPropertyEquals(it.next(), "a", "12:33:51", "12:36:51", new double[] {11, 2, 12, 3, 10, 3}, List.of("walking"), List.of(1, 2));
+             assertPropertyEquals(it.next(), "b", "12:33:51", "12:36:51", new double[] {10, 2, 11, 3},        List.of("walking"), List.of(2));
+             assertPropertyEquals(it.next(), "c", "12:33:51", "12:36:51", new double[] {12, 1, 10, 2, 11, 3}, List.of("vehicle"), List.of(1));
              assertFalse(it.hasNext());
          }
      }
diff --cc storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java
index cb882b1817,e507067c89..c743a128bc
--- a/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java
+++ b/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java
@@@ -60,10 -58,10 +59,10 @@@ public final strictfp class Concatenate
          builder.addAttribute(String.class).setName("name");
          builder.addAttribute(Integer.class).setName("population");
  
 -        final FeatureType ft = builder.build();
 +        final DefaultFeatureType ft = builder.build();
          final FeatureSet cfs = ConcatenatedFeatureSet.create(
-                 new MemoryFeatureSet(null, ft, Arrays.asList(ft.newInstance(), ft.newInstance())),
-                 new MemoryFeatureSet(null, ft, Arrays.asList(ft.newInstance())));
+                 new MemoryFeatureSet(null, ft, List.of(ft.newInstance(), ft.newInstance())),
+                 new MemoryFeatureSet(null, ft, List.of(ft.newInstance())));
  
          assertSame("getType()", ft, cfs.getType());
          assertEquals("features.count()", 3, cfs.features(false).count());
@@@ -109,10 -107,10 +108,10 @@@
          t1f2.setPropertyValue("value", 3);
          t1f2.setPropertyValue("label", "first-second");
  
-         final FeatureSet t1fs = new MemoryFeatureSet(null, t1, Arrays.asList(t1f1, t1f2));
+         final FeatureSet t1fs = new MemoryFeatureSet(null, t1, List.of(t1f1, t1f2));
  
          // Populate a feature set for second type.
 -        final Feature t2f1 = t2.newInstance();
 +        final AbstractFeature t2f1 = t2.newInstance();
          t2f1.setPropertyValue("value", 3);
          t2f1.setPropertyValue("label", "second-first");
  
@@@ -153,11 -151,11 +152,11 @@@
      public void noCommonType() {
          final FeatureTypeBuilder builder = new FeatureTypeBuilder();
          builder.setName("super");
 -        final FeatureType mockSuperType = builder.build();
 -        final FeatureType firstType  = builder.setSuperTypes(mockSuperType).setName("first").build();
 -        final FeatureType secondType = builder.clear().setName("second").build();
 +        final DefaultFeatureType mockSuperType = builder.build();
 +        final DefaultFeatureType firstType  = builder.setSuperTypes(mockSuperType).setName("first").build();
 +        final DefaultFeatureType secondType = builder.clear().setName("second").build();
-         final FeatureSet fs1 = new MemoryFeatureSet(null, firstType,  Collections.emptyList());
-         final FeatureSet fs2 = new MemoryFeatureSet(null, secondType, Collections.emptyList());
+         final FeatureSet fs1 = new MemoryFeatureSet(null, firstType,  List.of());
+         final FeatureSet fs2 = new MemoryFeatureSet(null, secondType, List.of());
          try {
              FeatureSet concatenation = ConcatenatedFeatureSet.create(fs1, fs2);
              fail("Concatenation succeeded despite the lack of common type. Result is:\n" + concatenation);
@@@ -182,8 -180,8 +181,8 @@@
              // This is the expected exception.
          }
          final FeatureTypeBuilder builder = new FeatureTypeBuilder().setName("mock");
 -        final FeatureType mockType = builder.build();
 +        final DefaultFeatureType mockType = builder.build();
-         final FeatureSet fs1 = new MemoryFeatureSet(null, mockType, Collections.emptyList());
+         final FeatureSet fs1 = new MemoryFeatureSet(null, mockType, List.of());
          final FeatureSet set = ConcatenatedFeatureSet.create(fs1);
          assertSame("A concatenation has been created from a single type.", fs1, set);
      }
diff --cc storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/JoinFeatureSetTest.java
index 8b3806694f,4c5191ff10..d10f93d9b9
--- a/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/JoinFeatureSetTest.java
+++ b/storage/sis-storage/src/test/java/org/apache/sis/storage/aggregate/JoinFeatureSetTest.java
@@@ -71,8 -71,8 +71,8 @@@ public final strictfp class JoinFeature
          builder.addAttribute( String.class).setName(AttributeConvention.IDENTIFIER_PROPERTY);
          builder.addAttribute( String.class).setName("myNameSpace", "att1");
          builder.addAttribute(Integer.class).setName("myNameSpace", "att2");
 -        final FeatureType type1 = builder.build();
 +        final DefaultFeatureType type1 = builder.build();
-         featureSet1 = new MemoryFeatureSet(null, type1, Arrays.asList(
+         featureSet1 = new MemoryFeatureSet(null, type1, List.of(
                  newFeature1(type1, "fid_1_0", "str1",   1),
                  newFeature1(type1, "fid_1_1", "str2",   2),
                  newFeature1(type1, "fid_1_2", "str3",   3),
@@@ -83,8 -83,8 +83,8 @@@
          builder.addAttribute( String.class).setName(AttributeConvention.IDENTIFIER_PROPERTY);
          builder.addAttribute(Integer.class).setName("otherNameSpace", "att3");
          builder.addAttribute( Double.class).setName("otherNameSpace", "att4");
 -        final FeatureType type2 = builder.build();
 +        final DefaultFeatureType type2 = builder.build();
-         featureSet2 = new MemoryFeatureSet(null, type2, Arrays.asList(
+         featureSet2 = new MemoryFeatureSet(null, type2, List.of(
                  newFeature2(type2, "fid_2_0",  1, 10),
                  newFeature2(type2, "fid_2_1",  2, 20),
                  newFeature2(type2, "fid_2_2",  2, 30),
diff --cc storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Copyright.java
index f493afd918,22eb6f12cb..178e294276
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Copyright.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Copyright.java
@@@ -158,7 -159,7 +158,7 @@@ resp:   for (final DefaultResponsibilit
      @Override
      public Collection<Restriction> getUseConstraints() {
          if (license != null) {
-             return Arrays.asList(Restriction.COPYRIGHT, Restriction.valueOf("LICENCE"));
 -            return List.of(Restriction.COPYRIGHT, Restriction.LICENCE);
++            return List.of(Restriction.COPYRIGHT, Restriction.valueOf("LICENCE"));
          } else {
              return Collections.singleton(Restriction.COPYRIGHT);
          }
diff --cc storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
index 166da7c6b1,562f91b22b..46c5825bb5
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
@@@ -79,7 -81,8 +78,8 @@@ final class GroupAsPolylineOperation ex
      /**
       * The expected result type to be returned by {@link #getResult()}.
       */
+     @SuppressWarnings("serial")
 -    private final AttributeType<?> result;
 +    private final DefaultAttributeType<?> result;
  
      /**
       * Creates a new operation which will look for geometries in the given feature association.
@@@ -100,9 -103,9 +100,9 @@@
       *
       * @param  geometries  accessor to the geometry implementation in use (Java2D, ESRI or JTS).
       */
 -    static <G> AttributeType<? extends G> getResult(final Geometries<G> geometries) {
 +    static <G> DefaultAttributeType<? extends G> getResult(final Geometries<G> geometries) {
-         return new DefaultAttributeType<>(Collections.singletonMap(NAME_KEY, AttributeConvention.ENVELOPE_PROPERTY),
-                 geometries.polylineClass, 1, 1, null);
+         return new DefaultAttributeType<>(Map.of(NAME_KEY, AttributeConvention.ENVELOPE_PROPERTY),
+                                           geometries.polylineClass, 1, 1, null);
      }
  
      /**
diff --cc storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Store.java
index 394babaa84,da0f246f30..ef48ccc435
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Store.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Store.java
@@@ -203,8 -203,8 +203,8 @@@ public class Store extends StaxDataStor
       * @deprecated We are not sure yet if we will keep this method. Decision is pending acquisition of
       *             more experience with the API proposed by {@link org.apache.sis.storage.FeatureSet}.
       */
-     @Deprecated
+     @Deprecated(since="0.8")
 -    public FeatureType getFeatureType(final String name) throws IllegalNameException {
 +    public DefaultFeatureType getFeatureType(final String name) throws IllegalNameException {
          return types.names.get(this, name);
      }
  
diff --cc storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Types.java
index 0a8605abc6,c1807c50af..22dd795b66
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Types.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Types.java
@@@ -100,8 -99,8 +99,8 @@@ final class Types 
       * @deprecated We are not sure yet if we will keep this field. Decision is pending acquisition of
       *             more experience with the API proposed by {@link org.apache.sis.storage.FeatureSet}.
       */
-     @Deprecated
+     @Deprecated(since="0.8")
 -    final FeatureNaming<FeatureType> names;
 +    final FeatureNaming<DefaultFeatureType> names;
  
      /**
       * Accessor to the geometry implementation in use (Java2D, ESRI or JTS).
diff --cc storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/WritableStore.java
index 44bb071d34,817ec098a6..7f5aeda791
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/WritableStore.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/WritableStore.java
@@@ -147,8 -147,8 +147,8 @@@ public final class WritableStore extend
       *
       * @see <a href="https://issues.apache.org/jira/browse/SIS-411">SIS-411</a>
       */
-     @Deprecated
+     @Deprecated(since="1.3")
 -    public synchronized void write(final Metadata metadata, final Stream<? extends Feature> features) throws DataStoreException {
 +    public synchronized void write(final Metadata metadata, final Stream<? extends AbstractFeature> features) throws DataStoreException {
          try {
              /*
               * If we created a reader for reading metadata, we need to close that reader now otherwise the call
diff --cc storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
index 6ca634509d,5e5de0203f..136d689e77
--- a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
+++ b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
@@@ -272,10 -271,10 +271,10 @@@ public final strictfp class WriterTest 
          point1.setPropertyValue("ageofdgpsdata", 55.55);
          point1.setPropertyValue("dgpsid",        256);
          point1.setPropertyValue("fix",           Fix.NONE);
-         point1.setPropertyValue("link",          Arrays.asList(new Link(new URI("http://first-address1.org")),
-                                                                new Link(new URI("http://first-address2.org")),
-                                                                new Link(new URI("http://first-address3.org"))));
+         point1.setPropertyValue("link",          List.of(new Link(new URI("http://first-address1.org")),
+                                                          new Link(new URI("http://first-address2.org")),
+                                                          new Link(new URI("http://first-address3.org"))));
 -        final Feature point3 = types.wayPoint.newInstance();
 +        final AbstractFeature point3 = types.wayPoint.newInstance();
          point3.setPropertyValue("sis:geometry",  new Point(35, 30));
          point3.setPropertyValue("time",          Instant.parse("2010-01-30T00:00:00Z"));
          point3.setPropertyValue("name",          "third point");
@@@ -294,12 -293,12 +293,12 @@@
          point3.setPropertyValue("ageofdgpsdata", 85.55);
          point3.setPropertyValue("dgpsid",        456);
          point3.setPropertyValue("fix",           Fix.THREE_DIMENSIONAL);
-         point3.setPropertyValue("link",          Arrays.asList(new Link(new URI("http://third-address1.org")),
-                                                                new Link(new URI("http://third-address2.org"))));
+         point3.setPropertyValue("link",          List.of(new Link(new URI("http://third-address1.org")),
+                                                          new Link(new URI("http://third-address2.org"))));
 -        final Feature point2 = types.wayPoint.newInstance();
 +        final AbstractFeature point2 = types.wayPoint.newInstance();
          point2.setPropertyValue("sis:geometry", new Point(25, 20));
-         final List<AbstractFeature> wayPoints = Arrays.asList(point1, point2, point3);
 -        final List<Feature> wayPoints = List.of(point1, point2, point3);
 -        final List<Feature> features;
++        final List<AbstractFeature> wayPoints = List.of(point1, point2, point3);
 +        final List<AbstractFeature> features;
          switch (type) {
              case WAY_POINT: {
                  features = wayPoints;
@@@ -314,11 -313,11 +313,11 @@@
                  route1.setPropertyValue("type",   "Route type");
                  route1.setPropertyValue("number", 7);
                  route1.setPropertyValue("rtept",  wayPoints);
-                 route1.setPropertyValue("link",   Arrays.asList(new Link(new URI("http://route-address1.org")),
-                                                                 new Link(new URI("http://route-address2.org")),
-                                                                 new Link(new URI("http://route-address3.org"))));
+                 route1.setPropertyValue("link",   List.of(new Link(new URI("http://route-address1.org")),
+                                                           new Link(new URI("http://route-address2.org")),
+                                                           new Link(new URI("http://route-address3.org"))));
 -                final Feature route2 = types.route.newInstance();
 +                final AbstractFeature route2 = types.route.newInstance();
-                 features = Arrays.asList(route1, route2);
+                 features = List.of(route1, route2);
                  break;
              }
              case TRACK: {
@@@ -333,12 -332,12 +332,12 @@@
                  track1.setPropertyValue("src",    "Track source");
                  track1.setPropertyValue("type",   "Track type");
                  track1.setPropertyValue("number", 7);
-                 track1.setPropertyValue("trkseg", Arrays.asList(seg1, seg2));
-                 track1.setPropertyValue("link",   Arrays.asList(new Link(new URI("http://track-address1.org")),
-                                                                 new Link(new URI("http://track-address2.org")),
-                                                                 new Link(new URI("http://track-address3.org"))));
+                 track1.setPropertyValue("trkseg", List.of(seg1, seg2));
+                 track1.setPropertyValue("link",   List.of(new Link(new URI("http://track-address1.org")),
+                                                           new Link(new URI("http://track-address2.org")),
+                                                           new Link(new URI("http://track-address3.org"))));
 -                final Feature track2 = types.track.newInstance();
 +                final AbstractFeature track2 = types.track.newInstance();
-                 features = Arrays.asList(track1, track2);
+                 features = List.of(track1, track2);
                  break;
              }
              default: throw new AssertionError(type);