This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 7a733dc902a2964c4c5f544e5663c6c717c1830d Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Sun Dec 11 13:53:43 2022 +0100 Resolve some of the cases (the easy ones) that where identified by a "Pending JDK9" comment. --- .../src/main/java/org/apache/sis/coverage/SampleDimension.java | 2 +- .../main/java/org/apache/sis/coverage/grid/GridDerivation.java | 3 +-- .../src/main/java/org/apache/sis/filter/BinaryFunction.java | 3 +-- .../src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java | 3 +-- .../src/main/java/org/apache/sis/filter/DistanceFilter.java | 7 +++---- .../src/main/java/org/apache/sis/filter/LikeFilter.java | 7 ++----- .../src/main/java/org/apache/sis/index/tree/PointTreeNode.java | 2 +- .../src/main/java/org/apache/sis/index/tree/QuadTreeNode.java | 4 ++-- .../org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java | 3 +-- .../java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java | 3 +-- .../java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java | 3 +-- .../java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java | 5 ++--- .../java/org/apache/sis/internal/filter/FunctionNamesTest.java | 5 ++--- .../sis/internal/map/coverage/MultiResolutionCoverageLoader.java | 2 +- .../main/java/org/apache/sis/geometry/WraparoundAdjustment.java | 6 +++--- .../internal/referencing/provider/DatumShiftGridCompressed.java | 4 ++-- .../java/org/apache/sis/referencing/datum/DatumShiftGrid.java | 4 ++-- .../apache/sis/referencing/operation/builder/ResidualGrid.java | 5 ++--- .../org/apache/sis/referencing/operation/matrix/Matrices.java | 2 +- .../src/main/java/org/apache/sis/internal/jdk17/package-info.java | 2 +- .../src/main/java/org/apache/sis/internal/util/Cloner.java | 8 ++++---- .../main/java/org/apache/sis/internal/util/CollectionsExt.java | 3 +-- .../main/java/org/apache/sis/internal/util/FinalFieldSetter.java | 6 +++--- .../src/main/java/org/apache/sis/internal/util/Numerics.java | 3 --- core/sis-utility/src/main/java/org/apache/sis/math/Fraction.java | 4 ++-- .../src/main/java/org/apache/sis/math/LinearlyDerivedVector.java | 8 ++++---- .../src/main/java/org/apache/sis/math/SequenceVector.java | 5 ++--- .../org/apache/sis/internal/storage/inflater/CopyFromBytes.java | 8 ++++---- .../main/java/org/apache/sis/storage/sql/ResourceDefinition.java | 6 ++---- 29 files changed, 53 insertions(+), 73 deletions(-) diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java index 82b27f1df3..755e289e6d 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java @@ -1067,7 +1067,7 @@ public class SampleDimension implements Serializable { final double scale = Δvalue / Δsample; final TransferFunction transferFunction = new TransferFunction(); transferFunction.setScale(scale); - transferFunction.setOffset(minValue - scale * minSample); // TODO: use Math.fma with JDK9. + transferFunction.setOffset(Math.fma(-scale, minSample, minValue)); return addQuantitative(name, samples, transferFunction.getTransform(), (converted instanceof MeasurementRange<?>) ? ((MeasurementRange<?>) converted).unit() : null); } diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java index 26ab0221c2..5d3050746a 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java +++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java @@ -714,8 +714,7 @@ public class GridDerivation { if (s > 1) { // Also for skipping NaN values. final int i = (modifiedDimensions != null) ? modifiedDimensions[k] : k; affine.setElement(i, i, s); - affine.setElement(i, dimension, extent.getLow(i) - scaledExtent.getLow(i) * s); - // TODO: use Math.fma with JDK9. + affine.setElement(i, dimension, Math.fma(-s, scaledExtent.getLow(i), extent.getLow(i))); } } toBase = MathTransforms.linear(affine); diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryFunction.java b/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryFunction.java index f79897a5ba..78eeb6c864 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryFunction.java +++ b/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryFunction.java @@ -17,7 +17,6 @@ package org.apache.sis.filter; import java.util.List; -import java.util.Arrays; import java.util.Collection; import java.math.BigInteger; import java.math.BigDecimal; @@ -101,7 +100,7 @@ abstract class BinaryFunction<R,V1,V2> extends Node { * @return a list of size 2 containing the two expressions. */ public List<Expression<? super R, ?>> getExpressions() { - return Arrays.asList(expression1, expression2); // TODO: use List.of(…) with JDK9. + return List.of(expression1, expression2); } /** diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java index 741ebfc587..71a98683d5 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java +++ b/core/sis-feature/src/main/java/org/apache/sis/filter/BinaryGeometryFilter.java @@ -17,7 +17,6 @@ package org.apache.sis.filter; import java.util.List; -import java.util.Arrays; import javax.measure.Unit; import javax.measure.IncommensurableException; import org.opengis.util.FactoryException; @@ -171,7 +170,7 @@ abstract class BinaryGeometryFilter<R,G> extends FilterNode<R> implements Spatia */ @Override public List<Expression<? super R, ?>> getExpressions() { - return Arrays.asList(original(expression1), original(expression2)); // TODO: use List.of(…) with JDK9. + return List.of(original(expression1), original(expression2)); } /** diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java index 4c75c4d969..16f96844d7 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java +++ b/core/sis-feature/src/main/java/org/apache/sis/filter/DistanceFilter.java @@ -17,7 +17,6 @@ package org.apache.sis.filter; import java.util.List; -import java.util.Arrays; import java.util.Collection; import javax.measure.Quantity; import javax.measure.quantity.Length; @@ -115,8 +114,8 @@ final class DistanceFilter<R,G> extends BinaryGeometryFilter<R,G> implements Dis */ @Override public List<Expression<? super R, ?>> getExpressions() { - return Arrays.asList(original(expression1), original(expression2), // TODO: use List.of(…) with JDK9. - new LeafExpression.Literal<>(distance)); + return List.of(original(expression1), original(expression2), + new LeafExpression.Literal<>(distance)); } /** @@ -125,7 +124,7 @@ final class DistanceFilter<R,G> extends BinaryGeometryFilter<R,G> implements Dis */ @Override protected Collection<?> getChildren() { - return Arrays.asList(original(expression1), original(expression2), distance); // TODO: use List.of(…) with JDK9. + return List.of(original(expression1), original(expression2), distance); } /** diff --git a/core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java b/core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java index d0cddd88f7..e588e7c4b1 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java +++ b/core/sis-feature/src/main/java/org/apache/sis/filter/LikeFilter.java @@ -17,7 +17,6 @@ package org.apache.sis.filter; import java.util.List; -import java.util.Arrays; import java.util.Collection; import java.util.regex.Pattern; import org.apache.sis.util.ArgumentChecks; @@ -169,8 +168,7 @@ final class LikeFilter<R> extends FilterNode<R> implements LikeOperator<R>, Opti */ @Override protected Collection<?> getChildren() { - // TODO: use List.of(…) in JDK9. - return Arrays.asList(expression, pattern); + return List.of(expression, pattern); } /** @@ -178,8 +176,7 @@ final class LikeFilter<R> extends FilterNode<R> implements LikeOperator<R>, Opti */ @Override public List<Expression<? super R, ?>> getExpressions() { - // TODO: use List.of(…) in JDK9. - return Arrays.asList(expression, new LeafExpression.Literal<>(pattern)); + return List.of(expression, new LeafExpression.Literal<>(pattern)); } /** diff --git a/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java b/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java index 72201fce19..f772722496 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java +++ b/core/sis-feature/src/main/java/org/apache/sis/index/tree/PointTreeNode.java @@ -96,7 +96,7 @@ abstract class PointTreeNode implements Cloneable, Serializable { static void enterQuadrant(final double[] region, final int quadrant) { final int n = region.length >>> 1; for (int i = n; --i >= 0;) { - region[i] += factor(quadrant, i) * (region[i+n] *= 0.5); // TODO: use Math.fma with JDK9. + region[i] = Math.fma(factor(quadrant, i), region[i+n] *= 0.5, region[i]); } } diff --git a/core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java b/core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java index fe0d87ccb9..3f2a609697 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java +++ b/core/sis-feature/src/main/java/org/apache/sis/index/tree/QuadTreeNode.java @@ -91,7 +91,7 @@ final class QuadTreeNode extends PointTreeNode { case NE: child = ne; break; case SW: child = sw; break; case SE: child = se; break; - default: throw new IndexOutOfBoundsException(/*quadrant*/); // TODO: uncomment with JDK9. + default: throw new IndexOutOfBoundsException(quadrant); } return child; } @@ -109,7 +109,7 @@ final class QuadTreeNode extends PointTreeNode { case NE: ne = child; break; case SW: sw = child; break; case SE: se = child; break; - default: throw new IndexOutOfBoundsException(/*quadrant*/); // TODO: uncomment with JDK9. + default: throw new IndexOutOfBoundsException(quadrant); } } diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java index dac8fcd473..23c0f5e460 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java +++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/GeometryConstructor.java @@ -18,7 +18,6 @@ package org.apache.sis.internal.filter.sqlmm; import java.nio.ByteBuffer; import java.util.List; -import java.util.Arrays; import java.util.Collections; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.apache.sis.internal.feature.Geometries; @@ -87,7 +86,7 @@ class GeometryConstructor<R,G> extends FunctionWithSRID<R> { if (srid == null) { return Collections.singletonList(geometry); } - return Arrays.asList(geometry, srid); // TODO: use List.of(…) with JDK9. + return List.of(geometry, srid); } /** diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java index d219252ed3..ce89681955 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java +++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/OneGeometry.java @@ -16,7 +16,6 @@ */ package org.apache.sis.internal.filter.sqlmm; -import java.util.Arrays; import java.util.List; import java.util.Collections; import org.apache.sis.internal.feature.Geometries; @@ -133,7 +132,7 @@ class OneGeometry<R,G> extends SpatialFunction<R> { */ @Override public List<Expression<? super R, ?>> getParameters() { - return Arrays.asList(unwrap(geometry), argument); // TODO: use List.of(…) with JDK9. + return List.of(unwrap(geometry), argument); } /** diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java index f60c689127..a7bbb3de7d 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java +++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java @@ -17,7 +17,6 @@ package org.apache.sis.internal.filter.sqlmm; import java.util.List; -import java.util.Arrays; import org.opengis.util.FactoryException; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.TransformException; @@ -107,7 +106,7 @@ final class ST_Transform<R,G> extends FunctionWithSRID<R> { */ @Override public List<Expression<? super R, ?>> getParameters() { - return Arrays.asList(unwrap(geometry), srid); // TODO: use List.of(…) with JDK9. + return List.of(unwrap(geometry), srid); } /** diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java index ccb6e1b983..8a29bdf3c5 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java +++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/TwoGeometries.java @@ -17,7 +17,6 @@ package org.apache.sis.internal.filter.sqlmm; import java.util.List; -import java.util.Arrays; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.TransformException; import org.apache.sis.filter.Optimization; @@ -121,7 +120,7 @@ class TwoGeometries<R,G> extends SpatialFunction<R> { */ @Override public List<Expression<? super R, ?>> getParameters() { - return Arrays.asList(unwrap(geometry1), unwrap(geometry2)); // TODO: use List.of(…) with JDK9. + return List.of(unwrap(geometry1), unwrap(geometry2)); } /** @@ -177,7 +176,7 @@ class TwoGeometries<R,G> extends SpatialFunction<R> { */ @Override public List<Expression<? super R, ?>> getParameters() { - return Arrays.asList(unwrap(geometry1), unwrap(geometry2), argument); // TODO: use List.of(…) with JDK9. + return List.of(unwrap(geometry1), unwrap(geometry2), argument); } /** diff --git a/core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java b/core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java index ab56a4d13f..cf38988806 100644 --- a/core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java +++ b/core/sis-feature/src/test/java/org/apache/sis/internal/filter/FunctionNamesTest.java @@ -106,7 +106,7 @@ public final strictfp class FunctionNamesTest extends TestCase { */ @Test public void verifyLiteral() { - final Literal<Object,Object> expression = new Literal<Object,Object>() { + final var expression = new Literal<Object,Object>() { @Override public Object getValue() {return null;} @Override public <N> Expression<Object, N> toValueType(Class<N> target) { throw new UnsupportedOperationException(); @@ -120,8 +120,7 @@ public final strictfp class FunctionNamesTest extends TestCase { */ @Test public void verifyValueReference() { - // TODO: use diamond operator with JDK9. - final ValueReference<Object,Object> expression = new ValueReference<Object,Object>() { + final var expression = new ValueReference<Object,Object>() { @Override public String getXPath() {return null;} @Override public Object apply(Object o) {return null;} @Override public <N> Expression<Object,N> toValueType(Class<N> target) { diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/coverage/MultiResolutionCoverageLoader.java b/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/coverage/MultiResolutionCoverageLoader.java index bb54bff5e7..8c442d8746 100644 --- a/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/coverage/MultiResolutionCoverageLoader.java +++ b/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/coverage/MultiResolutionCoverageLoader.java @@ -237,7 +237,7 @@ dimensions: for (int j=0; j<tgtDim; j++) { */ e = 0; for (int k=0; k<objDim; k++) { - e += d.getElement(j,k) * m.getElement(k,i); // TODO: use Math.fma(…) with JDK9. + e = Math.fma(d.getElement(j,k), m.getElement(k,i), e); } } sum += e * e; diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/WraparoundAdjustment.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/WraparoundAdjustment.java index d7948b7eb0..4526203cb7 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/WraparoundAdjustment.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/WraparoundAdjustment.java @@ -488,8 +488,8 @@ public class WraparoundAdjustment { shifted = new GeneralEnvelope(areaOfInterest); } areaOfInterest = shifted; // `shifted` may have been set before the loop. - shifted.setRange(i, lower + lowerCycles * period, // TODO: use Math.fma in JDK9. - upper + upperCycles * period); + shifted.setRange(i, Math.fma(period, lowerCycles, lower), + Math.fma(period, upperCycles, upper)); } } } @@ -553,7 +553,7 @@ public class WraparoundAdjustment { shifted = new GeneralDirectPosition(pointOfInterest); } pointOfInterest = shifted; // `shifted` may have been set before the loop. - shifted.setOrdinate(i, x + delta * period); // TODO: use Math.fma in JDK9. + shifted.setOrdinate(i, Math.fma(period, delta, x)); } } } diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridCompressed.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridCompressed.java index 7a7d49b64f..6ad77c7088 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridCompressed.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridCompressed.java @@ -212,8 +212,8 @@ final class DatumShiftGridCompressed<C extends Quantity<C>, T extends Quantity<T final double r01 = values[p00 + 1]; // Naming convention: ryx (row index first, like matrix). final double r10 = values[p10 ]; final double r11 = values[p10 + 1]; - final double r0x = r00 + gridX * (dx = r01 - r00); // TODO: use Math.fma on JDK9. - final double r1x = r10 + gridX * (dy = r11 - r10); // Not really "dy" measurement yet, will become dy later. + final double r0x = Math.fma(gridX, dx = r01 - r00, r00); + final double r1x = Math.fma(gridX, dy = r11 - r10, r10); // Not really "dy" measurement yet, will become dy later. vector[dim] = (gridY * (r1x - r0x) + r0x) * scale + averages[dim]; if (derivative) { if (skipX) { diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DatumShiftGrid.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DatumShiftGrid.java index 0d1b02f53c..40e4749e41 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DatumShiftGrid.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DatumShiftGrid.java @@ -553,8 +553,8 @@ public abstract class DatumShiftGrid<C extends Quantity<C>, T extends Quantity<T final double r01 = getCellValue(dim, ix+1, iy ); // Naming convention: ryx (row index first, like matrix). final double r10 = getCellValue(dim, ix, iy+1); final double r11 = getCellValue(dim, ix+1, iy+1); - final double r0x = r00 + gridX * (dx = r01 - r00); // TODO: use Math.fma on JDK9. - final double r1x = r10 + gridX * (dy = r11 - r10); // Not really "dy" measurement yet, will become dy later. + final double r0x = Math.fma(gridX, dx = r01 - r00, r00); + final double r1x = Math.fma(gridX, dy = r11 - r10, r10); // Not really "dy" measurement yet, will become dy later. vector[dim] = gridY * (r1x - r0x) + r0x; if (derivative) { /* diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/ResidualGrid.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/ResidualGrid.java index 301ad0670d..1a8d7df858 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/ResidualGrid.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/ResidualGrid.java @@ -327,9 +327,8 @@ final class ResidualGrid extends DatumShiftGrid<Dimensionless,Dimensionless> { if ((x | y) < 0 || x >= scanlineStride) { throw new IndexOutOfBoundsException(); } - return c0 * (x + getCellValue(0, x, y)) + // TODO: use Math.fma with JDK9. - c1 * (y + getCellValue(1, x, y)) + - c2; + return Math.fma(x + getCellValue(0, x, y), c0, + Math.fma(y + getCellValue(1, x, y), c1, c2)); } /** diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrices.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrices.java index a5ba531d0f..6ba7a811a9 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrices.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrices.java @@ -889,7 +889,7 @@ public final class Matrices extends Static { if (anchor != null) { final double p = anchor[j]; double e = matrix.getElement(j, srcDim); - changed |= (e != (e = (e-p)*rescale + p)); // TODO: use Math.fma in JDK9. + changed |= (e != (e = Math.fma(rescale, e-p, p))); matrix.setElement(j, srcDim, e); } } diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/jdk17/package-info.java b/core/sis-utility/src/main/java/org/apache/sis/internal/jdk17/package-info.java index c766349852..f2d2fc1a75 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/jdk17/package-info.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/jdk17/package-info.java @@ -16,7 +16,7 @@ */ /** - * Place-holder for JDK9 classes that do not exist in JDK8. + * Place-holder for classes that do not exist in JDK 11. * * <STRONG>Do not use!</STRONG> * diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Cloner.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Cloner.java index 4e9f314d36..f6f6b67758 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Cloner.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Cloner.java @@ -22,6 +22,7 @@ import java.lang.reflect.Array; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.InaccessibleObjectException; import org.apache.sis.util.Workaround; import org.apache.sis.util.resources.Errors; @@ -31,7 +32,7 @@ import org.apache.sis.util.resources.Errors; * for the lack of public {@code clone()} method in the {@link Cloneable} interface. * * @author Martin Desruisseaux (Geomatys) - * @version 1.1 + * @version 1.4 * @since 0.3 * @module */ @@ -133,7 +134,7 @@ public final class Cloner { if (componentType != null) { return cloneArray(object, componentType); } - SecurityException security = null; + RuntimeException security = null; result = object; try { if (valueType != type) { @@ -146,9 +147,8 @@ public final class Cloner { * in order to report it in case of failure. */ if (!Modifier.isPublic(method.getDeclaringClass().getModifiers())) try { - // TODO: use trySetAccessible() with JDK9. method.setAccessible(true); - } catch (SecurityException e) { + } catch (SecurityException | InaccessibleObjectException e) { security = e; } } diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java index 0803fdeb29..239e764442 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/CollectionsExt.java @@ -477,8 +477,7 @@ public final class CollectionsExt extends Static { * implements CheckedContainer is not a goal here, and is actually unsafe since we have * no guarantee (except Javadoc contract) that the <E> in CheckedContainer<E> is really * the same than in Collection<E>. We tolerate this hole for now because we documented - * the restriction in CheckedContainer javadoc, but future version may replace this block - * by JDK9 collections. + * the restriction in CheckedContainer javadoc. */ @SuppressWarnings("unchecked") // Okay if collection is compliant with CheckedContainer contract. final E[] array = (E[]) Array.newInstance(((CheckedContainer<E>) list).getElementType(), length); diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/FinalFieldSetter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/FinalFieldSetter.java index 039dde3594..8116bd10ee 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/FinalFieldSetter.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/FinalFieldSetter.java @@ -18,6 +18,7 @@ package org.apache.sis.internal.util; import java.lang.reflect.Field; import java.io.InvalidClassException; +import java.lang.reflect.InaccessibleObjectException; import org.apache.sis.internal.system.Modules; @@ -49,7 +50,7 @@ import org.apache.sis.internal.system.Modules; * since {@code java.security.AccessController} has been deprecated in Java 17. * * @author Martin Desruisseaux (Geomatys) - * @version 1.2 + * @version 1.4 * * @see <a href="https://openjdk.java.net/jeps/411">JEP-411</a> * @see <a href="https://issues.apache.org/jira/browse/SIS-525">SIS-525</a> @@ -123,7 +124,6 @@ public final class FinalFieldSetter { * @return the exception to throw. */ public static RuntimeException cloneFailure(final ReflectiveOperationException cause) { - return new RuntimeException(cause); - // TODO: use InaccessibleObjectException in JDK9. + return (InaccessibleObjectException) new InaccessibleObjectException().initCause(cause); } } diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Numerics.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Numerics.java index 63df579148..ca272ef6ce 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Numerics.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Numerics.java @@ -270,9 +270,6 @@ public final class Numerics extends Static { * @return {@code value} × {@code multiplier} / {@code divisor} rounded toward zero. */ public static long multiplyDivide(final long value, final long multiplier, final long divisor) { - // TODO: uncomment with JDK9 -// final long high = Math.multiplyHigh(value, multiplier); -// return Math.multiplyExact(value * multiplier / divisor, high); return Math.multiplyExact(value, multiplier) / divisor; } diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/Fraction.java b/core/sis-utility/src/main/java/org/apache/sis/math/Fraction.java index 9dddc00600..2cc1c33a16 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/math/Fraction.java +++ b/core/sis-utility/src/main/java/org/apache/sis/math/Fraction.java @@ -637,8 +637,8 @@ public final class Fraction extends Number implements Comparable<Fraction>, Seri case '⁄': case '/': case '∕': { - numerator = Integer.parseInt(s.substring(0,i)); // TODO: revisit with JDK9. - denominator = Integer.parseInt(s.substring(i+1)); + numerator = Integer.parseInt(s, 0, i, 10); + denominator = Integer.parseInt(s, i+1, length, 10); return; } } diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/LinearlyDerivedVector.java b/core/sis-utility/src/main/java/org/apache/sis/math/LinearlyDerivedVector.java index 573a447299..3db222e23b 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/math/LinearlyDerivedVector.java +++ b/core/sis-utility/src/main/java/org/apache/sis/math/LinearlyDerivedVector.java @@ -136,7 +136,7 @@ final class LinearlyDerivedVector extends Vector implements Serializable { */ @Override public double doubleValue(final int index) { - return base.doubleValue(index) * scale + offset; // TODO: use Math.fma in JDK9. + return Math.fma(base.doubleValue(index), scale, offset); } /** @@ -218,7 +218,7 @@ final class LinearlyDerivedVector extends Vector implements Serializable { */ private Number convert(Number value) { if (value != null) { - value = value.doubleValue() * scale + offset; // TODO: use Math.fma in JDK9. + value = Math.fma(value.doubleValue(), scale, offset); } return value; } @@ -320,7 +320,7 @@ final class LinearlyDerivedVector extends Vector implements Serializable { */ @Override final Vector createTransform(final double s, final double t) { - return base.transform(scale * s, offset * s + t); // TODO: use Math.fma with JDK9. + return base.transform(scale * s, Math.fma(offset, s, t)); } /** @@ -332,7 +332,7 @@ final class LinearlyDerivedVector extends Vector implements Serializable { public double[] doubleValues() { final double[] array = base.doubleValues(); for (int i=0; i<array.length; i++) { - array[i] = array[i] * scale + offset; // TODO: use Math.fma with JDK9. + array[i] = Math.fma(array[i], scale, offset); } return array; } diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/SequenceVector.java b/core/sis-utility/src/main/java/org/apache/sis/math/SequenceVector.java index 69790dd593..be4bb0b063 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/math/SequenceVector.java +++ b/core/sis-utility/src/main/java/org/apache/sis/math/SequenceVector.java @@ -69,7 +69,7 @@ abstract class SequenceVector extends Vector implements Serializable { @Override final Vector createTransform(final double scale, final double offset) { return new Doubles(Double.class, - doubleValue(0) * scale + offset, // TODO: use Math.fma with JDK9. + Math.fma(doubleValue(0), scale, offset), increment(0).doubleValue() * scale, length); } @@ -195,8 +195,7 @@ abstract class SequenceVector extends Vector implements Serializable { /** Computes the value at the given index. */ @Override public final double doubleValue(final int index) { ArgumentChecks.ensureValidIndex(length, index); - return first + increment*index; - // TODO: use Math.fma with JDK9. + return Math.fma(index, increment, first); } /** Returns the string representation of the value at the given index. */ diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java index 29a1a9a891..63574d3193 100644 --- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java +++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java @@ -289,7 +289,7 @@ abstract class CopyFromBytes extends Inflater { } final int n = elementsPerChunk * Short.BYTES; input.ensureBufferContains(n); - bank.put((ShortBuffer) source.asShortBuffer().limit(elementsPerChunk)); // TODO: remove cast in JDK9. + bank.put(source.asShortBuffer().limit(elementsPerChunk)); source.position(source.position() + n); } } @@ -329,7 +329,7 @@ abstract class CopyFromBytes extends Inflater { } final int n = elementsPerChunk * Integer.BYTES; input.ensureBufferContains(n); - bank.put((IntBuffer) source.asIntBuffer().limit(elementsPerChunk)); // TODO: remove cast in JDK9. + bank.put(source.asIntBuffer().limit(elementsPerChunk)); source.position(source.position() + n); } } @@ -369,7 +369,7 @@ abstract class CopyFromBytes extends Inflater { } final int n = elementsPerChunk * Float.BYTES; input.ensureBufferContains(n); - bank.put((FloatBuffer) source.asFloatBuffer().limit(elementsPerChunk)); // TODO: remove cast in JDK9. + bank.put(source.asFloatBuffer().limit(elementsPerChunk)); source.position(source.position() + n); } } @@ -409,7 +409,7 @@ abstract class CopyFromBytes extends Inflater { } final int n = elementsPerChunk * Double.BYTES; input.ensureBufferContains(n); - bank.put((DoubleBuffer) source.asDoubleBuffer().limit(elementsPerChunk)); // TODO: remove cast in JDK9. + bank.put(source.asDoubleBuffer().limit(elementsPerChunk)); source.position(source.position() + n); } } diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/storage/sql/ResourceDefinition.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/storage/sql/ResourceDefinition.java index 75938e791b..61e36a2cb8 100644 --- a/storage/sis-sqlstore/src/main/java/org/apache/sis/storage/sql/ResourceDefinition.java +++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/storage/sql/ResourceDefinition.java @@ -17,7 +17,6 @@ package org.apache.sis.storage.sql; import java.util.Map; -import java.util.HashMap; import java.util.Objects; import java.util.Optional; import org.opengis.util.NameSpace; @@ -166,9 +165,8 @@ public final class ResourceDefinition { final NameFactory factory = DefaultFactories.forBuildin(NameFactory.class); NameSpace ns = tableNS; if (ns == null) { - final Map<String,String> properties = new HashMap<>(4); // TODO: use Map.of with JDK9. - properties.put("separator", "."); - properties.put("separator.head", ":"); + var properties = Map.of("separator", ".", + "separator.head", ":"); tableNS = ns = factory.createNameSpace(factory.createLocalName(null, "database"), properties); } return new ResourceDefinition(factory.createGenericName(ns, names), null);