Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8366746

MultiResolutionCachedImage.getProperty doesn't throw NPE for null property name

XMLWordPrintable

    • generic
    • generic

      A DESCRIPTION OF THE PROBLEM :
      sun.awt.image.MultiResolutionCachedImage.getProperty(name: null, observer: null) doesn't throw NPE.
      But documentation indicates that NPE should be thrown if the property name is null.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      java --add-exports java.desktop/sun.awt.image=ALL-UNNAMED MultiResolutionCachedImageTest

      ACTUAL VS EXPECTED BEHAVIOR :
      ACTUAL -
      Custom RuntimeException "Expected NullPointerException for null property name" is thrown
      EXPECTED -
      NPE thrown by Java

      ---------- BEGIN SOURCE ----------
      import java.awt.Color;
      import java.awt.Dimension;
      import java.awt.Graphics;
      import java.awt.Image;
      import java.awt.geom.Dimension2D;
      import java.awt.image.BufferedImage;
      import sun.awt.image.MultiResolutionCachedImage;
      public class MultiResolutionCachedImageTest {

          private static final Color TEST_COLOR = Color.BLUE;

          public static void main(String[] args) {

              Image image = new TestMultiResolutionCachedImage(100);
              try {
                  image.getProperty(null, null);
                  throw new RuntimeException("Expected NullPointerException for null property name");
              } catch (NullPointerException e) {
                  // Expected behavior
              }
          }

          private static Dimension2D getDimension(int size) {
              return new Dimension(size, size);
          }

          private static Dimension2D[] getSizes(int size) {
              return new Dimension2D[]{getDimension(size), getDimension(2 * size)};
          }

          private static Image createImage(int width, int height) {
              BufferedImage buffImage = new BufferedImage(width, height,
                      BufferedImage.TYPE_INT_RGB);
              Graphics g = buffImage.createGraphics();
              g.setColor(TEST_COLOR);
              g.fillRect(0, 0, width, height);
              return buffImage;
          }

          private static class TestMultiResolutionCachedImage
                  extends MultiResolutionCachedImage {

              private final int size;

              public TestMultiResolutionCachedImage(int size) {
                  super(size, size, getSizes(size), (w, h) -> createImage(w, h));
                  this.size = size;
              }

              @Override
              public Image getResolutionVariant(double width, double height) {
                  if (width == size || height == size) {
                      throw new RuntimeException("Base image is requested!");
                  }
                  return super.getResolutionVariant(width, height);
              }

              @Override
              protected Image getBaseImage() {
                  throw new RuntimeException("Base image is used");
              }
          }
      }
      ---------- END SOURCE ----------

            dnguyen Damon Nguyen
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: