提交 8b4c742c 编写于 作者: A art

6656586: Cursor.predefined is protected static mutable (findbugs)

Reviewed-by: hawtin, igor
上级 9119e3ec
...@@ -118,8 +118,18 @@ public class Cursor implements java.io.Serializable { ...@@ -118,8 +118,18 @@ public class Cursor implements java.io.Serializable {
*/ */
public static final int MOVE_CURSOR = 13; public static final int MOVE_CURSOR = 13;
/**
* @deprecated As of JDK version 1.7, the {@link #getPredefinedCursor()}
* method should be used instead.
*/
@Deprecated
protected static Cursor predefined[] = new Cursor[14]; protected static Cursor predefined[] = new Cursor[14];
/**
* This field is a private replacement for 'predefined' array.
*/
private final static Cursor[] predefinedPrivate = new Cursor[14];
/* Localization names and default values */ /* Localization names and default values */
static final String[][] cursorProperties = { static final String[][] cursorProperties = {
{ "AWT.DefaultCursor", "Default Cursor" }, { "AWT.DefaultCursor", "Default Cursor" },
...@@ -253,10 +263,15 @@ public class Cursor implements java.io.Serializable { ...@@ -253,10 +263,15 @@ public class Cursor implements java.io.Serializable {
if (type < Cursor.DEFAULT_CURSOR || type > Cursor.MOVE_CURSOR) { if (type < Cursor.DEFAULT_CURSOR || type > Cursor.MOVE_CURSOR) {
throw new IllegalArgumentException("illegal cursor type"); throw new IllegalArgumentException("illegal cursor type");
} }
Cursor c = predefinedPrivate[type];
if (c == null) {
predefinedPrivate[type] = c = new Cursor(type);
}
// fill 'predefined' array for backwards compatibility.
if (predefined[type] == null) { if (predefined[type] == null) {
predefined[type] = new Cursor(type); predefined[type] = c;
} }
return predefined[type]; return c;
} }
/** /**
......
/*
* 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 6656586
* @summary Test that Cursor.predefined array is not used in
Cursor.getPredefinedCursor() method
* @author Artem Ananiev
* @run main PredefinedPrivate
*/
import java.awt.*;
public class PredefinedPrivate {
public static void main(String args[]) {
new MyCursor();
if (Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR) instanceof MyCursor) {
throw new RuntimeException("Test FAILED: getPredefinedCursor() returned modified cursor");
}
}
}
class MyCursor extends Cursor {
public MyCursor() {
super(DEFAULT_CURSOR);
Cursor.predefined[DEFAULT_CURSOR] = this;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册