diff --git a/jdk/make/data/swingbeaninfo/SwingBeanInfo.template b/jdk/make/data/swingbeaninfo/SwingBeanInfo.template index 9c1a133f67f..e0c83c0e2cf 100644 --- a/jdk/make/data/swingbeaninfo/SwingBeanInfo.template +++ b/jdk/make/data/swingbeaninfo/SwingBeanInfo.template @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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 @@ -92,25 +92,38 @@ public class @(BeanClassName)BeanInfo extends javax.swing.SwingBeanInfoBase { /** * @return an icon of the specified kind for @(BeanClassName) */ - public Image getIcon(int kind) { + public Image getIcon(final int kind) { Image i; switch (kind){ case ICON_COLOR_32x32: - i = loadImage("beaninfo/images/@(BeanClassName)Color32.gif"); - return ((i == null) ? loadImage("beaninfo/images/JComponentColor32.gif") : i); + i = loadStandardImage("beaninfo/images/@(BeanClassName)Color32.gif"); + return ((i == null) ? loadStandardImage("beaninfo/images/JComponentColor32.gif") : i); case ICON_COLOR_16x16: - i = loadImage("beaninfo/images/@(BeanClassName)Color16.gif"); - return ((i == null) ? loadImage("beaninfo/images/JComponentColor16.gif") : i); + i = loadStandardImage("beaninfo/images/@(BeanClassName)Color16.gif"); + return ((i == null) ? loadStandardImage("beaninfo/images/JComponentColor16.gif") : i); case ICON_MONO_32x32: - i = loadImage("beaninfo/images/@(BeanClassName)Mono32.gif"); - return ((i == null) ? loadImage("beaninfo/images/JComponentMono32.gif") : i); + i = loadStandardImage("beaninfo/images/@(BeanClassName)Mono32.gif"); + return ((i == null) ? loadStandardImage("beaninfo/images/JComponentMono32.gif") : i); case ICON_MONO_16x16: - i = loadImage("beaninfo/images/@(BeanClassName)Mono16.gif"); - return ((i == null) ? loadImage("beaninfo/images/JComponentMono16.gif") : i); + i = loadStandardImage("beaninfo/images/@(BeanClassName)Mono16.gif"); + return ((i == null) ? loadStandardImage("beaninfo/images/JComponentMono16.gif") : i); default: return super.getIcon(kind); } } + + /** + * This is a utility method to help in loading standard icon images. + * + * @param resourceName A pathname relative to the directory holding the + * class file of the current class + * @return an image object. May be null if the load failed. + * @see java.beans.SimpleBeanInfo#loadImage(String) + */ + private Image loadStandardImage(final String resourceName) { + return java.security.AccessController.doPrivileged( + (java.security.PrivilegedAction) () -> loadImage(resourceName)); + } } diff --git a/jdk/src/java.desktop/share/classes/java/beans/Beans.java b/jdk/src/java.desktop/share/classes/java/beans/Beans.java index cd864899ea6..81fe09a71dd 100644 --- a/jdk/src/java.desktop/share/classes/java/beans/Beans.java +++ b/jdk/src/java.desktop/share/classes/java/beans/Beans.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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 @@ -46,9 +46,6 @@ import java.lang.reflect.Modifier; import java.net.URL; -import java.security.AccessController; -import java.security.PrivilegedAction; - import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; @@ -183,16 +180,10 @@ public class Beans { // Try to find a serialized object with this name final String serName = beanName.replace('.','/').concat(".ser"); - final ClassLoader loader = cls; - ins = AccessController.doPrivileged - (new PrivilegedAction() { - public InputStream run() { - if (loader == null) - return ClassLoader.getSystemResourceAsStream(serName); - else - return loader.getResourceAsStream(serName); - } - }); + if (cls == null) + ins = ClassLoader.getSystemResourceAsStream(serName); + else + ins = cls.getResourceAsStream(serName); if (ins != null) { try { if (cls == null) { @@ -283,19 +274,10 @@ public class Beans { URL docBase = null; // Now get the URL correponding to the resource name. - - final ClassLoader cloader = cls; - objectUrl = - AccessController.doPrivileged - (new PrivilegedAction() { - public URL run() { - if (cloader == null) - return ClassLoader.getSystemResource - (resourceName); - else - return cloader.getResource(resourceName); - } - }); + if (cls == null) { + objectUrl = ClassLoader.getSystemResource(resourceName); + } else + objectUrl = cls.getResource(resourceName); // If we found a URL, we try to locate the docbase by taking // of the final path name component, and the code base by taking diff --git a/jdk/src/java.desktop/share/classes/java/beans/SimpleBeanInfo.java b/jdk/src/java.desktop/share/classes/java/beans/SimpleBeanInfo.java index 7b97e414ebb..45d5b44ba58 100644 --- a/jdk/src/java.desktop/share/classes/java/beans/SimpleBeanInfo.java +++ b/jdk/src/java.desktop/share/classes/java/beans/SimpleBeanInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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 @@ -25,6 +25,11 @@ package java.beans; +import java.awt.Image; +import java.awt.Toolkit; +import java.awt.image.ImageProducer; +import java.net.URL; + /** * This is a support class to make it easier for people to provide * BeanInfo classes. @@ -101,7 +106,7 @@ public class SimpleBeanInfo implements BeanInfo { * Claim there are no icons available. You can override * this if you want to provide icons for your bean. */ - public java.awt.Image getIcon(int iconKind) { + public Image getIcon(int iconKind) { return null; } @@ -116,33 +121,17 @@ public class SimpleBeanInfo implements BeanInfo { * "wombat.gif". * @return an image object. May be null if the load failed. */ - public java.awt.Image loadImage(final String resourceName) { + public Image loadImage(final String resourceName) { try { - final Class c = getClass(); - java.awt.image.ImageProducer ip = (java.awt.image.ImageProducer) - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Object run() { - java.net.URL url; - if ((url = c.getResource(resourceName)) == null) { - return null; - } else { - try { - return url.getContent(); - } catch (java.io.IOException ioe) { - return null; - } - } - } - }); - - if (ip == null) - return null; - java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit(); - return tk.createImage(ip); - } catch (Exception ex) { - return null; + final URL url = getClass().getResource(resourceName); + if (url != null) { + final ImageProducer ip = (ImageProducer) url.getContent(); + if (ip != null) { + return Toolkit.getDefaultToolkit().createImage(ip); + } + } + } catch (final Exception ignored) { } + return null; } - } diff --git a/jdk/test/java/beans/SimpleBeanInfo/LoadingStandardIcons/LoadingStandardIcons.java b/jdk/test/java/beans/SimpleBeanInfo/LoadingStandardIcons/LoadingStandardIcons.java new file mode 100644 index 00000000000..9b96bd2f668 --- /dev/null +++ b/jdk/test/java/beans/SimpleBeanInfo/LoadingStandardIcons/LoadingStandardIcons.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Image; +import java.beans.BeanInfo; +import java.beans.IntrospectionException; +import java.beans.Introspector; + +import javax.swing.JButton; + +/** + * @test + * @bug 4141523 + * @run main/othervm/policy=java.policy -Djava.security.manager LoadingStandardIcons + */ +public final class LoadingStandardIcons { + + public static void main(final String[] args) { + final Object bi; + try { + bi = Introspector.getBeanInfo(JButton.class); + } catch (IntrospectionException e) { + throw new RuntimeException(e); + } + final Image m16 = ((BeanInfo) bi).getIcon(BeanInfo.ICON_MONO_16x16); + final Image m32 = ((BeanInfo) bi).getIcon(BeanInfo.ICON_MONO_32x32); + final Image c16 = ((BeanInfo) bi).getIcon(BeanInfo.ICON_COLOR_16x16); + final Image c32 = ((BeanInfo) bi).getIcon(BeanInfo.ICON_COLOR_32x32); + if (m16 == null || m32 == null || c16 == null || c32 == null) { + throw new RuntimeException("Image should not be null"); + } + } +} diff --git a/jdk/test/java/beans/SimpleBeanInfo/LoadingStandardIcons/java.policy b/jdk/test/java/beans/SimpleBeanInfo/LoadingStandardIcons/java.policy new file mode 100644 index 00000000000..1c8a0e79762 --- /dev/null +++ b/jdk/test/java/beans/SimpleBeanInfo/LoadingStandardIcons/java.policy @@ -0,0 +1 @@ +; \ No newline at end of file