6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
authoralexp
Tue, 01 Sep 2009 18:51:15 +0400
changeset 3748 b88af44d77a8
parent 3747 760e072cc617
child 3749 d0ecbd7075b1
6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set Reviewed-by: rupashka
jdk/src/share/classes/javax/swing/JLayer.java
jdk/src/share/classes/javax/swing/plaf/LayerUI.java
jdk/test/javax/swing/JLayer/6875153/bug6875153.java
--- a/jdk/src/share/classes/javax/swing/JLayer.java	Tue Sep 01 15:34:21 2009 +0400
+++ b/jdk/src/share/classes/javax/swing/JLayer.java	Tue Sep 01 18:51:15 2009 +0400
@@ -178,7 +178,7 @@
      * @return the {@code JLayer}'s view component
      *         or {@code null} if none exists
      *
-     * @see #setView(V)
+     * @see #setView(Component)
      */
     public V getView() {
         return view;
@@ -279,7 +279,7 @@
      * @throws UnsupportedOperationException this method is not supported
      *
      * @see #setView(Component)
-     * @see #setGlassPane(Component)
+     * @see #setGlassPane(JPanel)
      */
     protected void addImpl(Component comp, Object constraints, int index) {
         throw new UnsupportedOperationException(
@@ -339,7 +339,7 @@
      * @return false if {@code JLayer}'s {@code glassPane} is visible
      */
     public boolean isOptimizedDrawingEnabled() {
-        return !glassPane.isVisible();
+        return glassPane == null || !glassPane.isVisible();
     }
 
     /**
@@ -560,14 +560,20 @@
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void addNotify() {
+        super.addNotify();
         eventController.updateAWTEventListener(0, eventMask);
-        super.addNotify();
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void removeNotify() {
+        super.removeNotify();
         eventController.updateAWTEventListener(eventMask, 0);
-        super.removeNotify();
     }
 
     /**
--- a/jdk/src/share/classes/javax/swing/plaf/LayerUI.java	Tue Sep 01 15:34:21 2009 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/LayerUI.java	Tue Sep 01 18:51:15 2009 +0400
@@ -222,6 +222,7 @@
      * Returns an array of all the listeners which have been associated
      * with the named property.
      *
+     * @param propertyName  The name of the property being listened to
      * @return all of the {@code PropertyChangeListener}s associated with
      *         the named property; if no such listeners have been added or
      *         if {@code propertyName} is {@code null}, an empty
@@ -262,6 +263,7 @@
     /**
      * Returns the preferred size of the viewport for a view component.
      *
+     * @param l the {@code JLayer} component where this UI delegate is being installed
      * @return the preferred size of the viewport for a view component
      * @see Scrollable#getPreferredScrollableViewportSize()
      */
@@ -277,6 +279,10 @@
      * that display logical rows or columns in order to completely expose
      * one block of rows or columns, depending on the value of orientation.
      *
+     * @param l the {@code JLayer} component where this UI delegate is being installed
+     * @param visibleRect The view area visible within the viewport
+     * @param orientation Either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL.
+     * @param direction Less than zero to scroll up/left, greater than zero for down/right.
      * @return the "block" increment for scrolling in the specified direction
      * @see Scrollable#getScrollableBlockIncrement(Rectangle, int, int)
      */
@@ -296,6 +302,7 @@
      * determine the height of the layer, unless the preferred height
      * of the layer is smaller than the height of the viewport.
      *
+     * @param l the {@code JLayer} component where this UI delegate is being installed
      * @return whether the layer should track the height of the viewport
      * @see Scrollable#getScrollableTracksViewportHeight()
      */
@@ -311,6 +318,7 @@
      * determine the width of the layer, unless the preferred width
      * of the layer is smaller than the width of the viewport.
      *
+     * @param l the {@code JLayer} component where this UI delegate is being installed
      * @return whether the layer should track the width of the viewport
      * @see Scrollable
      * @see LayerUI#getScrollableTracksViewportWidth(JLayer)
@@ -332,6 +340,10 @@
      * Scrolling containers, like JScrollPane, will use this method
      * each time the user requests a unit scroll.
      *
+     * @param l the {@code JLayer} component where this UI delegate is being installed
+     * @param visibleRect The view area visible within the viewport
+     * @param orientation Either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL.
+     * @param direction Less than zero to scroll up/left, greater than zero for down/right.
      * @return The "unit" increment for scrolling in the specified direction.
      *         This value should always be positive.
      * @see Scrollable#getScrollableUnitIncrement(Rectangle, int, int)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JLayer/6875153/bug6875153.java	Tue Sep 01 18:51:15 2009 +0400
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6875153
+ * @summary JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
+ * @author Alexander Potochkin
+ */
+
+import javax.swing.*;
+
+public class bug6875153 {
+
+    private static void createGui() {
+        JLayer layer = new JLayer();
+        layer.setGlassPane(null);
+        layer.isOptimizedDrawingEnabled();
+    }
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                bug6875153.createGui();
+            }
+        });
+    }
+}