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));
     }