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/12 16:34:30 UTC
[sis] 02/02: Resolve some "TODO" which were waiting for JDK 10 or JDK 11.
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 2c7abea573334f1494fa67aa49815e3a9927eabd
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Mon Dec 12 17:19:35 2022 +0100
Resolve some "TODO" which were waiting for JDK 10 or JDK 11.
---
.../apache/sis/internal/feature/j2d/Factory.java | 4 +--
.../sis/internal/jaxb/IdentifierMapAdapter.java | 5 ++--
.../org/apache/sis/xml/TransformingReader.java | 1 -
.../org/apache/sis/internal/util/Numerics.java | 11 +++++--
.../org/apache/sis/internal/util/NumericsTest.java | 35 +++++++++++++++++++++-
.../apache/sis/internal/storage/inflater/ZIP.java | 31 ++-----------------
.../internal/storage/inflater/package-info.java | 2 +-
.../sis/internal/storage/xml/AbstractProvider.java | 2 +-
.../storage/aggregate/AggregatedFeatureSet.java | 2 +-
.../sis/storage/aggregate/GroupBySample.java | 2 +-
10 files changed, 54 insertions(+), 41 deletions(-)
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/Factory.java b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/Factory.java
index b8a2191ae4..0376a8b10b 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/Factory.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/j2d/Factory.java
@@ -253,7 +253,7 @@ public final class Factory extends Geometries<Shape> {
for (final Shape geometry : shapes) {
path.append(geometry, false);
}
- // path.trimToSize(); // TODO: uncomment with JDK10.
+ path.trimToSize();
return new Wrapper(path);
}
@@ -309,7 +309,7 @@ public final class Factory extends Geometries<Shape> {
}
}
}
- // path.trimToSize(); // TODO: uncomment with JDK10.
+ path.trimToSize();
geometry = path;
}
return new Wrapper(geometry);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
index e8a3e81a5e..1cf8530f66 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
@@ -21,7 +21,6 @@ import java.util.Set;
import java.util.List;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collection;
import java.util.AbstractMap;
@@ -131,10 +130,10 @@ public class IdentifierMapAdapter extends AbstractMap<Citation,String> implement
public final Collection<Identifier> getIdentifiers(final Class<?> type) {
if (!type.isInstance(identifiers)) {
if (type.isAssignableFrom(Set.class)) {
- return new HashSet<>(identifiers); // TODO: use Set.copyOf in JDK10.
+ return Set.copyOf(identifiers);
}
if (type.isAssignableFrom(List.class)) {
- return new ArrayList<>(identifiers); // TODO: use List.copyOf in JDK10.
+ return List.copyOf(identifiers);
}
}
return identifiers;
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/xml/TransformingReader.java b/core/sis-metadata/src/main/java/org/apache/sis/xml/TransformingReader.java
index b3e7a0383d..21dacce17d 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/xml/TransformingReader.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/xml/TransformingReader.java
@@ -99,7 +99,6 @@ final class TransformingReader extends Transformer implements XMLEventReader {
* This map is initialized only once and should not be modified after that point.
*/
private static final Map<String, Map<String,String>> NAMESPACES = load(false, FILENAME, LEGACY_NAMESPACES, 260);
- // TODO: use Set.copyOf(…) with JDK10.
/**
* Returns the namespace for the given ISO type, or {@code null} if unknown.
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 ca272ef6ce..a16dabd699 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
@@ -21,6 +21,7 @@ import java.util.HashMap;
import java.text.Format;
import java.text.DecimalFormat;
import java.util.function.BiFunction;
+import java.math.BigInteger;
import org.apache.sis.util.Debug;
import org.apache.sis.util.Static;
import org.apache.sis.util.Workaround;
@@ -39,7 +40,7 @@ import static java.lang.Math.ulp;
* Miscellaneous utilities methods working on floating point numbers.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
* @since 0.3
* @module
*/
@@ -270,7 +271,13 @@ 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) {
- return Math.multiplyExact(value, multiplier) / divisor;
+ try {
+ return Math.multiplyExact(value, multiplier) / divisor;
+ } catch (ArithmeticException e) {
+ // We do not have a better algorithm at this time.
+ return BigInteger.valueOf(value).multiply(BigInteger.valueOf(multiplier))
+ .divide(BigInteger.valueOf(divisor)).longValueExact();
+ }
}
/**
diff --git a/core/sis-utility/src/test/java/org/apache/sis/internal/util/NumericsTest.java b/core/sis-utility/src/test/java/org/apache/sis/internal/util/NumericsTest.java
index db3dedbec3..21f9ce7933 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/internal/util/NumericsTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/internal/util/NumericsTest.java
@@ -17,6 +17,7 @@
package org.apache.sis.internal.util;
import java.util.Random;
+import java.math.BigInteger;
import org.apache.sis.math.MathFunctions;
import org.apache.sis.test.TestUtilities;
import org.apache.sis.test.TestCase;
@@ -34,7 +35,7 @@ import static org.junit.Assert.*;
* Tests the {@link Numerics} class.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
* @since 0.3
* @module
*/
@@ -84,6 +85,38 @@ public final strictfp class NumericsTest extends TestCase {
assertEquals(-2L, ceilDiv( -8L, 3L));
}
+ /**
+ * Tests {@link Numerics#multiplyDivide(long, long, long)}.
+ * This method uses {@link BigInteger} as a reference.
+ */
+ @Test
+ public void testMultiplyDivide() {
+ final Random random = TestUtilities.createRandomNumberGenerator();
+ for (int i=0; i<10; i++) {
+ final long value = random.nextLong();
+ final long multiplier = random.nextLong();
+ final long divisor = random.nextLong(); // Accepted also 0.
+ final long expected;
+ try {
+ // ArithmeticException may occur because of overflow or division by 0.
+ expected = BigInteger.valueOf(value).multiply(BigInteger.valueOf(multiplier))
+ .divide(BigInteger.valueOf(divisor)).longValueExact();
+ } catch (ArithmeticException e) {
+ // If BigInteger fails, then `multiplyDivide(…)` shall also fail.
+ try {
+ Numerics.multiplyDivide(value, multiplier, divisor);
+ fail("Expected " + e);
+ } catch (ArithmeticException ex) {
+ // Expected exception.
+ continue;
+ }
+ throw e;
+ }
+ final long actual = Numerics.multiplyDivide(value, multiplier, divisor);
+ assertEquals(expected, actual);
+ }
+ }
+
/**
* Tests {@link Numerics#saturatingAdd(long, int)}.
*/
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/ZIP.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/ZIP.java
index a66e4080f7..4275c8ebd2 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/ZIP.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/ZIP.java
@@ -30,7 +30,7 @@ import org.apache.sis.internal.storage.io.ChannelDataInput;
*
* @author Rémi Marechal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
* @since 1.1
* @module
*/
@@ -83,13 +83,13 @@ final class ZIP extends CompressionChannel {
int required = 0;
try {
int n;
- while ((n = inflate(target)) == 0) {
+ while ((n = inflater.inflate(target)) == 0) {
if (inflater.needsInput()) {
if (++required >= input.buffer.capacity()) {
throw new BufferOverflowException();
}
input.ensureBufferContains(required);
- setInput(input.buffer);
+ inflater.setInput(input.buffer);
} else if (inflater.finished()) {
return -1;
} else {
@@ -102,31 +102,6 @@ final class ZIP extends CompressionChannel {
return target.position() - start;
}
- /**
- * Placeholder for {@code Inflater.inflate(ByteBuffer)}.
- *
- * @todo Remove after migration to JDK11.
- */
- private int inflate(final ByteBuffer target) throws DataFormatException {
-// return inflater.inflate(target); // JDK11
- final int p = target.position();
- final int n = inflater.inflate(target.array(), p, target.remaining());
- target.position(p + n);
- return n;
- }
-
- /**
- * Placeholder for {@code Inflater.setInput(ByteBuffer)}.
- *
- * @todo Remove after migration to JDK11.
- */
- private void setInput(final ByteBuffer target) throws DataFormatException {
-// inflater.setInput(target); // JDK11
- final byte[] b = new byte[target.remaining()];
- target.get(b);
- inflater.setInput(b);
- }
-
/**
* Releases resources used by the inflater.
*/
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/package-info.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/package-info.java
index 2f90f2c480..78c31299c4 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/package-info.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/package-info.java
@@ -42,7 +42,7 @@
* </dl>
*
* @author Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
* @since 1.1
* @module
*/
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java
index 6588e2ea90..ad42518dd5 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java
@@ -115,7 +115,7 @@ public abstract class AbstractProvider extends DocumentedStoreProvider {
}
// Quick check for "<?xml " header.
for (int i=0; i<HEADER.length; i++) {
- if (buffer.get() != HEADER[i]) { // TODO: use ByteBuffer.mismatch(…) with JDK11.
+ if (buffer.get() != HEADER[i]) {
return ProbeResult.UNSUPPORTED_STORAGE;
}
}
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
index b05db5c0f3..56c6be896a 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
@@ -100,7 +100,7 @@ abstract class AggregatedFeatureSet extends AbstractFeatureSet {
}
} else {
final Optional<Envelope> e = fs.getEnvelope();
- if (!e.isPresent()) return false; // TODO: use isEmpty() with JDK11.
+ if (e.isEmpty()) return false;
addTo.add(e.get());
}
}
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/GroupBySample.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/GroupBySample.java
index 1f5f859905..dc7d4bda5a 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/GroupBySample.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/GroupBySample.java
@@ -47,7 +47,7 @@ final class GroupBySample extends Group<GroupByCRS<GroupByTransform>> {
* @param ranges the sample dimensions of this group.
*/
private GroupBySample(final List<SampleDimension> ranges) {
- this.ranges = ranges; // TODO: use List.copyOf(…) with JDK10.
+ this.ranges = List.copyOf(ranges);
}
/**