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

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

commit cdfb5327b5e07f45554a7f1a43826d869cc32fb5
Merge: 84d2ffda54 0ce17f2e31
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Sun Jan 14 20:55:52 2024 +0100

    Merge branch 'geoapi-4.0' into geoapi-3.1.
    The most numerous changes are typo fixes.

 .../sis/buildtools/gradle/ModularCompilation.java  |   2 +-
 .../sis/buildtools/gradle/ModularJavadoc.java      |   2 +-
 .../resources/IndexedResourceCompiler.java         |   2 +-
 .../apache/sis/cloud/aws/internal/Resources.java   |   4 +-
 .../sis/cloud/aws/internal/Resources_en.java       |   2 +-
 .../sis/cloud/aws/internal/Resources_fr.java       |   2 +-
 .../org/apache/sis/cloud/aws/s3/FileService.java   |   2 +-
 .../main/org/apache/sis/cloud/aws/s3/KeyPath.java  |   8 +-
 .../org/apache/sis/cloud/aws/s3/PathIterator.java  |   2 +-
 .../org/apache/sis/cloud/aws/s3/package-info.java  |   2 +-
 .../main/org/apache/sis/console/CommandRunner.java |   2 +-
 .../main/org/apache/sis/console/HelpCommand.java   |   2 +-
 .../main/org/apache/sis/console/SIS.java           |   4 +-
 .../org/apache/sis/console/AboutCommandTest.java   |   2 +-
 .../apache/sis/console/MetadataCommandTest.java    |   2 +-
 .../main/org/apache/sis/coverage/Category.java     |   2 +-
 .../org/apache/sis/coverage/SampleDimension.java   |   6 +-
 .../org/apache/sis/coverage/SampleRangeFormat.java |   2 +-
 .../main/org/apache/sis/coverage/ToNaN.java        |   2 +-
 .../sis/coverage/grid/BufferedGridCoverage.java    |   2 +-
 .../sis/coverage/grid/ConvertedGridCoverage.java   |   4 +-
 .../coverage/grid/CoordinateOperationFinder.java   |   2 +-
 .../apache/sis/coverage/grid/DefaultEvaluator.java |   6 +-
 .../sis/coverage/grid/DerivedGridCoverage.java     |   6 +-
 .../sis/coverage/grid/DimensionalityReduction.java |  16 +-
 .../coverage/grid/FractionalGridCoordinates.java   |   2 +-
 .../org/apache/sis/coverage/grid/GridCoverage.java |   6 +-
 .../apache/sis/coverage/grid/GridCoverage2D.java   |  10 +-
 .../sis/coverage/grid/GridCoverageBuilder.java     |   4 +-
 .../sis/coverage/grid/GridCoverageProcessor.java   |  10 +-
 .../apache/sis/coverage/grid/GridDerivation.java   |  12 +-
 .../org/apache/sis/coverage/grid/GridExtent.java   |  12 +-
 .../org/apache/sis/coverage/grid/GridGeometry.java |  18 +--
 .../apache/sis/coverage/grid/GridOrientation.java  |   2 +-
 .../apache/sis/coverage/grid/ReshapedImage.java    |   4 +-
 .../apache/sis/coverage/grid/SliceGeometry.java    |   8 +-
 .../sis/coverage/grid/TranslatedGridCoverage.java  |  10 +-
 .../sis/coverage/grid/j2d/ColorModelBuilder.java   |   6 +-
 .../sis/coverage/grid/j2d/ColorModelFactory.java   |   4 +-
 .../apache/sis/coverage/grid/j2d/FillValues.java   |   2 +-
 .../apache/sis/coverage/grid/j2d/ImageLayout.java  |   2 +-
 .../grid/j2d/MultiBandsIndexColorModel.java        |   4 +-
 .../sis/coverage/grid/j2d/ScaledColorModel.java    |   2 +-
 .../sis/coverage/grid/j2d/TileOpExecutor.java      |  12 +-
 .../sis/coverage/internal/CommonDomainFinder.java  |   2 +-
 .../sis/coverage/internal/MultiSourceArgument.java |   4 +-
 .../sis/coverage/internal/RangeArgument.java       |   4 +-
 .../org/apache/sis/feature/AbstractFeature.java    |   4 +-
 .../org/apache/sis/feature/FeatureOperations.java  |   8 +-
 .../main/org/apache/sis/feature/Features.java      |   2 +-
 .../org/apache/sis/feature/PropertySingleton.java  |   4 +-
 .../sis/feature/builder/FeatureTypeBuilder.java    |   2 +-
 .../sis/feature/internal/MovingFeatures.java       |   2 +-
 .../org/apache/sis/feature/internal/Resources.java |   4 +-
 .../apache/sis/feature/internal/Resources_en.java  |   2 +-
 .../apache/sis/feature/internal/Resources_fr.java  |   2 +-
 .../org/apache/sis/filter/AssociationValue.java    |   2 +-
 .../org/apache/sis/filter/ComparisonFilter.java    |   2 +-
 .../org/apache/sis/filter/ConvertFunction.java     |   4 +-
 .../main/org/apache/sis/filter/LeafExpression.java |   2 +-
 .../main/org/apache/sis/filter/LogicalFilter.java  |   6 +-
 .../main/org/apache/sis/filter/Optimization.java   |   4 +-
 .../apache/sis/filter/internal/CopyVisitor.java    |   4 +-
 .../sis/filter/internal/GeometryConverter.java     |   2 +-
 .../org/apache/sis/filter/internal/Visitor.java    |   2 +-
 .../sis/filter/sqlmm/FunctionDescription.java      |   4 +-
 .../sis/filter/sqlmm/GeometryConstructor.java      |   2 +-
 .../apache/sis/filter/sqlmm/GeometryParser.java    |   2 +-
 .../org/apache/sis/filter/sqlmm/OneGeometry.java   |   4 +-
 .../org/apache/sis/filter/sqlmm/ST_FromBinary.java |   2 +-
 .../org/apache/sis/filter/sqlmm/ST_FromText.java   |   2 +-
 .../main/org/apache/sis/filter/sqlmm/ST_Point.java |   2 +-
 .../org/apache/sis/filter/sqlmm/ST_Transform.java  |   2 +-
 .../org/apache/sis/filter/sqlmm/TwoGeometries.java |   4 +-
 .../apache/sis/geometry/wrapper/Geometries.java    |   2 +-
 .../sis/geometry/wrapper/GeometryWithCRS.java      |   2 +-
 .../sis/geometry/wrapper/GeometryWrapper.java      |  12 +-
 .../geometry/wrapper/SpatialOperationContext.java  |   2 +-
 .../sis/geometry/wrapper/j2d/PathBuilder.java      |   4 +-
 .../org/apache/sis/geometry/wrapper/jts/JTS.java   |   2 +-
 .../wrapper/jts/PackedCoordinateSequence.java      |   2 +-
 .../jts/PackedCoordinateSequenceFactory.java       |   2 +-
 .../geometry/wrapper/jts/PathIteratorAdapter.java  |   2 +-
 .../apache/sis/geometry/wrapper/jts/Wrapper.java   |   6 +-
 .../main/org/apache/sis/image/AnnotatedImage.java  |   4 +-
 .../main/org/apache/sis/image/BandSelectImage.java |   4 +-
 .../main/org/apache/sis/image/BandedIterator.java  |   4 +-
 .../apache/sis/image/BandedSampleConverter.java    |  14 +-
 .../main/org/apache/sis/image/ComputedImage.java   |  10 +-
 .../main/org/apache/sis/image/ImageAdapter.java    |   4 +-
 .../main/org/apache/sis/image/ImageCombiner.java   |   2 +-
 .../main/org/apache/sis/image/ImageProcessor.java  |  14 +-
 .../main/org/apache/sis/image/MaskedImage.java     |   4 +-
 .../org/apache/sis/image/MultiSourceLayout.java    |   4 +-
 .../main/org/apache/sis/image/PixelIterator.java   |  16 +-
 .../main/org/apache/sis/image/PlanarImage.java     |   2 +-
 .../main/org/apache/sis/image/PrefetchedImage.java |   2 +-
 .../main/org/apache/sis/image/RecoloredImage.java  |   6 +-
 .../main/org/apache/sis/image/ResampledImage.java  |  10 +-
 .../org/apache/sis/image/SourceAlignedImage.java   |   4 +-
 .../main/org/apache/sis/image/TransferType.java    |   2 +-
 .../apache/sis/image/WritablePixelIterator.java    |   4 +-
 .../org/apache/sis/index/tree/PointTreeNode.java   |   4 +-
 .../org/apache/sis/index/tree/QuadTreeNode.java    |   2 +-
 .../org/apache/sis/coverage/CategoryListTest.java  |   2 +-
 .../sis/coverage/grid/GridDerivationTest.java      |  16 +-
 .../apache/sis/coverage/grid/GridGeometryTest.java |   2 +-
 .../coverage/grid/ResampledGridCoverageTest.java   |   6 +-
 .../sis/coverage/grid/j2d/ImageUtilitiesTest.java  |   2 +-
 .../apache/sis/feature/DefaultFeatureTypeTest.java |   2 +-
 .../org/apache/sis/feature/FeatureTestCase.java    |   4 +-
 .../sis/filter/internal/FunctionNamesTest.java     |   2 +-
 .../apache/sis/filter/sqlmm/RegistryTestCase.java  |   2 +-
 .../org/apache/sis/image/PixelIteratorTest.java    |   6 +-
 .../sis/image/processing/isoline/IsolinesTest.java |   4 +-
 .../org/apache/sis/metadata/KeyNamePolicy.java     |   2 +-
 .../org/apache/sis/metadata/MetadataCopier.java    |   4 +-
 .../org/apache/sis/metadata/MetadataStandard.java  |   6 +-
 .../apache/sis/metadata/ModifiableMetadata.java    |   2 +-
 .../org/apache/sis/metadata/PropertyAccessor.java  |  14 +-
 .../apache/sis/metadata/PropertyComparator.java    |   2 +-
 .../main/org/apache/sis/metadata/SpecialCases.java |   2 +-
 .../main/org/apache/sis/metadata/TreeNode.java     |   8 +-
 .../org/apache/sis/metadata/TreeNodeChildren.java  |   6 +-
 .../org/apache/sis/metadata/TypeValuePolicy.java   |   2 +-
 .../apache/sis/metadata/internal/Dependencies.java |   2 +-
 .../apache/sis/metadata/internal/Resources.java    |   4 +-
 .../apache/sis/metadata/internal/Resources_en.java |   2 +-
 .../apache/sis/metadata/internal/Resources_fr.java |   2 +-
 .../apache/sis/metadata/iso/DefaultIdentifier.java |   2 +-
 .../sis/metadata/iso/citation/Citations.java       |   4 +-
 .../metadata/iso/citation/DefaultTelephone.java    |   2 +-
 .../sis/metadata/iso/extent/DefaultExtent.java     |   2 +-
 .../iso/extent/DefaultGeographicBoundingBox.java   |   8 +-
 .../DefaultRepresentativeFraction.java             |   4 +-
 .../sis/metadata/simple/CitationConstant.java      |   2 +-
 .../metadata/simple/SimpleIdentifiedObject.java    |   2 +-
 .../sis/metadata/simple/SimpleIdentifier.java      |   2 +-
 .../org/apache/sis/metadata/sql/Dispatcher.java    |   2 +-
 .../sis/metadata/sql/IdentifierGenerator.java      |   4 +-
 .../org/apache/sis/metadata/sql/LookupInfo.java    |   2 +-
 .../apache/sis/metadata/sql/MetadataSource.java    |   2 +-
 .../apache/sis/metadata/sql/MetadataWriter.java    |   4 +-
 .../apache/sis/metadata/sql/util/SQLBuilder.java   |   2 +-
 .../apache/sis/metadata/sql/util/SQLUtilities.java |   2 +-
 .../org/apache/sis/metadata/sql/util/Syntax.java   |   2 +-
 .../org/apache/sis/util/iso/DefaultLocalName.java  |   2 +-
 .../org/apache/sis/util/iso/DefaultMemberName.java |   2 +-
 .../apache/sis/util/iso/DefaultNameFactory.java    |   2 +-
 .../org/apache/sis/util/iso/DefaultNameSpace.java  |   4 +-
 .../org/apache/sis/util/iso/DefaultScopedName.java |   4 +-
 .../org/apache/sis/util/iso/DefaultTypeName.java   |   2 +-
 .../main/org/apache/sis/util/iso/Names.java        |   2 +-
 .../main/org/apache/sis/util/iso/TypeNames.java    |   2 +-
 .../main/org/apache/sis/util/iso/Types.java        |   6 +-
 .../main/org/apache/sis/xml/Namespaces.java        |   2 +-
 .../main/org/apache/sis/xml/ReferenceResolver.java |   2 +-
 .../main/org/apache/sis/xml/TransformedEvent.java  |  10 +-
 .../main/org/apache/sis/xml/Transformer.java       |   2 +-
 .../org/apache/sis/xml/TransformingReader.java     |   2 +-
 .../org/apache/sis/xml/TransformingWriter.java     |   2 +-
 .../main/org/apache/sis/xml/XML.java               |   2 +-
 .../main/org/apache/sis/xml/bind/Context.java      |   4 +-
 .../apache/sis/xml/bind/IdentifierMapEntry.java    |   2 +-
 .../sis/xml/bind/NonMarshalledAuthority.java       |   2 +-
 .../org/apache/sis/xml/bind/ScopedIdentifier.java  |   2 +-
 .../org/apache/sis/xml/bind/TypeRegistration.java  |   2 +-
 .../org/apache/sis/xml/bind/lan/PT_FreeText.java   |   2 +-
 .../sis/xml/bind/metadata/replace/SensorType.java  |   2 +-
 .../apache/sis/metadata/AbstractMetadataTest.java  |   2 +-
 .../apache/sis/metadata/PropertyAccessorTest.java  |   2 +-
 .../test/org/apache/sis/metadata/ValueMapTest.java |   6 +-
 .../metadata/iso/citation/DefaultCitationTest.java |   2 +-
 .../sis/metadata/iso/extent/ExtentsTest.java       |   2 +-
 .../metadata/iso/lineage/DefaultLineageTest.java   |   4 +-
 .../iso/lineage/DefaultProcessStepTest.java        |   2 +-
 .../org/apache/sis/xml/ReferenceResolverTest.java  |   2 +-
 .../org/apache/sis/xml/UUIDMarshallingTest.java    |   2 +-
 .../apache/sis/xml/bind/gco/MultiplicityTest.java  |   2 +-
 .../apache/sis/xml/bind/gml/TimePeriodTest.java    |   6 +-
 .../sis/xml/test/AnnotationConsistencyCheck.java   |   4 +-
 .../org/apache/sis/xml/test/PackageVerifier.java   |   4 +-
 .../org/apache/sis/openoffice/TransformerTest.java |   2 +-
 .../coverage/MultiResolutionCoverageLoader.java    |   2 +-
 .../main/org/apache/sis/portrayal/Canvas.java      |   2 +-
 .../org/apache/sis/portrayal/CanvasFollower.java   |   2 +-
 .../apache/sis/portrayal/TransformChangeEvent.java |   2 +-
 .../main/org/apache/sis/style/se1/Rule.java        |   2 +-
 .../org/apache/sis/style/se1/StyleElement.java     |   2 +-
 .../org/apache/sis/style/se1/StyleFactory.java     |   2 +-
 .../apache/sis/profile/japan/netcdf/GCOM_C.java    |   4 +-
 .../referencing/gazetteer/GazetteerFactory.java    |   2 +-
 .../gazetteer/GeohashReferenceSystem.java          |   2 +-
 .../sis/referencing/gazetteer/LocationFormat.java  |   2 +-
 .../gazetteer/MilitaryGridReferenceSystem.java     |  18 +--
 .../gazetteer/ModifiableLocationType.java          |   2 +-
 .../gazetteer/ReferencingByIdentifiers.java        |   2 +-
 .../referencing/gazetteer/internal/Resources.java  |   4 +-
 .../gazetteer/internal/Resources_en.java           |   2 +-
 .../gazetteer/internal/Resources_fr.java           |   2 +-
 .../sis/referencing/gazetteer/LocationViewer.java  |   2 +-
 .../org/apache/sis/geometry/AbstractEnvelope.java  |  12 +-
 .../org/apache/sis/geometry/ArrayEnvelope.java     |   4 +-
 .../org/apache/sis/geometry/CoordinateFormat.java  |   4 +-
 .../org/apache/sis/geometry/DirectPosition2D.java  |   2 +-
 .../main/org/apache/sis/geometry/Envelope2D.java   |  18 +--
 .../main/org/apache/sis/geometry/Envelopes.java    |   8 +-
 .../apache/sis/geometry/GeneralDirectPosition.java |   2 +-
 .../org/apache/sis/geometry/GeneralEnvelope.java   |   8 +-
 .../org/apache/sis/geometry/ImmutableEnvelope.java |   2 +-
 .../main/org/apache/sis/geometry/Shapes2D.java     |   2 +-
 .../apache/sis/geometry/WraparoundAdjustment.java  |   8 +-
 .../main/org/apache/sis/io/wkt/Convention.java     |   4 +-
 .../org/apache/sis/io/wkt/FormattableObject.java   |   2 +-
 .../main/org/apache/sis/io/wkt/Formatter.java      |  10 +-
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |  12 +-
 .../org/apache/sis/io/wkt/MathTransformParser.java |   2 +-
 .../main/org/apache/sis/io/wkt/Symbols.java        |   2 +-
 .../main/org/apache/sis/io/wkt/Transliterator.java |   2 +-
 .../sis/io/wkt/UnparsableObjectException.java      |   2 +-
 .../main/org/apache/sis/io/wkt/WKTFormat.java      |   2 +-
 .../main/org/apache/sis/io/wkt/Warnings.java       |   4 +-
 .../sis/parameter/AbstractParameterDescriptor.java |   2 +-
 .../sis/parameter/DefaultParameterDescriptor.java  |   6 +-
 .../parameter/DefaultParameterDescriptorGroup.java |  10 +-
 .../sis/parameter/DefaultParameterValue.java       |   2 +-
 .../sis/parameter/MapProjectionDescriptor.java     |   2 +-
 .../org/apache/sis/parameter/ParameterBuilder.java |   6 +-
 .../org/apache/sis/parameter/ParameterFormat.java  |   4 +-
 .../apache/sis/parameter/ParameterTableRow.java    |   2 +-
 .../main/org/apache/sis/parameter/Parameters.java  |  10 +-
 .../sis/parameter/UnmodifiableParameterValue.java  |   2 +-
 .../main/org/apache/sis/parameter/Verifier.java    |   2 +-
 .../org/apache/sis/parameter/package-info.java     |   2 +-
 .../sis/referencing/AbstractIdentifiedObject.java  |   6 +-
 .../sis/referencing/AbstractReferenceSystem.java   |   4 +-
 .../main/org/apache/sis/referencing/Builder.java   |   4 +-
 .../main/org/apache/sis/referencing/CRS.java       |   2 +-
 .../main/org/apache/sis/referencing/CommonCRS.java |   4 +-
 .../sis/referencing/DefaultObjectDomain.java       |   4 +-
 .../sis/referencing/GeodesicsOnEllipsoid.java      |   4 +-
 .../apache/sis/referencing/GeodeticCalculator.java |   4 +-
 .../apache/sis/referencing/IdentifiedObjects.java  |  20 ++-
 .../sis/referencing/ImmutableIdentifier.java       |   2 +-
 .../apache/sis/referencing/NamedIdentifier.java    |   6 +-
 .../apache/sis/referencing/crs/AbstractCRS.java    |   6 +-
 .../sis/referencing/crs/AbstractDerivedCRS.java    |   4 +-
 .../sis/referencing/crs/DefaultCompoundCRS.java    |  10 +-
 .../sis/referencing/crs/DefaultDerivedCRS.java     |  22 +--
 .../sis/referencing/crs/DefaultEngineeringCRS.java |   8 +-
 .../sis/referencing/crs/DefaultGeocentricCRS.java  |  10 +-
 .../sis/referencing/crs/DefaultGeodeticCRS.java    |   6 +-
 .../sis/referencing/crs/DefaultGeographicCRS.java  |   8 +-
 .../sis/referencing/crs/DefaultImageCRS.java       |   8 +-
 .../sis/referencing/crs/DefaultParametricCRS.java  |   8 +-
 .../sis/referencing/crs/DefaultProjectedCRS.java   |   8 +-
 .../sis/referencing/crs/DefaultTemporalCRS.java    |   8 +-
 .../sis/referencing/crs/DefaultVerticalCRS.java    |   8 +-
 .../org/apache/sis/referencing/cs/AbstractCS.java  |   6 +-
 .../apache/sis/referencing/cs/DefaultAffineCS.java |   4 +-
 .../sis/referencing/cs/DefaultCartesianCS.java     |   4 +-
 .../cs/DefaultCoordinateSystemAxis.java            |   4 +-
 .../sis/referencing/cs/DefaultCylindricalCS.java   |   4 +-
 .../sis/referencing/cs/DefaultEllipsoidalCS.java   |   4 +-
 .../apache/sis/referencing/cs/DefaultLinearCS.java |   4 +-
 .../sis/referencing/cs/DefaultParametricCS.java    |   4 +-
 .../apache/sis/referencing/cs/DefaultPolarCS.java  |   4 +-
 .../sis/referencing/cs/DefaultSphericalCS.java     |   4 +-
 .../apache/sis/referencing/cs/DefaultTimeCS.java   |   4 +-
 .../sis/referencing/cs/DefaultUserDefinedCS.java   |   4 +-
 .../sis/referencing/cs/DefaultVerticalCS.java      |   4 +-
 .../org/apache/sis/referencing/cs/Normalizer.java  |   8 +-
 .../sis/referencing/datum/AbstractDatum.java       |   4 +-
 .../sis/referencing/datum/DatumShiftGrid.java      |  16 +-
 .../sis/referencing/datum/DefaultEllipsoid.java    |  10 +-
 .../referencing/datum/DefaultEngineeringDatum.java |   4 +-
 .../referencing/datum/DefaultGeodeticDatum.java    |   6 +-
 .../sis/referencing/datum/DefaultImageDatum.java   |   4 +-
 .../referencing/datum/DefaultParametricDatum.java  |   4 +-
 .../referencing/datum/DefaultPrimeMeridian.java    |   6 +-
 .../referencing/datum/DefaultTemporalDatum.java    |   4 +-
 .../referencing/datum/DefaultVerticalDatum.java    |   4 +-
 .../factory/AuthorityFactoryIdentifier.java        |   4 +-
 .../factory/CommonAuthorityFactory.java            |   2 +-
 .../factory/ConcurrentAuthorityFactory.java        |   2 +-
 .../referencing/factory/GeodeticObjectFactory.java |   2 +-
 .../factory/IdentifiedObjectFinder.java            |  10 +-
 .../referencing/factory/IdentifiedObjectSet.java   |   4 +-
 .../factory/MultiAuthoritiesFactory.java           |   2 +-
 .../factory/sql/CoordinateOperationSet.java        |   2 +-
 .../referencing/factory/sql/EPSGCodeFinder.java    |   2 +-
 .../sis/referencing/factory/sql/EPSGInstaller.java |   2 +-
 .../factory/sql/InstallationScriptProvider.java    |   2 +-
 .../sis/referencing/factory/sql/TableInfo.java     |   4 +-
 .../referencing/internal/PositionTransformer.java  |   6 +-
 .../apache/sis/referencing/internal/RTreeNode.java |   2 +-
 .../apache/sis/referencing/internal/Resources.java |  10 +-
 .../sis/referencing/internal/Resources.properties  |   3 +-
 .../sis/referencing/internal/Resources_en.java     |   2 +-
 .../sis/referencing/internal/Resources_fr.java     |   2 +-
 .../referencing/internal/Resources_fr.properties   |   3 +-
 .../operation/AbstractCoordinateOperation.java     |  53 ++++++-
 .../operation/AbstractSingleOperation.java         |   2 +-
 .../apache/sis/referencing/operation/CRSPair.java  |  17 ++-
 .../operation/CoordinateOperationContext.java      |   2 +-
 .../operation/CoordinateOperationFinder.java       |  29 ++--
 .../operation/CoordinateOperationRegistry.java     | 166 +++++++++++++++------
 .../operation/DefaultConcatenatedOperation.java    | 158 +++++++++++++++-----
 .../operation/DefaultConicProjection.java          |   4 +-
 .../referencing/operation/DefaultConversion.java   |  12 +-
 .../DefaultCoordinateOperationFactory.java         |  38 ++---
 .../operation/DefaultCylindricalProjection.java    |   4 +-
 .../sis/referencing/operation/DefaultFormula.java  |   4 +-
 .../operation/DefaultOperationMethod.java          |   6 +-
 .../operation/DefaultPassThroughOperation.java     |   4 +-
 .../operation/DefaultPlanarProjection.java         |   4 +-
 .../referencing/operation/DefaultProjection.java   |   4 +-
 .../operation/DefaultTransformation.java           |   4 +-
 .../operation/InverseOperationMethod.java          |  10 +-
 .../operation/MathTransformContext.java            |   2 +-
 .../operation/builder/LinearTransformBuilder.java  |   2 +-
 .../operation/builder/LocalizationGridBuilder.java |   2 +-
 .../operation/builder/ResidualGrid.java            |   2 +-
 .../operation/gridded/CompressedGrid.java          |   8 +-
 .../referencing/operation/gridded/GridGroup.java   |   6 +-
 .../referencing/operation/gridded/LoadedGrid.java  |  24 +--
 .../operation/matrix/AffineTransforms2D.java       |   6 +-
 .../sis/referencing/operation/matrix/Matrices.java |   4 +-
 .../sis/referencing/operation/matrix/Matrix1.java  |   4 +-
 .../sis/referencing/operation/matrix/Matrix2.java  |   4 +-
 .../sis/referencing/operation/matrix/Matrix3.java  |   4 +-
 .../sis/referencing/operation/matrix/Matrix4.java  |   4 +-
 .../referencing/operation/matrix/MatrixSIS.java    |  10 +-
 .../sis/referencing/operation/matrix/Solver.java   |   2 +-
 .../operation/projection/AlbersEqualArea.java      |   2 +-
 .../operation/projection/AuthalicConversion.java   |   2 +-
 .../operation/projection/AuthalicMercator.java     |   2 +-
 .../operation/projection/AzimuthalEquidistant.java |   6 +-
 .../operation/projection/CassiniSoldner.java       |   6 +-
 .../operation/projection/CylindricalEqualArea.java |   6 +-
 .../operation/projection/Initializer.java          |   6 +-
 .../projection/LambertConicConformal.java          |   6 +-
 .../referencing/operation/projection/Mercator.java |   8 +-
 .../operation/projection/MeridianArcBased.java     |   4 +-
 .../operation/projection/NormalizedProjection.java |   8 +-
 .../operation/projection/ObliqueMercator.java      |   2 +-
 .../operation/projection/ObliqueStereographic.java |  12 +-
 .../operation/projection/PolarStereographic.java   |   6 +-
 .../operation/projection/Polyconic.java            |   2 +-
 .../operation/projection/SatelliteTracking.java    |   2 +-
 .../operation/projection/Sinusoidal.java           |   4 +-
 .../operation/projection/TransverseMercator.java   |   4 +-
 .../operation/projection/ZonedGridSystem.java      |   2 +-
 .../operation/projection/package-info.java         |   2 +-
 .../operation/provider/AbstractProvider.java       |   2 +-
 .../provider/CoordinateFrameRotation.java          |   2 +-
 .../provider/CoordinateFrameRotation2D.java        |   2 +-
 .../provider/CoordinateFrameRotation3D.java        |   2 +-
 .../operation/provider/Equirectangular.java        |   2 +-
 .../operation/provider/GeodeticOperation.java      |   2 +-
 .../operation/provider/Geographic3DtoVertical.md   |   2 +-
 .../provider/GeographicAndVerticalOffsets.java     |   2 +-
 .../operation/provider/GeographicToGeocentric.java |   2 +-
 .../operation/provider/MapProjection.java          |   2 +-
 .../operation/provider/MapProjection3D.java        |   2 +-
 .../provider/ModifiedAzimuthalEquidistant.java     |   2 +-
 .../transform/AbstractLinearTransform.java         |   2 +-
 .../operation/transform/AbstractMathTransform.java |  18 +--
 .../operation/transform/CartesianToPolar.java      |   2 +-
 .../operation/transform/CartesianToSpherical.java  |   2 +-
 .../operation/transform/ConcatenatedTransform.java |   8 +-
 .../transform/ConcatenatedTransformDirect.java     |   2 +-
 .../operation/transform/ContextualParameters.java  |   6 +-
 .../transform/CoordinateSystemTransform.java       |   2 +-
 .../transform/DefaultMathTransformFactory.java     |  14 +-
 .../transform/EllipsoidToCentricTransform.java     |   8 +-
 .../transform/InterpolatedGeocentricTransform.java |   4 +-
 .../operation/transform/InterpolatedTransform.java |   6 +-
 .../operation/transform/IterationStrategy.java     |   6 +-
 .../operation/transform/LinearTransform.java       |   2 +-
 .../operation/transform/MathTransforms.java        |   2 +-
 .../operation/transform/MolodenskyTransform.java   |  26 ++--
 .../operation/transform/PassThroughTransform.java  |   4 +-
 .../operation/transform/PolarToCartesian.java      |   4 +-
 .../operation/transform/PoleRotation.java          |   2 +-
 .../operation/transform/ProjectiveTransform.java   |   2 +-
 .../operation/transform/ScaleTransform.java        |   2 +-
 .../operation/transform/SphericalToCartesian.java  |   2 +-
 .../operation/transform/TransformSeparator.java    |   6 +-
 .../operation/transform/TranslationTransform.java  |   2 +-
 .../operation/transform/WraparoundTransform.java   |   6 +-
 .../sis/referencing/util/CoordinateOperations.java |  14 ++
 .../org/apache/sis/referencing/util/Formulas.java  |   6 +-
 .../referencing/util/GeodeticObjectBuilder.java    |   6 +-
 .../org/apache/sis/referencing/util/LazySet.java   |   2 +-
 .../sis/referencing/util/ReferencingUtilities.java |   2 +-
 .../sis/referencing/util/TemporalAccessor.java     |   4 +-
 .../sis/referencing/util/j2d/AffineMatrix.java     |   2 +-
 .../referencing/util/j2d/AffineTransform2D.java    |   2 +-
 .../apache/sis/referencing/util/j2d/Bezier.java    |   4 +-
 .../referencing/util/j2d/ParameterizedAffine.java  |   2 +-
 .../sis/referencing/util/j2d/TileOrganizer.java    |   4 +-
 .../bind/referencing/CC_CoordinateOperation.java   |   4 +-
 .../referencing/CC_GeneralOperationParameter.java  |   6 +-
 .../sis/xml/bind/referencing/RS_Identifier.java    |   2 +-
 .../org/apache/sis/geometry/EnvelopesTest.java     |   2 +-
 .../org/apache/sis/geometry/TransformTestCase.java |   2 +-
 .../sis/io/wkt/GeodeticObjectParserTest.java       |   2 +-
 .../test/org/apache/sis/io/wkt/WKTFormatTest.java  |   2 +-
 .../sis/parameter/DefaultParameterValueTest.java   |   4 +-
 .../apache/sis/parameter/ParameterFormatTest.java  |   2 +-
 .../apache/sis/parameter/ParameterValueGroup.xml   |   2 +-
 .../org/apache/sis/parameter/TensorValuesTest.java |   2 +-
 .../sis/referencing/GeodesicsOnEllipsoidTest.java  |   4 +-
 .../sis/referencing/GeodeticCalculatorTest.java    |   2 +-
 .../referencing/crs/DefaultProjectedCRSTest.java   |   2 +-
 .../sis/referencing/datum/GeodeticDatumMock.java   |   2 +-
 .../referencing/datum/TimeDependentBWPTest.java    |   2 +-
 .../factory/CommonAuthorityFactoryTest.java        |   2 +-
 .../factory/IdentifiedObjectFinderTest.java        |   2 +-
 .../factory/sql/epsg/DataScriptFormatter.java      |   2 +-
 .../operation/CoordinateOperationFinderTest.java   |   6 +-
 .../operation/CoordinateOperationRegistryTest.java |   2 +-
 .../operation/DefaultConversionTest.java           |   2 +-
 .../DefaultCoordinateOperationFactoryTest.java     |   6 +-
 .../operation/SingleOperationMarshallingTest.java  |   2 +-
 .../builder/LinearTransformBuilderTest.java        |   2 +-
 .../operation/builder/LinearizerTest.java          |   2 +-
 .../operation/builder/ResidualGridTest.java        |   2 +-
 .../operation/matrix/MatrixTestCase.java           |   4 +-
 .../referencing/operation/matrix/SolverTest.java   |   2 +-
 .../operation/projection/CassiniSoldnerTest.java   |   4 +-
 .../projection/LambertConicConformalTest.java      |   2 +-
 .../projection/MercatorMethodComparison.java       |   4 +-
 .../operation/projection/MercatorTest.java         |   2 +-
 .../ModifiedAzimuthalEquidistantTest.java          |   2 +-
 .../projection/PolarStereographicTest.java         |   2 +-
 .../projection/ProjectionResultComparator.java     |   6 +-
 .../provider/CoordinateFrameRotationTest.java      |   2 +-
 .../operation/provider/GeographicOffsetsTest.java  |   4 +-
 .../referencing/operation/provider/NADCONTest.java |   2 +-
 .../referencing/operation/provider/NTv2Test.java   |   4 +-
 .../transform/DefaultMathTransformFactoryTest.java |   2 +-
 .../transform/EllipsoidToCentricTransformTest.java |   4 +-
 .../transform/InterpolatedTransformTest.java       |  10 +-
 .../operation/transform/MathTransformTestCase.java |   4 +-
 .../operation/transform/MathTransformsTest.java    |   4 +-
 .../transform/MolodenskyTransformTest.java         |   2 +-
 .../operation/transform/PoleRotationTest.java      |   2 +-
 .../transform/ProjectiveTransformTest.java         |   2 +-
 .../operation/transform/SinusoidalShiftGrid.java   |   2 +-
 .../operation/transform/TransferFunctionTest.java  |   2 +-
 .../report/CoordinateOperationMethods.java         |   2 +-
 .../sis/referencing/util/ExtentSelectorTest.java   |   2 +-
 .../CC_OperationParameterGroupTest.java            |   2 +-
 .../apache/sis/xml/bind/referencing/CodeTest.java  |   2 +-
 .../sis/storage/geotiff/CompressedSubset.java      |   2 +-
 .../org/apache/sis/storage/geotiff/DataCube.java   |   2 +-
 .../org/apache/sis/storage/geotiff/DataSubset.java |   6 +-
 .../apache/sis/storage/geotiff/GeoTiffStore.java   |   2 +-
 .../sis/storage/geotiff/ImageFileDirectory.java    |   4 +-
 .../org/apache/sis/storage/geotiff/Writer.java     |   2 +-
 .../apache/sis/storage/geotiff/base/Resources.java |   4 +-
 .../sis/storage/geotiff/base/Resources_en.java     |   2 +-
 .../sis/storage/geotiff/base/Resources_fr.java     |   2 +-
 .../geotiff/inflater/HorizontalPredictor.java      |   2 +-
 .../sis/storage/geotiff/reader/CRSBuilder.java     |   8 +-
 .../sis/storage/geotiff/reader/GeoKeysLoader.java  |   2 +-
 .../geotiff/reader/ReversedBitsChannel.java        |   2 +-
 .../sis/storage/geotiff/spi/SchemaModifier.java    |   2 +-
 .../sis/storage/geotiff/writer/TagValue.java       |   2 +-
 .../apache/sis/storage/netcdf/MetadataReader.java  |   2 +-
 .../org/apache/sis/storage/netcdf/NetcdfStore.java |   2 +-
 .../org/apache/sis/storage/netcdf/base/Axis.java   |   4 +-
 .../apache/sis/storage/netcdf/base/Convention.java |   4 +-
 .../apache/sis/storage/netcdf/base/Decoder.java    |   2 +-
 .../apache/sis/storage/netcdf/base/FeatureSet.java |   4 +-
 .../org/apache/sis/storage/netcdf/base/Grid.java   |   8 +-
 .../sis/storage/netcdf/base/GridCacheKey.java      |   2 +-
 .../sis/storage/netcdf/base/GridMapping.java       |   2 +-
 .../sis/storage/netcdf/base/RasterResource.java    |   8 +-
 .../apache/sis/storage/netcdf/base/Variable.java   |  14 +-
 .../sis/storage/netcdf/classic/GridInfo.java       |   4 +-
 .../sis/storage/netcdf/classic/VariableInfo.java   |   2 +-
 .../sis/storage/netcdf/internal/Resources.java     |   4 +-
 .../sis/storage/netcdf/internal/Resources_en.java  |   2 +-
 .../sis/storage/netcdf/internal/Resources_fr.java  |   2 +-
 .../apache/sis/storage/netcdf/package-info.java    |   2 +-
 .../sis/storage/netcdf/ucar/DimensionWrapper.java  |   4 +-
 .../sis/storage/netcdf/ucar/GridWrapper.java       |  10 +-
 .../sis/storage/netcdf/ucar/VariableWrapper.java   |   2 +-
 .../main/org/apache/sis/storage/sql/SQLStore.java  |   2 +-
 .../apache/sis/storage/sql/feature/Resources.java  |   4 +-
 .../sis/storage/sql/feature/Resources_en.java      |   2 +-
 .../sis/storage/sql/feature/Resources_fr.java      |   2 +-
 .../storage/sql/feature/SelectionClauseWriter.java |   4 +-
 .../org/apache/sis/storage/sql/package-info.java   |   2 +-
 .../storage/sql/postgis/ExtendedClauseWriter.java  |   4 +-
 .../apache/sis/util/stream/BaseStreamWrapper.java  |   2 +-
 .../org/apache/sis/storage/sql/SQLStoreTest.java   |   4 +-
 .../storage/sql/feature/GeometryGetterTest.java    |   2 +-
 .../sis/storage/sql/postgis/PostgresTest.java      |   2 +-
 .../org/apache/sis/storage/gpx/Description.java    |   2 +-
 .../sis/storage/xml/stream/StaxDataStore.java      |   4 +-
 .../sis/storage/xml/stream/StaxStreamIO.java       |   2 +-
 .../sis/storage/xml/stream/StaxStreamReader.java   |   4 +-
 .../sis/storage/xml/stream/StaxStreamWriter.java   |   2 +-
 .../org/apache/sis/storage/gpx/MetadataTest.java   |   2 +-
 .../org/apache/sis/storage/gpx/WriterTest.java     |  16 +-
 .../apache/sis/io/stream/ChannelDataOutput.java    |   2 +-
 .../org/apache/sis/io/stream/ChannelFactory.java   |   2 +-
 .../apache/sis/io/stream/FileCacheByteChannel.java |   2 +-
 .../main/org/apache/sis/storage/CoverageQuery.java |   4 +-
 .../org/apache/sis/storage/CoverageSubset.java     |   2 +-
 .../main/org/apache/sis/storage/DataSet.java       |   2 +-
 .../main/org/apache/sis/storage/DataStore.java     |   2 +-
 .../org/apache/sis/storage/DataStoreException.java |   2 +-
 .../main/org/apache/sis/storage/FeatureQuery.java  |   2 +-
 .../main/org/apache/sis/storage/Resource.java      |   2 +-
 .../org/apache/sis/storage/StorageConnector.java   |   4 +-
 .../aggregate/BandAggregateGridResource.java       |   2 +-
 .../storage/aggregate/ConcatenatedFeatureSet.java  |   2 +-
 .../aggregate/ConcatenatedGridCoverage.java        |   2 +-
 .../aggregate/ConcatenatedGridResource.java        |   8 +-
 .../sis/storage/aggregate/CoverageAggregator.java  |   2 +-
 .../sis/storage/aggregate/GroupAggregate.java      |   4 +-
 .../sis/storage/aggregate/MergeStrategy.java       |   4 +-
 .../sis/storage/base/MemoryGridResource.java       |   2 +-
 .../apache/sis/storage/base/MetadataBuilder.java   |  12 +-
 .../org/apache/sis/storage/base/PRJDataStore.java  |   4 +-
 .../org/apache/sis/storage/base/StoreMetadata.java |   2 +-
 .../apache/sis/storage/base/TiledGridCoverage.java |  14 +-
 .../sis/storage/base/TransactionalResource.java    |   2 +-
 .../org/apache/sis/storage/base/URIDataStore.java  |   2 +-
 .../storage/base/WritableGridCoverageSupport.java  |   2 +-
 .../apache/sis/storage/csv/FeatureIterator.java    |   2 +-
 .../main/org/apache/sis/storage/csv/Store.java     |   4 +-
 .../sis/storage/event/CascadedStoreEvent.java      |   4 +-
 .../org/apache/sis/storage/event/CloseEvent.java   |   4 +-
 .../apache/sis/storage/event/StoreListeners.java   |   2 +-
 .../org/apache/sis/storage/image/FormatFinder.java |   2 +-
 .../apache/sis/storage/image/WorldFileStore.java   |   4 +-
 .../org/apache/sis/storage/internal/Resources.java |   4 +-
 .../apache/sis/storage/internal/Resources_en.java  |   2 +-
 .../apache/sis/storage/internal/Resources_fr.java  |   2 +-
 .../sis/storage/tiling/WritableTileMatrixSet.java  |   4 +-
 .../sis/storage/tiling/WritableTiledResource.java  |   2 +-
 .../apache/sis/storage/xml/MimeTypeDetector.java   |   2 +-
 .../org/apache/sis/io/stream/IOUtilitiesTest.java  |   2 +-
 .../org/apache/sis/storage/CoverageQueryTest.java  |   2 +-
 .../org/apache/sis/storage/FeatureNamingTest.java  |   2 +-
 .../apache/sis/storage/StorageConnectorTest.java   |   4 +-
 .../sis/storage/test/CoverageReadConsistency.java  |   2 +-
 .../src/org.apache.sis.util/main/module-info.java  |   1 +
 .../apache/sis/converter/ConverterRegistry.java    |   2 +-
 .../apache/sis/converter/FallbackConverter.java    |   4 +-
 .../org/apache/sis/converter/SystemConverter.java  |   4 +-
 .../main/org/apache/sis/io/CompoundFormat.java     |   2 +-
 .../main/org/apache/sis/math/ArrayVector.java      |   8 +-
 .../main/org/apache/sis/math/DecimalFunctions.java |   4 +-
 .../main/org/apache/sis/math/Fraction.java         |   2 +-
 .../main/org/apache/sis/math/MathFunctions.java    |   8 +-
 .../main/org/apache/sis/math/Statistics.java       |   2 +-
 .../main/org/apache/sis/math/StatisticsFormat.java |   4 +-
 .../main/org/apache/sis/math/Vector.java           |  20 +--
 .../main/org/apache/sis/measure/AngleFormat.java   |   4 +-
 .../main/org/apache/sis/measure/DerivedScalar.java |   8 +-
 .../sis/measure/FormattedCharacterIterator.java    |   2 +-
 .../main/org/apache/sis/measure/Latitude.java      |   2 +-
 .../org/apache/sis/measure/LinearConverter.java    |   4 +-
 .../org/apache/sis/measure/MeasurementRange.java   |  10 +-
 .../main/org/apache/sis/measure/NumberRange.java   |  12 +-
 .../main/org/apache/sis/measure/Quantities.java    |   2 +-
 .../main/org/apache/sis/measure/Range.java         |   4 +-
 .../main/org/apache/sis/measure/Scalar.java        |  10 +-
 .../org/apache/sis/measure/ScalarFallback.java     |   2 +-
 .../org/apache/sis/measure/ScaleRateOfChange.java  |   2 +-
 .../main/org/apache/sis/measure/SystemUnit.java    |   2 +-
 .../main/org/apache/sis/measure/UnitRegistry.java  |   2 +-
 .../main/org/apache/sis/pending/jdk/JDK21.java     |  31 ++++
 .../org/apache/sis/system/OptionalDependency.java  |   2 +-
 .../sis/util/AbstractInternationalString.java      |   4 +-
 .../main/org/apache/sis/util/ArgumentChecks.java   |   2 +-
 .../main/org/apache/sis/util/ArraysExt.java        |  88 +++++------
 .../main/org/apache/sis/util/CharSequences.java    |  14 +-
 .../main/org/apache/sis/util/Classes.java          |   2 +-
 .../main/org/apache/sis/util/ComparisonMode.java   |   2 +-
 .../sis/util/DefaultInternationalString.java       |   2 +-
 .../org/apache/sis/util/LenientComparable.java     |  14 +-
 .../main/org/apache/sis/util/Numbers.java          |   2 +-
 .../main/org/apache/sis/util/Utilities.java        |   4 +-
 .../main/org/apache/sis/util/collection/Cache.java |   4 +-
 .../apache/sis/util/collection/CodeListSet.java    |   2 +-
 .../sis/util/collection/DefaultTreeTable.java      |   6 +-
 .../sis/util/collection/FrequencySortedSet.java    |   2 +-
 .../apache/sis/util/collection/IntegerList.java    |   2 +-
 .../org/apache/sis/util/collection/RangeSet.java   |   2 +-
 .../org/apache/sis/util/collection/TreeTable.java  |   6 +-
 .../org/apache/sis/util/collection/TreeTables.java |   2 +-
 .../org/apache/sis/util/internal/AbstractMap.java  |   6 +-
 .../main/org/apache/sis/util/internal/Bag.java     |   2 +-
 .../apache/sis/util/internal/CollectionsExt.java   |   4 +-
 .../org/apache/sis/util/internal/Numerics.java     |   2 +-
 .../main/org/apache/sis/util/internal/Strings.java |   4 +-
 .../main/org/apache/sis/util/logging/Logging.java  |   2 +-
 .../apache/sis/util/logging/MonolineFormatter.java |   4 +-
 .../main/org/apache/sis/util/resources/Errors.java |   6 +-
 .../org/apache/sis/util/resources/Errors_en.java   |   2 +-
 .../org/apache/sis/util/resources/Errors_fr.java   |   2 +-
 .../apache/sis/util/resources/KeyConstants.java    |   2 +-
 .../org/apache/sis/util/resources/Messages.java    |   4 +-
 .../org/apache/sis/util/resources/Messages_en.java |   2 +-
 .../org/apache/sis/util/resources/Messages_fr.java |   2 +-
 .../org/apache/sis/util/resources/Vocabulary.java  |   4 +-
 .../apache/sis/util/resources/Vocabulary_en.java   |   2 +-
 .../apache/sis/util/resources/Vocabulary_fr.java   |   2 +-
 .../sis/converter/ConverterRegistryTest.java       |   4 +-
 .../test/org/apache/sis/io/TableAppenderTest.java  |   2 +-
 .../test/org/apache/sis/math/PlaneTest.java        |   4 +-
 .../org/apache/sis/math/StatisticsFormatTest.java  |   2 +-
 .../test/org/apache/sis/math/StatisticsTest.java   |   2 +-
 .../apache/sis/measure/ConventionalUnitTest.java   |   2 +-
 .../apache/sis/measure/MeasurementRangeTest.java   |   2 +-
 .../test/org/apache/sis/test/Assertions.java       |   4 +-
 .../test/org/apache/sis/test/TestUtilities.java    |   4 +-
 .../sis/util/collection/CodeListSetTest.java       |   2 +-
 .../apache/sis/util/collection/LargeCodeList.java  |   2 +-
 .../apache/sis/util/collection/RangeSetTest.java   |   2 +-
 .../sis/util/internal/StandardDateFormatTest.java  |   2 +-
 .../storage/coveragejson/CoverageJsonStore.java    |   2 +-
 .../apache/sis/gui/controls/FormatTableCell.java   |   2 +-
 .../org/apache/sis/gui/coverage/CellFormat.java    |   2 +-
 .../apache/sis/gui/coverage/CoverageCanvas.java    |   2 +-
 .../org/apache/sis/gui/coverage/GridViewSkin.java  |   2 +-
 .../org/apache/sis/gui/dataset/FeatureTable.java   |   2 +-
 .../org/apache/sis/gui/dataset/ResourceItem.java   |   2 +-
 .../org/apache/sis/gui/dataset/WindowHandler.java  |   6 +-
 .../apache/sis/gui/internal/DataStoreOpener.java   |   2 +-
 .../org/apache/sis/gui/internal/GUIUtilities.java  |   2 +-
 .../sis/gui/internal/PropertyValueFormats.java     |   2 +-
 .../org/apache/sis/gui/internal/Resources.java     |   4 +-
 .../org/apache/sis/gui/internal/Resources_en.java  |   2 +-
 .../org/apache/sis/gui/internal/Resources_fr.java  |   2 +-
 .../main/org/apache/sis/gui/map/MapCanvasAWT.java  |   8 +-
 .../main/org/apache/sis/gui/map/StatusBar.java     |  10 +-
 .../org/apache/sis/gui/map/ValuesFormatter.java    |   6 +-
 .../gui/referencing/PositionableProjection.java    |   2 +-
 .../main/org/apache/sis/gui/setup/FXFinder.java    |   2 +-
 .../main/org/apache/sis/gui/setup/Wizard.java      |   2 +-
 649 files changed, 1718 insertions(+), 1449 deletions(-)

diff --cc 
endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
index ac3b078830,fb91a2d451..9e2bd12090
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
@@@ -745,22 -761,60 +761,60 @@@ class CoordinateOperationRegistry 
      private CoordinateOperation inverse(final CoordinateOperation operation)
              throws NoninvertibleTransformException, FactoryException
      {
 -        if (operation instanceof SingleOperation) {
 +        if (SubTypes.isSingleOperation(operation)) {
              return inverse((SingleOperation) operation);
          }
+         CoordinateOperation inverse = 
AbstractCoordinateOperation.getCachedInverse(operation);
+         if (inverse != null) {
+             return inverse;
+         }
          if (operation instanceof ConcatenatedOperation) {
-             final List<? extends CoordinateOperation> operations = 
((ConcatenatedOperation) operation).getOperations();
-             final CoordinateOperation[] inverted = new 
CoordinateOperation[operations.size()];
-             for (int i=0; i<inverted.length;) {
-                 final CoordinateOperation op = inverse(operations.get(i));
-                 if (op == null) {
-                     return null;
+             final CoordinateOperation[] inverted = 
getSteps((ConcatenatedOperation) operation, true);
+             ArraysExt.reverse(inverted);
+             final Map<String,Object> properties = 
properties(INVERSE_OPERATION);
+             final MathTransform transform = operation.getMathTransform();
+             if (transform != null) {
+                 properties.put(DefaultConcatenatedOperation.TRANSFORM_KEY, 
transform.inverse());
+             }
+             inverse = factory.createConcatenatedOperation(properties, 
inverted);
+             AbstractCoordinateOperation.setCachedInverse(operation, inverse);
+         }
+         return inverse;
+     }
+ 
+     /**
+      * Returns all steps of the given concatenated operation, making sure 
that they are in the specified direction.
+      * This method returns an array where the source CRS of the first step is 
the {@code operation} source CRS, and
+      * where the target CRS of each step is the source CRS of the next step. 
If needed, some steps may be inverted
+      * in order to fulfill that requirement.
+      *
+      * <p>If {@code inverse} if {@code true}, then this method inverses all 
steps. Note however that the element
+      * order in the returned array is not inverted (this is left to the 
caller).</p>
+      *
+      * @param  operation  the operation for which to get the steps.
+      * @return all steps of the given concatenated operation.
+      * @throws NoninvertibleTransformException if a step needs to be inverted 
but is not invertible.
+      * @throws FactoryException if the operation creation failed for another 
reason (e.g., inconsistency found).
+      */
+     private CoordinateOperation[] getSteps(final ConcatenatedOperation 
operation, final boolean inverse)
+             throws NoninvertibleTransformException, FactoryException
+     {
+         final var steps = 
operation.getOperations().toArray(CoordinateOperation[]::new);
+         CoordinateReferenceSystem previous = operation.getSourceCRS();
+         for (int i=0; i<steps.length; i++) {
+             final CoordinateOperation step = steps[i];
+             final CoordinateReferenceSystem source = step.getSourceCRS();
+             final CoordinateReferenceSystem target = step.getTargetCRS();
+             final boolean r = 
DefaultConcatenatedOperation.verifyStepChaining(null, i, previous, source, 
target);
+             if (r != inverse) {
+                 if ((steps[i] = inverse(step)) == null) {
+                     throw new 
NoninvertibleTransformException(resources().getString(
+                                 Resources.Keys.NonInvertibleOperation_1, 
label(step)));
                  }
-                 inverted[inverted.length - ++i] = op;
              }
-             return 
factory.createConcatenatedOperation(properties(INVERSE_OPERATION), inverted);
+             previous = r ? source : target;
          }
-         return null;
+         return steps;
      }
  
      /**
diff --cc 
endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConcatenatedOperation.java
index 73d129a5b9,9fb03672f2..f13b9a7dbb
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConcatenatedOperation.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConcatenatedOperation.java
@@@ -40,11 -46,7 +46,10 @@@ import org.apache.sis.util.collection.C
  import org.apache.sis.util.internal.UnmodifiableArrayList;
  import org.apache.sis.util.resources.Errors;
  import org.apache.sis.io.wkt.Formatter;
- import static org.apache.sis.util.Utilities.deepEquals;
  
 +// Specific to the main and geoapi-3.1 branches:
 +import org.opengis.referencing.operation.SingleOperation;
 +
  
  /**
   * An ordered sequence of two or more single coordinate operations. The 
sequence of operations is constrained
diff --cc 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java
index c2863733cb,c2c3b43030..65e24ec3e6
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java
@@@ -1737,10 -1735,9 +1737,10 @@@ parse:      for (int i = 0; i < length;
              }
              if (i != 0) {
                  buffer.setLength(i);
-                 // Same limitation than MetadataBuilder.party().
+                 // Same limitation as MetadataBuilder.party().
                  final AbstractParty party = new AbstractParty(buffer, null);
 -                final DefaultResponsibility r = new 
DefaultResponsibility(Role.OWNER, null, party);
 +                final DefaultResponsibleParty r = new 
DefaultResponsibleParty(Role.OWNER);
 +                r.setParties(Collections.singleton(party));
                  c.setCitedResponsibleParties(Collections.singleton(r));
              }
              constraints.getReferences().add(c);


Reply via email to