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/11 16:38:50 UTC
[sis] 01/03: Resolve some of the cases (the easy ones) that where identified by a "Pending JDK9" comment.
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 <ma...@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);