6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
Reviewed-by: rupashka
--- 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();
+ }
+ });
+ }
+}