From 3ef90fd6fdfbe19204902c8ec8fe898b0f053290 Mon Sep 17 00:00:00 2001 From: Alexander Potochkin Date: Tue, 1 Sep 2009 18:51:15 +0400 Subject: [PATCH] 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set Reviewed-by: rupashka --- jdk/src/share/classes/javax/swing/JLayer.java | 16 +++++-- .../classes/javax/swing/plaf/LayerUI.java | 12 +++++ .../swing/JLayer/6875153/bug6875153.java | 47 +++++++++++++++++++ 3 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 jdk/test/javax/swing/JLayer/6875153/bug6875153.java diff --git a/jdk/src/share/classes/javax/swing/JLayer.java b/jdk/src/share/classes/javax/swing/JLayer.java index 3ef1fa0f4a2..1ce679bc02d 100644 --- a/jdk/src/share/classes/javax/swing/JLayer.java +++ b/jdk/src/share/classes/javax/swing/JLayer.java @@ -178,7 +178,7 @@ public final class JLayer * @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 @@ public final class JLayer * @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 @@ public final class JLayer * @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 @@ public final class JLayer } } + /** + * {@inheritDoc} + */ public void addNotify() { - eventController.updateAWTEventListener(0, eventMask); super.addNotify(); + eventController.updateAWTEventListener(0, eventMask); } + /** + * {@inheritDoc} + */ public void removeNotify() { - eventController.updateAWTEventListener(eventMask, 0); super.removeNotify(); + eventController.updateAWTEventListener(eventMask, 0); } /** diff --git a/jdk/src/share/classes/javax/swing/plaf/LayerUI.java b/jdk/src/share/classes/javax/swing/plaf/LayerUI.java index 4e56c1b91c8..cf64687421a 100644 --- a/jdk/src/share/classes/javax/swing/plaf/LayerUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/LayerUI.java @@ -222,6 +222,7 @@ public class LayerUI * 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 @@ public class LayerUI /** * 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 @@ public class LayerUI * 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 @@ public class LayerUI * 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 @@ public class LayerUI * 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 @@ public class LayerUI * 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) diff --git a/jdk/test/javax/swing/JLayer/6875153/bug6875153.java b/jdk/test/javax/swing/JLayer/6875153/bug6875153.java new file mode 100644 index 00000000000..8e416acc339 --- /dev/null +++ b/jdk/test/javax/swing/JLayer/6875153/bug6875153.java @@ -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(); + } + }); + } +}