Reviewer needed: backport of "S6669869: Beans.isDesignTime() and other queries should be per-AppContext" into IcedTea6 HEAD
Dr Andrew John Hughes
ahughes at redhat.com
Wed Jul 27 11:12:23 PDT 2011
On 15:16 Wed 27 Jul , Pavel Tisnovsky wrote:
> Greetings,
>
> is it possible to push the backport of fix "S6669869:
> Beans.isDesignTime() and other queries should be per-AppContext"
> into IcedTea6 HEAD please?
>
> The behaviour of this fix was checked on RHELs.
>
> Please note, that the fix seems to be long and difficult, but in fact
> the changes are quite simple (four lines of code contains the fix, other
> changes are just caused by not using full class names with theirs packages).
>
Ugh, I wish they wouldn't create such noisy changesets.
>
> Here's ChangeLog entry:
>
> 2011-07-27 Pavel Tisnovsky <ptisnovs at redhat.com>
>
> * Makefile.am: added new patch
> * NEWS: updated with backport
> *
> patches/openjdk/6669869-Beans_isDesignTime_should_be_per-AppContext.patch:
> Backport of 6669869.
>
>
> Can anybody please review this change?
>
I'm not sure about this. Won't it change the runtime behaviour of these methods?
> Thank you in advance,
> Pavel
>
>
> diff -r a6ba1170da98 Makefile.am
> --- a/Makefile.am Mon Jul 25 13:44:57 2011 +0200
> +++ b/Makefile.am Wed Jul 27 14:53:06 2011 +0200
> @@ -369,7 +369,8 @@
> patches/openjdk/4917091-javac_rejects_array_over_128_in_length.patch \
> patches/openjdk/6390045-error_cannot_access_java_lang_void.patch \
> patches/openjdk/6752638-preferLocaleFonts_throws_NPE.patch \
> - patches/openjdk/5047314-Collator_compare_runs_indefinitely.patch
> + patches/openjdk/5047314-Collator_compare_runs_indefinitely.patch \
> + patches/openjdk/6669869-Beans_isDesignTime_should_be_per-AppContext.patch
>
> if WITH_RHINO
> ICEDTEA_PATCHES += \
> diff -r a6ba1170da98 NEWS
> --- a/NEWS Mon Jul 25 13:44:57 2011 +0200
> +++ b/NEWS Wed Jul 27 14:53:06 2011 +0200
> @@ -362,6 +362,7 @@
> - S6390045: Unexpected error "cannot access java.lang.Void" with '-target cldc1.0' with -source >=1.5
> - S6752638: java.awt.GraphicsEnvironment.preferLocaleFonts() throws NPE on Linux
> - S5047314: [Col] Collator.compare() runs indefinitely for a certain set of Thai strings
> + - S6669869: Beans.isDesignTime() and other queries should be per-AppContext
> * Allow selection of test suites using the jtreg_checks argument e.g. jtreg_checks="langtools"
> * CACAO
> - Threadlist & threadobject improvements.
> diff -r a6ba1170da98 patches/openjdk/6669869-Beans_isDesignTime_should_be_per-AppContext.patch
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/patches/openjdk/6669869-Beans_isDesignTime_should_be_per-AppContext.patch Wed Jul 27 14:53:06 2011 +0200
> @@ -0,0 +1,346 @@
> +# HG changeset patch
> +# User malenkov
> +# Date 1233842457 -10800
> +# Node ID 27dabbdfdcacc855219955f4eb610856b13d4543
> +# Parent 62a84e564a8c9686b19b9bc09d76f8c9c41ab264
> +6669869: Beans.isDesignTime() and other queries should be per-AppContext
> +Reviewed-by: peterz, rupashka
> +
> +diff -r 62a84e564a8c -r 27dabbdfdcac src/share/classes/java/beans/Beans.java
> +--- openjdk.orig/jdk/src/share/classes/java/beans/Beans.java Thu Feb 05 14:48:10 2009 +0300
> ++++ openjdk/jdk/src/share/classes/java/beans/Beans.java Thu Feb 05 17:00:57 2009 +0300
> +@@ -27,26 +27,41 @@
> +
> + import com.sun.beans.finder.ClassFinder;
> +
> +-import java.applet.*;
> ++import java.applet.Applet;
> ++import java.applet.AppletContext;
> ++import java.applet.AppletStub;
> ++import java.applet.AudioClip;
> +
> +-import java.awt.*;
> +-
> +-import java.beans.AppletInitializer;
> ++import java.awt.GraphicsEnvironment;
> ++import java.awt.Image;
> +
> + import java.beans.beancontext.BeanContext;
> +
> +-import java.io.*;
> +-
> +-import java.lang.reflect.Constructor;
> ++import java.io.IOException;
> ++import java.io.InputStream;
> ++import java.io.ObjectInputStream;
> ++import java.io.ObjectStreamClass;
> ++import java.io.StreamCorruptedException;
> +
> + import java.net.URL;
> +-import java.lang.reflect.Array;
> ++
> ++import java.security.AccessController;
> ++import java.security.PrivilegedAction;
> ++
> ++import java.util.Enumeration;
> ++import java.util.Hashtable;
> ++import java.util.Iterator;
> ++import java.util.Vector;
> ++
> ++import sun.awt.AppContext;
> +
> + /**
> + * This class provides some general purpose beans control methods.
> + */
> +
> + public class Beans {
> ++ private static final Object DESIGN_TIME = new Object();
> ++ private static final Object GUI_AVAILABLE = new Object();
> +
> + /**
> + * <p>
> +@@ -59,12 +74,12 @@
> + * @param beanName the name of the bean within the class-loader.
> + * For example "sun.beanbox.foobah"
> + *
> +- * @exception java.lang.ClassNotFoundException if the class of a serialized
> ++ * @exception ClassNotFoundException if the class of a serialized
> + * object could not be found.
> +- * @exception java.io.IOException if an I/O error occurs.
> ++ * @exception IOException if an I/O error occurs.
> + */
> +
> +- public static Object instantiate(ClassLoader cls, String beanName) throws java.io.IOException, ClassNotFoundException {
> ++ public static Object instantiate(ClassLoader cls, String beanName) throws IOException, ClassNotFoundException {
> + return Beans.instantiate(cls, beanName, null, null);
> + }
> +
> +@@ -80,12 +95,12 @@
> + * For example "sun.beanbox.foobah"
> + * @param beanContext The BeanContext in which to nest the new bean
> + *
> +- * @exception java.lang.ClassNotFoundException if the class of a serialized
> ++ * @exception ClassNotFoundException if the class of a serialized
> + * object could not be found.
> +- * @exception java.io.IOException if an I/O error occurs.
> ++ * @exception IOException if an I/O error occurs.
> + */
> +
> +- public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws java.io.IOException, ClassNotFoundException {
> ++ public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws IOException, ClassNotFoundException {
> + return Beans.instantiate(cls, beanName, beanContext, null);
> + }
> +
> +@@ -135,19 +150,19 @@
> + * @param beanContext The BeanContext in which to nest the new bean
> + * @param initializer The AppletInitializer for the new bean
> + *
> +- * @exception java.lang.ClassNotFoundException if the class of a serialized
> ++ * @exception ClassNotFoundException if the class of a serialized
> + * object could not be found.
> +- * @exception java.io.IOException if an I/O error occurs.
> ++ * @exception IOException if an I/O error occurs.
> + */
> +
> + public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext, AppletInitializer initializer)
> +- throws java.io.IOException, ClassNotFoundException {
> ++ throws IOException, ClassNotFoundException {
> +
> +- java.io.InputStream ins;
> +- java.io.ObjectInputStream oins = null;
> ++ InputStream ins;
> ++ ObjectInputStream oins = null;
> + Object result = null;
> + boolean serialized = false;
> +- java.io.IOException serex = null;
> ++ IOException serex = null;
> +
> + // If the given classloader is null, we check if an
> + // system classloader is available and (if so)
> +@@ -166,8 +181,8 @@
> + // Try to find a serialized object with this name
> + final String serName = beanName.replace('.','/').concat(".ser");
> + final ClassLoader loader = cls;
> +- ins = (InputStream)java.security.AccessController.doPrivileged
> +- (new java.security.PrivilegedAction() {
> ++ ins = (InputStream)AccessController.doPrivileged
> ++ (new PrivilegedAction() {
> + public Object run() {
> + if (loader == null)
> + return ClassLoader.getSystemResourceAsStream(serName);
> +@@ -185,7 +200,7 @@
> + result = oins.readObject();
> + serialized = true;
> + oins.close();
> +- } catch (java.io.IOException ex) {
> ++ } catch (IOException ex) {
> + ins.close();
> + // Drop through and try opening the class. But remember
> + // the exception in case we can't find the class either.
> +@@ -264,8 +279,8 @@
> +
> + final ClassLoader cloader = cls;
> + objectUrl = (URL)
> +- java.security.AccessController.doPrivileged
> +- (new java.security.PrivilegedAction() {
> ++ AccessController.doPrivileged
> ++ (new PrivilegedAction() {
> + public Object run() {
> + if (cloader == null)
> + return ClassLoader.getSystemResource
> +@@ -377,10 +392,11 @@
> + * @return True if we are running in an application construction
> + * environment.
> + *
> +- * @see java.beans.DesignMode
> ++ * @see DesignMode
> + */
> + public static boolean isDesignTime() {
> +- return designTime;
> ++ Object value = AppContext.getAppContext().get(DESIGN_TIME);
> ++ return (value instanceof Boolean) && (Boolean) value;
> + }
> +
> + /**
> +@@ -393,11 +409,12 @@
> + * false in a server environment or if an application is
> + * running as part of a batch job.
> + *
> +- * @see java.beans.Visibility
> ++ * @see Visibility
> + *
> + */
> + public static boolean isGuiAvailable() {
> +- return guiAvailable;
> ++ Object value = AppContext.getAppContext().get(GUI_AVAILABLE);
> ++ return (value instanceof Boolean) ? (Boolean) value : !GraphicsEnvironment.isHeadless();
> + }
> +
> + /**
> +@@ -423,7 +440,7 @@
> + if (sm != null) {
> + sm.checkPropertiesAccess();
> + }
> +- designTime = isDesignTime;
> ++ AppContext.getAppContext().put(DESIGN_TIME, Boolean.valueOf(isDesignTime));
> + }
> +
> + /**
> +@@ -449,14 +466,7 @@
> + if (sm != null) {
> + sm.checkPropertiesAccess();
> + }
> +- guiAvailable = isGuiAvailable;
> +- }
> +-
> +-
> +- private static boolean designTime;
> +- private static boolean guiAvailable;
> +- static {
> +- guiAvailable = !GraphicsEnvironment.isHeadless();
> ++ AppContext.getAppContext().put(GUI_AVAILABLE, Boolean.valueOf(isGuiAvailable));
> + }
> + }
> +
> +@@ -501,7 +511,7 @@
> +
> + class BeansAppletContext implements AppletContext {
> + Applet target;
> +- java.util.Hashtable imageCache = new java.util.Hashtable();
> ++ Hashtable imageCache = new Hashtable();
> +
> + BeansAppletContext(Applet target) {
> + this.target = target;
> +@@ -546,8 +556,8 @@
> + return null;
> + }
> +
> +- public java.util.Enumeration getApplets() {
> +- java.util.Vector applets = new java.util.Vector();
> ++ public Enumeration getApplets() {
> ++ Vector applets = new Vector();
> + applets.addElement(target);
> + return applets.elements();
> + }
> +@@ -573,7 +583,7 @@
> + return null;
> + }
> +
> +- public java.util.Iterator getStreamKeys(){
> ++ public Iterator getStreamKeys(){
> + // We do nothing.
> + return null;
> + }
> +diff -r 62a84e564a8c -r 27dabbdfdcac test/java/beans/Beans/6669869/TestDesignTime.java
> +--- /dev/null Thu Jan 01 00:00:00 1970 +0000
> ++++ openjdk/jdk/test/java/beans/Beans/6669869/TestDesignTime.java Thu Feb 05 17:00:57 2009 +0300
> +@@ -0,0 +1,52 @@
> ++/*
> ++ * 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 6669869
> ++ * @summary Tests DesignTime property in different application contexts
> ++ * @author Sergey Malenkov
> ++ */
> ++
> ++import java.beans.Beans;
> ++import sun.awt.SunToolkit;
> ++
> ++public class TestDesignTime implements Runnable {
> ++ public static void main(String[] args) throws InterruptedException {
> ++ if (Beans.isDesignTime()) {
> ++ throw new Error("unexpected DesignTime property");
> ++ }
> ++ Beans.setDesignTime(!Beans.isDesignTime());
> ++ ThreadGroup group = new ThreadGroup("$$$");
> ++ Thread thread = new Thread(group, new TestDesignTime());
> ++ thread.start();
> ++ thread.join();
> ++ }
> ++
> ++ public void run() {
> ++ SunToolkit.createNewAppContext();
> ++ if (Beans.isDesignTime()) {
> ++ throw new Error("shared DesignTime property");
> ++ }
> ++ }
> ++}
> +diff -r 62a84e564a8c -r 27dabbdfdcac test/java/beans/Beans/6669869/TestGuiAvailable.java
> +--- /dev/null Thu Jan 01 00:00:00 1970 +0000
> ++++ openjdk/jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java Thu Feb 05 17:00:57 2009 +0300
> +@@ -0,0 +1,53 @@
> ++/*
> ++ * 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 6669869
> ++ * @summary Tests GuiAvailable property in different application contexts
> ++ * @author Sergey Malenkov
> ++ */
> ++
> ++import java.awt.GraphicsEnvironment;
> ++import java.beans.Beans;
> ++import sun.awt.SunToolkit;
> ++
> ++public class TestGuiAvailable implements Runnable {
> ++ public static void main(String[] args) throws InterruptedException {
> ++ if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
> ++ throw new Error("unexpected GuiAvailable property");
> ++ }
> ++ Beans.setGuiAvailable(!Beans.isGuiAvailable());
> ++ ThreadGroup group = new ThreadGroup("$$$");
> ++ Thread thread = new Thread(group, new TestGuiAvailable());
> ++ thread.start();
> ++ thread.join();
> ++ }
> ++
> ++ public void run() {
> ++ SunToolkit.createNewAppContext();
> ++ if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
> ++ throw new Error("shared GuiAvailable property");
> ++ }
> ++ }
> ++}
--
Andrew :)
Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)
Support Free Java!
Contribute to GNU Classpath and IcedTea
http://www.gnu.org/software/classpath
http://icedtea.classpath.org
PGP Key: F5862A37 (https://keys.indymedia.org/)
Fingerprint = EA30 D855 D50F 90CD F54D 0698 0713 C3ED F586 2A37
More information about the distro-pkg-dev
mailing list