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/02/03 15:36:02 UTC
[sis] 02/05: Remove workarounds that are no longer needed when building with JDK 17 (even if the compilation result still target Java 8). Add workaround for https://bugs.openjdk.java.net/browse/JDK-8166038
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 d30a19d7f49d95b9170228d1986ac8ca6a463c3c
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Wed Feb 2 15:43:12 2022 +0100
Remove workarounds that are no longer needed when building with JDK 17 (even if the compilation result still target Java 8).
Add workaround for https://bugs.openjdk.java.net/browse/JDK-8166038
---
.../apache/sis/coverage/grid/GridCoverage2D.java | 9 +++----
.../sis/internal/coverage/j2d/TilePlaceholder.java | 21 +++++++++-------
.../sis/coverage/grid/GridCoverage2DTest.java | 28 +++-------------------
.../sis/internal/storage/TiledGridCoverage.java | 3 +++
.../internal/storage/MemoryGridResourceTest.java | 8 ++-----
5 files changed, 26 insertions(+), 43 deletions(-)
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
index a30f75f..80e895b 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
@@ -632,11 +632,12 @@ public class GridCoverage2D extends GridCoverage {
* Workaround for https://bugs.openjdk.java.net/browse/JDK-8166038
* If BufferedImage can not be used, fallback on ReshapedImage
* at the cost of returning an image larger than necessary.
- *
- * See also GridCoverage2DTest.PENDING_JDK_FIX
+ * This workaround can be removed on JDK17.
*/
- if (result.getTileGridXOffset() == ix && result.getTileGridYOffset() == iy) {
- return result;
+ if (org.apache.sis.internal.coverage.j2d.TilePlaceholder.PENDING_JDK_FIX) {
+ if (result.getTileGridXOffset() == ix && result.getTileGridYOffset() == iy) {
+ return result;
+ }
}
}
}
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/TilePlaceholder.java b/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/TilePlaceholder.java
index d32cc1d..45d4411 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/TilePlaceholder.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/coverage/j2d/TilePlaceholder.java
@@ -46,10 +46,16 @@ import org.apache.sis.internal.system.ReferenceQueueConsumer;
*/
public class TilePlaceholder {
/**
- * Identifies workaround for a JDK bug: call to {@code Graphics2D.drawRenderedImage(…)}
- * fails if the image contains more than one tile (or a single tile not located at 0,0)
- * and the tiles are not instances of {@link WritableRaster} (i.e. are instances of the
- * read-only {@link Raster} parent class). The exception thrown is:
+ * Identifies workaround for two JDK bugs.
+ *
+ * <p><a href="https://bugs.openjdk.java.net/browse/JDK-8166038">JDK-8166038</a>:
+ * If {@link BufferedImage} can not be used, fallback on {@link ReshapedImage} at the cost of an image
+ * larger than necessary. In such case, the tests need to specify the sub-region of pixels to verify.</p>
+ *
+ * <p><a href="https://bugs.openjdk.java.net/browse/JDK-8275345">JDK-8275345</a>:
+ * call to {@code Graphics2D.drawRenderedImage(…)} fails if the image contains more than one tile
+ * (or a single tile not located at 0,0) and the tiles are not instances of {@link WritableRaster}
+ * (i.e. are instances of the read-only {@link Raster} parent class). The exception thrown is:
*
* {@preformat text
* Exception in thread "main" java.awt.image.RasterFormatException: (parentX + width) is outside raster
@@ -57,11 +63,10 @@ public class TilePlaceholder {
* at java.desktop/sun.java2d.SunGraphics2D.drawTranslatedRenderedImage(SunGraphics2D.java:2852)
* at java.desktop/sun.java2d.SunGraphics2D.drawRenderedImage(SunGraphics2D.java:2711)
* }
- *
- * @see <a href="https://bugs.openjdk.java.net/browse/JDK-8275345">JDK-8275345</a>
+ * </p>
*/
@Workaround(library="JDK", version="17")
- private static final boolean PENDING_JDK_FIX = false;
+ public static final boolean PENDING_JDK_FIX = true;
/**
* Cache of empty tiles for different sample models.
@@ -188,7 +193,7 @@ public class TilePlaceholder {
// Else prefer read-only tile (created below) if we do not need to draw anything.
}
}
- if (!PENDING_JDK_FIX) {
+ if (PENDING_JDK_FIX) {
return Raster.createWritableRaster(model, buffer, location);
}
// Reuse same `DataBuffer` with only a different location.
diff --git a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridCoverage2DTest.java b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridCoverage2DTest.java
index f2bf359..6a8be0a 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridCoverage2DTest.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/coverage/grid/GridCoverage2DTest.java
@@ -37,7 +37,6 @@ import org.apache.sis.measure.NumberRange;
import org.apache.sis.measure.Units;
import org.apache.sis.referencing.crs.HardCodedCRS;
import org.apache.sis.referencing.operation.transform.MathTransforms;
-import org.apache.sis.util.Workaround;
import org.apache.sis.test.TestCase;
import org.junit.Test;
@@ -51,23 +50,12 @@ import static org.apache.sis.test.FeatureAssert.*;
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
* @author Alexis Manin (Geomatys)
- * @version 1.1
+ * @version 1.2
* @since 1.1
* @module
*/
public strictfp class GridCoverage2DTest extends TestCase {
/**
- * Disables tests that are pending <a href="https://bugs.openjdk.java.net/browse/JDK-8166038">JDK-8166038</a> fix.
- * If {@link BufferedImage} can not be used, fallback on {@link ReshapedImage} at the cost of an image larger than
- * necessary. In such case, the tests need to specify the sub-region of pixels to verify.
- *
- * <p>If JDK-8166038 is fixed, remove the {@code if (result.getTileGridXOffset() == ix && ...)} test in
- * {@link GridCoverage2D#render(GridExtent)}.</p>
- */
- @Workaround(library="JDK", version="14", fixed="16")
- private static final boolean PENDING_JDK_FIX = false;
-
- /**
* Width and height of the grid tested in this class.
*/
protected static final int GRID_SIZE = 2;
@@ -244,13 +232,8 @@ public strictfp class GridCoverage2DTest extends TestCase {
*/
final GridExtent singleRow = new GridExtent(GRID_SIZE, 1).translate(0, 1);
result = coverage.render(singleRow);
- if (PENDING_JDK_FIX) {
assertInstanceOf("render", BufferedImage.class, result);
assertPixelsEqual(coverage.render(null), new Rectangle(0, 1, GRID_SIZE, 1), result, null);
- } else {
- assertPixelsEqual(coverage.render(null), new Rectangle(0, 1, GRID_SIZE, 1),
- result, new Rectangle(0, 0, GRID_SIZE, 1));
- }
/*
* Column extraction:
* - Expected size (1,2) is verified by `assertPixelsEqual(…)`.
@@ -260,13 +243,8 @@ public strictfp class GridCoverage2DTest extends TestCase {
*/
final GridExtent singleCol = new GridExtent(1, GRID_SIZE).translate(1, 0);
result = coverage.render(singleCol);
- if (PENDING_JDK_FIX) {
- assertInstanceOf("render", BufferedImage.class, result);
- assertPixelsEqual(coverage.render(null), new Rectangle(1, 0, 1, GRID_SIZE), result, null);
- } else {
- assertPixelsEqual(coverage.render(null), new Rectangle(1, 0, 1, GRID_SIZE),
- result, new Rectangle(0, 0, 1, GRID_SIZE));
- }
+ assertInstanceOf("render", BufferedImage.class, result);
+ assertPixelsEqual(coverage.render(null), new Rectangle(1, 0, 1, GRID_SIZE), result, null);
}
/**
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
index 05a4ed6..8dcd8dd 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
@@ -620,6 +620,9 @@ public abstract class TiledGridCoverage extends GridCoverage {
* a view created by `SampleModel.createSubsetSampleModel(int[] bands)`.
* Bands can also be in a different order and still share the same buffer.
*/
+ if (org.apache.sis.internal.coverage.j2d.TilePlaceholder.PENDING_JDK_FIX) {
+ return Raster.createWritableRaster(model, tile.getDataBuffer(), new Point(x, y));
+ }
return Raster.createRaster(model, tile.getDataBuffer(), new Point(x, y));
}
}
diff --git a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/MemoryGridResourceTest.java b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/MemoryGridResourceTest.java
index 13ad1fb..2a6ab36 100644
--- a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/MemoryGridResourceTest.java
+++ b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/MemoryGridResourceTest.java
@@ -36,7 +36,7 @@ import static org.apache.sis.test.Assert.*;
* Tests {@link MemoryGridResource}.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.2
* @since 1.1
* @module
*/
@@ -92,13 +92,9 @@ public final strictfp class MemoryGridResourceTest extends TestCase {
final GridGeometry request = createSubGrid();
final GridCoverage coverage = resource.read(request);
/*
- * PENDING_JDK_FIX: remove the following lines after we request JDK16 for building.
+ * Note: following lines work only with JDK 16 or above.
* https://bugs.openjdk.java.net/browse/JDK-8166038
*/
- if (resource.getGridGeometry().equals(coverage.getGridGeometry())) {
- return;
- }
- // End of PENDING_JDK_FIX. Following line assumes JDK16.
assertEqualsIgnoreMetadata(request, coverage.getGridGeometry());
assertInstanceOf("render(null)", BufferedImage.class, coverage.render(null));
}