--- a/jdk/src/share/classes/com/sun/awt/AWTUtilities.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/com/sun/awt/AWTUtilities.java Tue Jul 21 23:23:57 2009 -0700
@@ -374,7 +374,7 @@
"The window argument should not be null.");
}
- return AWTAccessor.getWindowAccessor().isOpaque(window);
+ return window.isOpaque();
}
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/beans/finder/BeanInfoFinder.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,102 @@
+/*
+ * 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. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+package com.sun.beans.finder;
+
+import java.beans.BeanDescriptor;
+import java.beans.BeanInfo;
+import java.beans.MethodDescriptor;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+
+/**
+ * This is utility class that provides functionality
+ * to find a {@link BeanInfo} for a JavaBean specified by its type.
+ *
+ * @since 1.7
+ *
+ * @author Sergey A. Malenkov
+ */
+public final class BeanInfoFinder
+ extends InstanceFinder<BeanInfo> {
+
+ private static final String DEFAULT = "sun.beans.infos";
+
+ public BeanInfoFinder() {
+ super(BeanInfo.class, true, "BeanInfo", DEFAULT);
+ }
+
+ private static boolean isValid(Class<?> type, Method method) {
+ return (method != null) && type.equals(method.getDeclaringClass());
+ }
+
+ @Override
+ protected BeanInfo instantiate(Class<?> type, String name) {
+ BeanInfo info = super.instantiate(type, name);
+ if (info != null) {
+ // make sure that the returned BeanInfo matches the class
+ BeanDescriptor bd = info.getBeanDescriptor();
+ if (bd != null) {
+ if (type.equals(bd.getBeanClass())) {
+ return info;
+ }
+ }
+ else {
+ PropertyDescriptor[] pds = info.getPropertyDescriptors();
+ if (pds != null) {
+ for (PropertyDescriptor pd : pds) {
+ Method method = pd.getReadMethod();
+ if (method == null) {
+ method = pd.getWriteMethod();
+ }
+ if (isValid(type, method)) {
+ return info;
+ }
+ }
+ }
+ else {
+ MethodDescriptor[] mds = info.getMethodDescriptors();
+ if (mds != null) {
+ for (MethodDescriptor md : mds) {
+ if (isValid(type, md.getMethod())) {
+ return info;
+ }
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected BeanInfo instantiate(Class<?> type, String prefix, String name) {
+ // this optimization will only use the BeanInfo search path
+ // if is has changed from the original
+ // or trying to get the ComponentBeanInfo
+ return !DEFAULT.equals(prefix) || "ComponentBeanInfo".equals(name)
+ ? super.instantiate(type, prefix, name)
+ : null;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,111 @@
+/*
+ * 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. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+package com.sun.beans.finder;
+
+/**
+ * This is utility class that provides basic functionality
+ * to find an auxiliary class for a JavaBean specified by its type.
+ *
+ * @since 1.7
+ *
+ * @author Sergey A. Malenkov
+ */
+class InstanceFinder<T> {
+
+ private static final String[] EMPTY = { };
+
+ private final Class<? extends T> type;
+ private final boolean allow;
+ private final String suffix;
+ private String[] packages;
+
+ InstanceFinder(Class<? extends T> type, boolean allow, String suffix, String... packages) {
+ this.type = type;
+ this.allow = allow;
+ this.suffix = suffix;
+ this.packages = packages.clone();
+ }
+
+ public String[] getPackages() {
+ return (this.packages.length > 0)
+ ? this.packages.clone()
+ : this.packages;
+ }
+
+ public void setPackages(String... packages) {
+ this.packages = (packages != null) && (packages.length > 0)
+ ? packages.clone()
+ : EMPTY;
+ }
+
+ public T find(Class<?> type) {
+ if (type == null) {
+ return null;
+ }
+ String name = type.getName() + this.suffix;
+ T object = instantiate(type, name);
+ if (object != null) {
+ return object;
+ }
+ if (this.allow) {
+ object = instantiate(type, null);
+ if (object != null) {
+ return object;
+ }
+ }
+ int index = name.lastIndexOf('.') + 1;
+ if (index > 0) {
+ name = name.substring(index);
+ }
+ for (String prefix : this.packages) {
+ object = instantiate(type, prefix, name);
+ if (object != null) {
+ return object;
+ }
+ }
+ return null;
+ }
+
+ protected T instantiate(Class<?> type, String name) {
+ if (type != null) {
+ try {
+ if (name != null) {
+ type = ClassFinder.findClass(name, type.getClassLoader());
+ }
+ if (this.type.isAssignableFrom(type)) {
+ return (T) type.newInstance();
+ }
+ }
+ catch (Exception exception) {
+ // ignore any exceptions
+ }
+ }
+ return null;
+ }
+
+ protected T instantiate(Class<?> type, String prefix, String name) {
+ return instantiate(type, prefix + '.' + name);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/beans/finder/PersistenceDelegateFinder.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,63 @@
+/*
+ * 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. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+package com.sun.beans.finder;
+
+import java.beans.PersistenceDelegate;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This is utility class that provides functionality
+ * to find a {@link PersistenceDelegate} for a JavaBean specified by its type.
+ *
+ * @since 1.7
+ *
+ * @author Sergey A. Malenkov
+ */
+public final class PersistenceDelegateFinder
+ extends InstanceFinder<PersistenceDelegate> {
+
+ private final Map<Class<?>, PersistenceDelegate> registry;
+
+ public PersistenceDelegateFinder() {
+ super(PersistenceDelegate.class, true, "PersistenceDelegate");
+ this.registry = new HashMap<Class<?>, PersistenceDelegate>();
+ }
+
+ public void register(Class<?> type, PersistenceDelegate delegate) {
+ if (delegate != null) {
+ this.registry.put(type, delegate);
+ }
+ else {
+ this.registry.remove(type);
+ }
+ }
+
+ @Override
+ public PersistenceDelegate find(Class<?> type) {
+ PersistenceDelegate delegate = this.registry.get(type);
+ return (delegate != null) ? delegate : super.find(type);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/beans/finder/PropertyEditorFinder.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,81 @@
+/*
+ * 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. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+package com.sun.beans.finder;
+
+import com.sun.beans.WeakCache;
+
+import java.beans.PropertyEditor;
+
+import sun.beans.editors.BooleanEditor;
+import sun.beans.editors.ByteEditor;
+import sun.beans.editors.DoubleEditor;
+import sun.beans.editors.EnumEditor;
+import sun.beans.editors.FloatEditor;
+import sun.beans.editors.IntegerEditor;
+import sun.beans.editors.LongEditor;
+import sun.beans.editors.ShortEditor;
+
+/**
+ * This is utility class that provides functionality
+ * to find a {@link PropertyEditor} for a JavaBean specified by its type.
+ *
+ * @since 1.7
+ *
+ * @author Sergey A. Malenkov
+ */
+public final class PropertyEditorFinder
+ extends InstanceFinder<PropertyEditor> {
+
+ private final WeakCache<Class<?>, Class<?>> registry;
+
+ public PropertyEditorFinder() {
+ super(PropertyEditor.class, false, "Editor", "sun.beans.editors");
+
+ this.registry = new WeakCache<Class<?>, Class<?>>();
+ this.registry.put(Byte.TYPE, ByteEditor.class);
+ this.registry.put(Short.TYPE, ShortEditor.class);
+ this.registry.put(Integer.TYPE, IntegerEditor.class);
+ this.registry.put(Long.TYPE, LongEditor.class);
+ this.registry.put(Boolean.TYPE, BooleanEditor.class);
+ this.registry.put(Float.TYPE, FloatEditor.class);
+ this.registry.put(Double.TYPE, DoubleEditor.class);
+ }
+
+ public void register(Class<?> type, Class<?> editor) {
+ this.registry.put(type, editor);
+ }
+
+ @Override
+ public PropertyEditor find(Class<?> type) {
+ PropertyEditor editor = instantiate(this.registry.get(type), null);
+ if (editor == null) {
+ editor = super.find(type);
+ if ((editor == null) && (null != type.getEnumConstants())) {
+ editor = new EnumEditor(type);
+ }
+ }
+ return editor;
+ }
+}
--- a/jdk/src/share/classes/java/awt/Component.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/awt/Component.java Tue Jul 21 23:23:57 2009 -0700
@@ -2370,12 +2370,10 @@
* rectangular region. A non-opaque component paints only some of
* its pixels, allowing the pixels underneath it to "show through".
* A component that does not fully paint its pixels therefore
- * provides a degree of transparency. Only lightweight
- * components can be transparent.
+ * provides a degree of transparency.
* <p>
* Subclasses that guarantee to always completely paint their
- * contents should override this method and return true. All
- * of the "heavyweight" AWT components are opaque.
+ * contents should override this method and return true.
*
* @return true if this component is completely opaque
* @see #isLightweight
--- a/jdk/src/share/classes/java/awt/GraphicsDevice.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/awt/GraphicsDevice.java Tue Jul 21 23:23:57 2009 -0700
@@ -281,8 +281,8 @@
if (w.getOpacity() < 1.0f) {
w.setOpacity(1.0f);
}
- Color bgColor = w.getBackground();
- if ((bgColor != null) && (bgColor.getAlpha() < 255)) {
+ if (!w.isOpaque()) {
+ Color bgColor = w.getBackground();
bgColor = new Color(bgColor.getRed(), bgColor.getGreen(),
bgColor.getBlue(), 255);
w.setBackground(bgColor);
--- a/jdk/src/share/classes/java/awt/Robot.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/awt/Robot.java Tue Jul 21 23:23:57 2009 -0700
@@ -70,7 +70,7 @@
private RobotPeer peer;
private boolean isAutoWaitForIdle = false;
private int autoDelay = 0;
- private static int LEGAL_BUTTON_MASK;
+ private static int LEGAL_BUTTON_MASK = 0;
// location of robot's GC, used in mouseMove(), getPixelColor() and captureScreenImage()
private Point gdLoc;
@@ -95,23 +95,6 @@
}
init(GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice());
- int tmpMask = 0;
-
- if (Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled()){
- if (Toolkit.getDefaultToolkit() instanceof SunToolkit) {
- final int buttonsNumber = ((SunToolkit)(Toolkit.getDefaultToolkit())).getNumberOfButtons();
- for (int i = 0; i < buttonsNumber; i++){
- tmpMask |= InputEvent.getMaskForButton(i+1);
- }
- }
- }
- tmpMask |= InputEvent.BUTTON1_MASK|
- InputEvent.BUTTON2_MASK|
- InputEvent.BUTTON3_MASK|
- InputEvent.BUTTON1_DOWN_MASK|
- InputEvent.BUTTON2_DOWN_MASK|
- InputEvent.BUTTON3_DOWN_MASK;
- LEGAL_BUTTON_MASK = tmpMask;
}
/**
@@ -156,6 +139,28 @@
disposer = new RobotDisposer(peer);
sun.java2d.Disposer.addRecord(anchor, disposer);
}
+ initLegalButtonMask();
+ }
+
+ private static synchronized void initLegalButtonMask() {
+ if (LEGAL_BUTTON_MASK != 0) return;
+
+ int tmpMask = 0;
+ if (Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled()){
+ if (Toolkit.getDefaultToolkit() instanceof SunToolkit) {
+ final int buttonsNumber = ((SunToolkit)(Toolkit.getDefaultToolkit())).getNumberOfButtons();
+ for (int i = 0; i < buttonsNumber; i++){
+ tmpMask |= InputEvent.getMaskForButton(i+1);
+ }
+ }
+ }
+ tmpMask |= InputEvent.BUTTON1_MASK|
+ InputEvent.BUTTON2_MASK|
+ InputEvent.BUTTON3_MASK|
+ InputEvent.BUTTON1_DOWN_MASK|
+ InputEvent.BUTTON2_DOWN_MASK|
+ InputEvent.BUTTON3_DOWN_MASK;
+ LEGAL_BUTTON_MASK = tmpMask;
}
/* determine if the security policy allows Robot's to be created */
--- a/jdk/src/share/classes/java/awt/TrayIcon.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/awt/TrayIcon.java Tue Jul 21 23:23:57 2009 -0700
@@ -143,6 +143,9 @@
*/
public TrayIcon(Image image) {
this();
+ if (image == null) {
+ throw new IllegalArgumentException("creating TrayIcon with null Image");
+ }
setImage(image);
}
--- a/jdk/src/share/classes/java/awt/Window.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/awt/Window.java Tue Jul 21 23:23:57 2009 -0700
@@ -3521,6 +3521,7 @@
* @return this component's background color
*
* @see Window#setBackground
+ * @see Window#isOpaque
* @see GraphicsDevice.WindowTranslucency
*/
@Override
@@ -3583,6 +3584,7 @@
* PERPIXEL_TRANSLUCENT} translucency is not supported
*
* @see Window#getBackground
+ * @see Window#isOpaque
* @see Window#setOpacity()
* @see Window#setShape()
* @see GraphicsDevice.WindowTranslucency
@@ -3597,7 +3599,7 @@
return;
}
int oldAlpha = oldBg != null ? oldBg.getAlpha() : 255;
- int alpha = bgColor.getAlpha();
+ int alpha = bgColor != null ? bgColor.getAlpha() : 255;
if ((oldAlpha == 255) && (alpha < 255)) { // non-opaque window
GraphicsConfiguration gc = getGraphicsConfiguration();
GraphicsDevice gd = gc.getDevice();
@@ -3623,6 +3625,25 @@
}
}
+ /**
+ * Indicates if the window is currently opaque.
+ * <p>
+ * The method returns {@code false} if the background color of the window
+ * is not {@code null} and the alpha component of the color is less than
+ * 1.0f. The method returns {@code true} otherwise.
+ *
+ * @return {@code true} if the window is opaque, {@code false} otherwise
+ *
+ * @see Window#getBackground
+ * @see Window#setBackground
+ * @since 1.7
+ */
+ @Override
+ public boolean isOpaque() {
+ Color bg = getBackground();
+ return bg != null ? bg.getAlpha() == 255 : true;
+ }
+
private void updateWindow() {
synchronized (getTreeLock()) {
WindowPeer peer = (WindowPeer)getPeer();
@@ -3639,12 +3660,11 @@
*/
@Override
public void paint(Graphics g) {
- Color bgColor = getBackground();
- if ((bgColor != null) && (bgColor.getAlpha() < 255)) {
+ if (!isOpaque()) {
Graphics gg = g.create();
try {
if (gg instanceof Graphics2D) {
- gg.setColor(bgColor);
+ gg.setColor(getBackground());
((Graphics2D)gg).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
gg.fillRect(0, 0, getWidth(), getHeight());
}
@@ -3749,10 +3769,6 @@
public void setShape(Window window, Shape shape) {
window.setShape(shape);
}
- public boolean isOpaque(Window window) {
- Color bg = window.getBackground();
- return (bg != null) ? bg.getAlpha() == 255 : true;
- }
public void setOpaque(Window window, boolean opaque) {
Color bg = window.getBackground();
if (bg == null) {
--- a/jdk/src/share/classes/java/beans/Encoder.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/beans/Encoder.java Tue Jul 21 23:23:57 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2000-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
@@ -24,7 +24,8 @@
*/
package java.beans;
-import java.util.Collections;
+import com.sun.beans.finder.PersistenceDelegateFinder;
+
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;
@@ -45,8 +46,7 @@
*/
public class Encoder {
- private final Map<Class<?>, PersistenceDelegate> delegates
- = Collections.synchronizedMap(new HashMap<Class<?>, PersistenceDelegate>());
+ private final PersistenceDelegateFinder finder = new PersistenceDelegateFinder();
private Map bindings = new IdentityHashMap();
private ExceptionListener exceptionListener;
boolean executeStatements = true;
@@ -166,8 +166,13 @@
* @see java.beans.BeanInfo#getBeanDescriptor
*/
public PersistenceDelegate getPersistenceDelegate(Class<?> type) {
- PersistenceDelegate pd = this.delegates.get(type);
- return (pd != null) ? pd : MetaData.getPersistenceDelegate(type);
+ synchronized (this.finder) {
+ PersistenceDelegate pd = this.finder.find(type);
+ if (pd != null) {
+ return pd;
+ }
+ }
+ return MetaData.getPersistenceDelegate(type);
}
/**
@@ -184,10 +189,8 @@
public void setPersistenceDelegate(Class<?> type,
PersistenceDelegate persistenceDelegate)
{
- if (persistenceDelegate != null) {
- this.delegates.put(type, persistenceDelegate);
- } else {
- this.delegates.remove(type);
+ synchronized (this.finder) {
+ this.finder.register(type, persistenceDelegate);
}
}
@@ -243,12 +246,11 @@
for (int i = 0; i < oldArgs.length; i++) {
newArgs[i] = writeObject1(oldArgs[i]);
}
- if (oldExp.getClass() == Statement.class) {
- return new Statement(newTarget, oldExp.getMethodName(), newArgs);
- }
- else {
- return new Expression(newTarget, oldExp.getMethodName(), newArgs);
- }
+ Statement newExp = Statement.class.equals(oldExp.getClass())
+ ? new Statement(newTarget, oldExp.getMethodName(), newArgs)
+ : new Expression(newTarget, oldExp.getMethodName(), newArgs);
+ newExp.loader = oldExp.loader;
+ return newExp;
}
/**
--- a/jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java Tue Jul 21 23:23:57 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1996-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
@@ -274,6 +274,11 @@
}
indexedWriteMethod = Introspector.findMethod(cls, indexedWriteMethodName,
2, (type == null) ? null : new Class[] { int.class, type });
+ if (indexedWriteMethod != null) {
+ if (!indexedWriteMethod.getReturnType().equals(void.class)) {
+ indexedWriteMethod = null;
+ }
+ }
setIndexedWriteMethod0(indexedWriteMethod);
}
return indexedWriteMethod;
--- a/jdk/src/share/classes/java/beans/Introspector.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/beans/Introspector.java Tue Jul 21 23:23:57 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1996-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
@@ -25,6 +25,7 @@
package java.beans;
+import com.sun.beans.finder.BeanInfoFinder;
import com.sun.beans.finder.ClassFinder;
import java.lang.ref.Reference;
@@ -45,6 +46,8 @@
import java.util.List;
import java.util.WeakHashMap;
import java.util.TreeMap;
+
+import sun.awt.AppContext;
import sun.reflect.misc.ReflectUtil;
/**
@@ -137,10 +140,6 @@
// events maps from String names to EventSetDescriptors
private Map events;
- private final static String DEFAULT_INFO_PATH = "sun.beans.infos";
-
- private static String[] searchPath = { DEFAULT_INFO_PATH };
-
private final static EventSetDescriptor[] EMPTY_EVENTSETDESCRIPTORS = new EventSetDescriptor[0];
static final String ADD_PREFIX = "add";
@@ -149,7 +148,7 @@
static final String SET_PREFIX = "set";
static final String IS_PREFIX = "is";
- private static final String BEANINFO_SUFFIX = "BeanInfo";
+ private static final Object FINDER_KEY = new Object();
//======================================================================
// Public methods
@@ -309,13 +308,11 @@
* Sun implementation initially sets to {"sun.beans.infos"}.
*/
- public static synchronized String[] getBeanInfoSearchPath() {
- // Return a copy of the searchPath.
- String result[] = new String[searchPath.length];
- for (int i = 0; i < searchPath.length; i++) {
- result[i] = searchPath[i];
+ public static String[] getBeanInfoSearchPath() {
+ BeanInfoFinder finder = getFinder();
+ synchronized (finder) {
+ return finder.getPackages();
}
- return result;
}
/**
@@ -334,12 +331,15 @@
* @see SecurityManager#checkPropertiesAccess
*/
- public static synchronized void setBeanInfoSearchPath(String path[]) {
+ public static void setBeanInfoSearchPath(String[] path) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPropertiesAccess();
}
- searchPath = path;
+ BeanInfoFinder finder = getFinder();
+ synchronized (finder) {
+ finder.setPackages(path);
+ }
}
@@ -447,67 +447,14 @@
* then it checks to see if the class is its own BeanInfo. Finally,
* the BeanInfo search path is prepended to the class and searched.
*
+ * @param beanClass the class type of the bean
* @return Instance of an explicit BeanInfo class or null if one isn't found.
*/
- private static synchronized BeanInfo findExplicitBeanInfo(Class beanClass) {
- String name = beanClass.getName() + BEANINFO_SUFFIX;
- try {
- return (java.beans.BeanInfo)instantiate(beanClass, name);
- } catch (Exception ex) {
- // Just drop through
-
- }
- // Now try checking if the bean is its own BeanInfo.
- try {
- if (isSubclass(beanClass, java.beans.BeanInfo.class)) {
- return (java.beans.BeanInfo)beanClass.newInstance();
- }
- } catch (Exception ex) {
- // Just drop through
+ private static BeanInfo findExplicitBeanInfo(Class beanClass) {
+ BeanInfoFinder finder = getFinder();
+ synchronized (finder) {
+ return finder.find(beanClass);
}
- // Now try looking for <searchPath>.fooBeanInfo
- name = name.substring(name.lastIndexOf('.')+1);
-
- for (int i = 0; i < searchPath.length; i++) {
- // This optimization will only use the BeanInfo search path if is has changed
- // from the original or trying to get the ComponentBeanInfo.
- if (!DEFAULT_INFO_PATH.equals(searchPath[i]) ||
- DEFAULT_INFO_PATH.equals(searchPath[i]) && "ComponentBeanInfo".equals(name)) {
- try {
- String fullName = searchPath[i] + "." + name;
- java.beans.BeanInfo bi = (java.beans.BeanInfo)instantiate(beanClass, fullName);
-
- // Make sure that the returned BeanInfo matches the class.
- if (bi.getBeanDescriptor() != null) {
- if (bi.getBeanDescriptor().getBeanClass() == beanClass) {
- return bi;
- }
- } else if (bi.getPropertyDescriptors() != null) {
- PropertyDescriptor[] pds = bi.getPropertyDescriptors();
- for (int j = 0; j < pds.length; j++) {
- Method method = pds[j].getReadMethod();
- if (method == null) {
- method = pds[j].getWriteMethod();
- }
- if (method != null && method.getDeclaringClass() == beanClass) {
- return bi;
- }
- }
- } else if (bi.getMethodDescriptors() != null) {
- MethodDescriptor[] mds = bi.getMethodDescriptors();
- for (int j = 0; j < mds.length; j++) {
- Method method = mds[j].getMethod();
- if (method != null && method.getDeclaringClass() == beanClass) {
- return bi;
- }
- }
- }
- } catch (Exception ex) {
- // Silently ignore any errors.
- }
- }
- }
- return null;
}
/**
@@ -577,9 +524,9 @@
pd = new PropertyDescriptor(this.beanClass, name.substring(2), method, null);
}
} else if (argCount == 1) {
- if (argTypes[0] == int.class && name.startsWith(GET_PREFIX)) {
+ if (int.class.equals(argTypes[0]) && name.startsWith(GET_PREFIX)) {
pd = new IndexedPropertyDescriptor(this.beanClass, name.substring(3), null, null, method, null);
- } else if (resultType == void.class && name.startsWith(SET_PREFIX)) {
+ } else if (void.class.equals(resultType) && name.startsWith(SET_PREFIX)) {
// Simple setter
pd = new PropertyDescriptor(this.beanClass, name.substring(3), null, method);
if (throwsException(method, PropertyVetoException.class)) {
@@ -587,7 +534,7 @@
}
}
} else if (argCount == 2) {
- if (argTypes[0] == int.class && name.startsWith(SET_PREFIX)) {
+ if (void.class.equals(resultType) && int.class.equals(argTypes[0]) && name.startsWith(SET_PREFIX)) {
pd = new IndexedPropertyDescriptor(this.beanClass, name.substring(3), null, null, null, method);
if (throwsException(method, PropertyVetoException.class)) {
pd.setConstrained(true);
@@ -1483,6 +1430,16 @@
return false;
}
+ private static BeanInfoFinder getFinder() {
+ AppContext context = AppContext.getAppContext();
+ Object object = context.get(FINDER_KEY);
+ if (object instanceof BeanInfoFinder) {
+ return (BeanInfoFinder) object;
+ }
+ BeanInfoFinder finder = new BeanInfoFinder();
+ context.put(FINDER_KEY, finder);
+ return finder;
+ }
/**
* Try to create an instance of a named class.
--- a/jdk/src/share/classes/java/beans/MetaData.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/beans/MetaData.java Tue Jul 21 23:23:57 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2000-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
@@ -219,7 +219,9 @@
return new Expression(oldInstance, String.class, "getClass", new Object[]{});
}
else {
- return new Expression(oldInstance, Class.class, "forName", new Object[]{c.getName()});
+ Expression newInstance = new Expression(oldInstance, Class.class, "forName", new Object[] { c.getName() });
+ newInstance.loader = c.getClassLoader();
+ return newInstance;
}
}
}
--- a/jdk/src/share/classes/java/beans/PropertyDescriptor.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/beans/PropertyDescriptor.java Tue Jul 21 23:23:57 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1996-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
@@ -294,6 +294,11 @@
writeMethod = Introspector.findMethod(cls, writeMethodName, 1,
(type == null) ? null : new Class[] { type });
+ if (writeMethod != null) {
+ if (!writeMethod.getReturnType().equals(void.class)) {
+ writeMethod = null;
+ }
+ }
try {
setWriteMethod(writeMethod);
} catch (IntrospectionException ex) {
--- a/jdk/src/share/classes/java/beans/PropertyEditorManager.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/beans/PropertyEditorManager.java Tue Jul 21 23:23:57 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1996-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
@@ -25,8 +25,8 @@
package java.beans;
-import com.sun.beans.WeakCache;
-import sun.beans.editors.*;
+import com.sun.beans.finder.PropertyEditorFinder;
+import sun.awt.AppContext;
/**
* The PropertyEditorManager can be used to locate a property editor for
@@ -55,6 +55,8 @@
public class PropertyEditorManager {
+ private static final Object FINDER_KEY = new Object();
+
/**
* Registers an editor class to edit values of the given target class.
* If the editor class is {@code null},
@@ -74,12 +76,15 @@
*
* @see SecurityManager#checkPropertiesAccess
*/
- public static synchronized void registerEditor(Class<?> targetType, Class<?> editorClass) {
+ public static void registerEditor(Class<?> targetType, Class<?> editorClass) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPropertiesAccess();
}
- registry.put(targetType, editorClass);
+ PropertyEditorFinder finder = getFinder();
+ synchronized (finder) {
+ finder.register(targetType, editorClass);
+ }
}
/**
@@ -89,46 +94,11 @@
* @return An editor object for the given target class.
* The result is null if no suitable editor can be found.
*/
- public static synchronized PropertyEditor findEditor(Class<?> targetType) {
- Class editorClass = registry.get(targetType);
- if (editorClass != null) {
- try {
- Object o = editorClass.newInstance();
- return (PropertyEditor)o;
- } catch (Exception ex) {
- System.err.println("Couldn't instantiate type editor \"" +
- editorClass.getName() + "\" : " + ex);
- }
- }
-
- // Now try adding "Editor" to the class name.
-
- String editorName = targetType.getName() + "Editor";
- try {
- return (PropertyEditor) Introspector.instantiate(targetType, editorName);
- } catch (Exception ex) {
- // Silently ignore any errors.
+ public static PropertyEditor findEditor(Class<?> targetType) {
+ PropertyEditorFinder finder = getFinder();
+ synchronized (finder) {
+ return finder.find(targetType);
}
-
- // Now try looking for <searchPath>.fooEditor
- int index = editorName.lastIndexOf('.') + 1;
- if (index > 0) {
- editorName = editorName.substring(index);
- }
- for (String path : searchPath) {
- String name = path + '.' + editorName;
- try {
- return (PropertyEditor) Introspector.instantiate(targetType, name);
- } catch (Exception ex) {
- // Silently ignore any errors.
- }
- }
-
- if (null != targetType.getEnumConstants()) {
- return new EnumEditor(targetType);
- }
- // We couldn't find a suitable Editor.
- return null;
}
/**
@@ -139,8 +109,11 @@
* <p> The default value for this array is implementation-dependent,
* e.g. Sun implementation initially sets to {"sun.beans.editors"}.
*/
- public static synchronized String[] getEditorSearchPath() {
- return searchPath.clone();
+ public static String[] getEditorSearchPath() {
+ PropertyEditorFinder finder = getFinder();
+ synchronized (finder) {
+ return finder.getPackages();
+ }
}
/**
@@ -156,28 +129,25 @@
* of system properties.
* @see SecurityManager#checkPropertiesAccess
*/
- public static synchronized void setEditorSearchPath(String[] path) {
+ public static void setEditorSearchPath(String[] path) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPropertiesAccess();
}
- searchPath = (path != null)
- ? path.clone()
- : EMPTY;
+ PropertyEditorFinder finder = getFinder();
+ synchronized (finder) {
+ finder.setPackages(path);
+ }
}
- private static String[] searchPath = { "sun.beans.editors" };
- private static final String[] EMPTY = {};
- private static final WeakCache<Class<?>, Class<?>> registry;
-
- static {
- registry = new WeakCache<Class<?>, Class<?>>();
- registry.put(Byte.TYPE, ByteEditor.class);
- registry.put(Short.TYPE, ShortEditor.class);
- registry.put(Integer.TYPE, IntegerEditor.class);
- registry.put(Long.TYPE, LongEditor.class);
- registry.put(Boolean.TYPE, BooleanEditor.class);
- registry.put(Float.TYPE, FloatEditor.class);
- registry.put(Double.TYPE, DoubleEditor.class);
+ private static PropertyEditorFinder getFinder() {
+ AppContext context = AppContext.getAppContext();
+ Object object = context.get(FINDER_KEY);
+ if (object instanceof PropertyEditorFinder) {
+ return (PropertyEditorFinder) object;
+ }
+ PropertyEditorFinder finder = new PropertyEditorFinder();
+ context.put(FINDER_KEY, finder);
+ return finder;
}
}
--- a/jdk/src/share/classes/java/beans/Statement.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/java/beans/Statement.java Tue Jul 21 23:23:57 2009 -0700
@@ -66,6 +66,7 @@
Object target;
String methodName;
Object[] arguments;
+ ClassLoader loader;
/**
* Creates a new <code>Statement</code> object with a <code>target</code>,
@@ -157,7 +158,7 @@
// of core from a class inside core. Special
// case this method.
if (target == Class.class && methodName.equals("forName")) {
- return ClassFinder.resolveClass((String)arguments[0]);
+ return ClassFinder.resolveClass((String)arguments[0], this.loader);
}
Class[] argClasses = new Class[arguments.length];
for(int i = 0; i < arguments.length; i++) {
--- a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Tue Jul 21 23:23:57 2009 -0700
@@ -708,7 +708,7 @@
// update window if it's non-opaque
Window topLevel = SwingUtilities.getWindowAncestor(f);
Toolkit tk = Toolkit.getDefaultToolkit();
- if (!AWTAccessor.getWindowAccessor().isOpaque(topLevel) &&
+ if (!topLevel.isOpaque() &&
(tk instanceof SunToolkit) &&
((SunToolkit)tk).needUpdateWindow())
{
--- a/jdk/src/share/classes/javax/swing/RepaintManager.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/javax/swing/RepaintManager.java Tue Jul 21 23:23:57 2009 -0700
@@ -732,7 +732,7 @@
(Window)dirty :
SwingUtilities.getWindowAncestor(dirty);
if (window != null &&
- !AWTAccessor.getWindowAccessor().isOpaque(window))
+ !window.isOpaque())
{
windows.add(window);
}
@@ -996,7 +996,7 @@
// If the window is non-opaque, it's double-buffered at peer's level
Window w = (c instanceof Window) ? (Window)c : SwingUtilities.getWindowAncestor(c);
- if (!AWTAccessor.getWindowAccessor().isOpaque(w)) {
+ if (!w.isOpaque()) {
Toolkit tk = Toolkit.getDefaultToolkit();
if ((tk instanceof SunToolkit) && (((SunToolkit)tk).needUpdateWindow())) {
return null;
@@ -1032,7 +1032,7 @@
// If the window is non-opaque, it's double-buffered at peer's level
Window w = (c instanceof Window) ? (Window)c : SwingUtilities.getWindowAncestor(c);
- if (!AWTAccessor.getWindowAccessor().isOpaque(w)) {
+ if (!w.isOpaque()) {
Toolkit tk = Toolkit.getDefaultToolkit();
if ((tk instanceof SunToolkit) && (((SunToolkit)tk).needUpdateWindow())) {
return null;
--- a/jdk/src/share/classes/sun/awt/AWTAccessor.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/sun/awt/AWTAccessor.java Tue Jul 21 23:23:57 2009 -0700
@@ -137,11 +137,6 @@
*/
void setShape(Window window, Shape shape);
/*
- * Identify whether the given window is opaque (true)
- * or translucent (false).
- */
- boolean isOpaque(Window window);
- /*
* Set the opaque preoperty to the given window.
*/
void setOpaque(Window window, boolean isOpaque);
--- a/jdk/src/share/classes/sun/awt/SunToolkit.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/share/classes/sun/awt/SunToolkit.java Tue Jul 21 23:23:57 2009 -0700
@@ -1985,8 +1985,7 @@
*/
public static boolean isContainingTopLevelOpaque(Component c) {
Window w = getContainingWindow(c);
- return w != null && ((Window)w).getBackground() != null &&
- ((Window)w).getBackground().getAlpha() == 255;
+ return w != null && w.isOpaque();
}
/**
--- a/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java Tue Jul 21 23:23:57 2009 -0700
@@ -1000,10 +1000,7 @@
int buttonState = 0;
final int buttonsNumber = ((SunToolkit)(Toolkit.getDefaultToolkit())).getNumberOfButtons();
for (int i = 0; i<buttonsNumber; i++){
- // A bug in WM implementation: extra buttons doesn't have state!=0 as they should on Release message.
- if ((i != 4) && (i != 5)){
- buttonState |= (xbe.get_state() & XConstants.buttonsMask[i]);
- }
+ buttonState |= (xbe.get_state() & XConstants.buttonsMask[i]);
}
switch (xev.get_type()) {
case XConstants.ButtonPress:
--- a/jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java Tue Jul 21 23:23:57 2009 -0700
@@ -194,8 +194,7 @@
// default value of a boolean field is 'false', so set isOpaque to
// true here explicitly
this.isOpaque = true;
- Color bgColor = ((Window)target).getBackground();
- setOpaque((bgColor == null) || (bgColor.getAlpha() == 255));
+ setOpaque(((Window)target).isOpaque());
}
}
--- a/jdk/src/windows/native/sun/windows/ShellFolder2.cpp Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/src/windows/native/sun/windows/ShellFolder2.cpp Tue Jul 21 23:23:57 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -981,6 +981,15 @@
hBitmap = (HBITMAP)LoadImage(libShell32,
IS_WINVISTA ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216),
IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
+
+ if (hBitmap == NULL) {
+ // version of shell32.dll doesn't match OS version.
+ // So we either are in a Vista Compatibility Mode
+ // or shell32.dll was copied from OS of another version
+ hBitmap = (HBITMAP)LoadImage(libShell32,
+ IS_WINVISTA ? MAKEINTRESOURCE(216) : TEXT("IDB_TB_SH_DEF_16"),
+ IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
+ }
}
if (hBitmap == NULL) {
libComCtl32 = LoadLibrary(TEXT("comctl32.dll"));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Robot/CtorTest/CtorTest.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 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 6855323
+ @summary Robot(GraphicsDevice) constructor initializes LEGAL_BUTTON_MASK variable improperly
+ @author Dmitry Cherepanov area=awt.robot
+ @run main CtorTest
+*/
+
+/**
+ * CtorRobot.java
+ *
+ * summary: creates Robot using one parameter constructor
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+
+import sun.awt.SunToolkit;
+
+public class CtorTest
+{
+ public static void main(String []s) throws Exception
+ {
+ // one parameter constructor
+ GraphicsDevice graphicsDevice = GraphicsEnvironment.
+ getLocalGraphicsEnvironment().getDefaultScreenDevice();
+ Robot robot = new Robot(graphicsDevice);
+ clickOnFrame(robot);
+ }
+
+ // generate mouse events
+ private static void clickOnFrame(Robot robot) {
+ Frame frame = new Frame();
+ frame.setBounds(100, 100, 100, 100);
+ frame.setVisible(true);
+
+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+
+ // click in the middle of the frame
+ robot.mouseMove(150, 150);
+ robot.delay(50);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.delay(50);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+
+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/TrayIcon/CtorTest/CtorTest.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 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 6759726
+ @summary TrayIcon constructor throws NPE instead of documented IAE
+ @author Dmitry Cherepanov area=awt.tray
+ @run main CtorTest
+*/
+
+/**
+ * CtorTest.java
+ *
+ * summary: TrayIcon ctor throws IAE if image is null
+ */
+
+import java.awt.*;
+
+public class CtorTest
+{
+ public static void main(String []s)
+ {
+ boolean isSupported = SystemTray.isSupported();
+ if (isSupported) {
+ try {
+ TrayIcon tray = new TrayIcon(null);
+ } catch(IllegalArgumentException e) {
+ // ctor should throw IAE
+ }
+ }
+ }
+}
--- a/jdk/test/java/awt/Window/OwnedWindowsLeak/OwnedWindowsLeak.java Thu Jul 16 18:07:04 2009 -0700
+++ b/jdk/test/java/awt/Window/OwnedWindowsLeak/OwnedWindowsLeak.java Tue Jul 21 23:23:57 2009 -0700
@@ -65,6 +65,7 @@
break;
}
}
+ garbage = null;
// Third, make sure all the weak references are null
for (WeakReference<Window> ref : children)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Window/SetBackgroundNPE/SetBackgroundNPE.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,38 @@
+/*
+ * 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 6853916
+ @summary Window.setBackground() should not throw NPE
+ @author anthony.petrov@sun.com: area=awt.toplevel
+ @run main SetBackgroundNPE
+*/
+
+import java.awt.Window;
+
+public class SetBackgroundNPE {
+ public static void main(String args[]) {
+ new Window(null).setBackground(null);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/event/MouseWheelEvent/DisabledComponent/DisabledComponent.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 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 6847958
+ @library ../../../regtesthelpers
+ @summary MouseWheel event is getting triggered for the disabled Textarea in jdk7 b60 pit build.
+ @author Dmitry Cherepanov: area=awt.event
+ @build Util
+ @run main DisabledComponent
+*/
+
+/**
+ * DisabledComponent.java
+ *
+ * summary: Tests that wheel events aren't coming on disabled component
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+
+import sun.awt.SunToolkit;
+
+import test.java.awt.regtesthelpers.Util;
+
+public class DisabledComponent
+{
+
+ private static volatile boolean passed = true;
+
+ public static void main(String []s) throws Exception
+ {
+ Frame frame = new Frame();
+ frame.setBounds(100,100,400,400);
+ frame.setLayout(new FlowLayout());
+
+ TextArea textArea = new TextArea("TextArea", 6, 15);
+ frame.add(textArea);
+
+ List list = new List(3);
+ list.add("1");
+ list.add("2");
+ list.add("3");
+ frame.add(list);
+
+ MouseWheelListener listener = new MouseWheelListener(){
+ @Override
+ public void mouseWheelMoved(MouseWheelEvent mwe){
+ System.err.println(mwe);
+ passed = false;
+ }
+ };
+
+
+ list.addMouseWheelListener(listener);
+ textArea.addMouseWheelListener(listener);
+
+ frame.setVisible(true);
+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+
+ Robot robot = new Robot();
+
+ // point and wheel on the list
+ Util.pointOnComp(list, robot);
+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+
+ robot.mouseWheel(2);
+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+
+ // disable the text area
+ System.err.println(" disable text area ");
+ textArea.setEnabled(false);
+ passed = true;
+
+ // point and wheel on the text area
+ Util.pointOnComp(textArea, robot);
+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+
+ robot.mouseWheel(2);
+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+
+ if (!passed) {
+ throw new RuntimeException(" wrong wheel events ");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/6380849/TestBeanInfo.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,102 @@
+/**
+ * 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 6380849
+ * @summary Tests BeanInfo finder
+ * @author Sergey Malenkov
+ */
+
+import beans.FirstBean;
+import beans.FirstBeanBeanInfo;
+import beans.SecondBean;
+import beans.ThirdBean;
+
+import infos.SecondBeanBeanInfo;
+import infos.ThirdBeanBeanInfo;
+
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.lang.reflect.Field;
+
+import sun.awt.SunToolkit;
+
+public class TestBeanInfo implements Runnable {
+
+ private static final String[] SEARCH_PATH = { "infos" }; // NON-NLS: package name
+
+ public static void main(String[] args) throws InterruptedException {
+ TestBeanInfo test = new TestBeanInfo();
+ test.run();
+ // the following tests fails on previous build
+ ThreadGroup group = new ThreadGroup("$$$"); // NON-NLS: unique thread name
+ Thread thread = new Thread(group, test);
+ thread.start();
+ thread.join();
+ }
+
+ private static void test(Class<?> type, Class<? extends BeanInfo> expected) {
+ BeanInfo actual;
+ try {
+ actual = Introspector.getBeanInfo(type);
+ type = actual.getClass();
+ Field field = type.getDeclaredField("targetBeanInfo"); // NON-NLS: field name
+ field.setAccessible(true);
+ actual = (BeanInfo) field.get(actual);
+ }
+ catch (Exception exception) {
+ throw new Error("unexpected error", exception);
+ }
+ if ((actual == null) && (expected != null)) {
+ throw new Error("expected info is not found");
+ }
+ if ((actual != null) && !actual.getClass().equals(expected)) {
+ throw new Error("found unexpected info");
+ }
+ }
+
+ private boolean passed;
+
+ public void run() {
+ if (this.passed) {
+ SunToolkit.createNewAppContext();
+ }
+ Introspector.flushCaches();
+
+ test(FirstBean.class, FirstBeanBeanInfo.class);
+ test(SecondBean.class, null);
+ test(ThirdBean.class, null);
+ test(ThirdBeanBeanInfo.class, ThirdBeanBeanInfo.class);
+
+ Introspector.setBeanInfoSearchPath(SEARCH_PATH);
+ Introspector.flushCaches();
+
+ test(FirstBean.class, FirstBeanBeanInfo.class);
+ test(SecondBean.class, SecondBeanBeanInfo.class);
+ test(ThirdBean.class, null);
+ test(ThirdBeanBeanInfo.class, ThirdBeanBeanInfo.class);
+
+ this.passed = true;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/6380849/beans/FirstBean.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,4 @@
+package beans;
+
+public class FirstBean {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/6380849/beans/FirstBeanBeanInfo.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,11 @@
+package beans;
+
+import java.beans.BeanDescriptor;
+import java.beans.SimpleBeanInfo;
+
+public class FirstBeanBeanInfo extends SimpleBeanInfo {
+ @Override
+ public BeanDescriptor getBeanDescriptor() {
+ return new BeanDescriptor(FirstBean.class);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/6380849/beans/SecondBean.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,4 @@
+package beans;
+
+public class SecondBean {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/6380849/beans/ThirdBean.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,4 @@
+package beans;
+
+public class ThirdBean {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/6380849/infos/SecondBeanBeanInfo.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,13 @@
+package infos;
+
+import beans.SecondBean;
+
+import java.beans.BeanDescriptor;
+import java.beans.SimpleBeanInfo;
+
+public class SecondBeanBeanInfo extends SimpleBeanInfo {
+ @Override
+ public BeanDescriptor getBeanDescriptor() {
+ return new BeanDescriptor(SecondBean.class);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/6380849/infos/ThirdBeanBeanInfo.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,11 @@
+package infos;
+
+import java.beans.BeanDescriptor;
+import java.beans.SimpleBeanInfo;
+
+public class ThirdBeanBeanInfo extends SimpleBeanInfo {
+ @Override
+ public BeanDescriptor getBeanDescriptor() {
+ return new BeanDescriptor(ThirdBeanBeanInfo.class);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/Introspector/Test6723447.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,88 @@
+/*
+ * 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 6723447
+ * @summary Tests return type for property setters
+ * @author Sergey Malenkov
+ */
+
+import java.beans.IndexedPropertyDescriptor;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+
+public class Test6723447 {
+
+ public static void main(String[] args) {
+ test(Test6723447.class);
+ test(BigDecimal.class);
+ }
+
+ private static void test(Class<?> type) {
+ for (PropertyDescriptor pd : getPropertyDescriptors(type)) {
+ test(pd.getWriteMethod());
+ if (pd instanceof IndexedPropertyDescriptor) {
+ IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;
+ test(ipd.getIndexedWriteMethod());
+ }
+ }
+ }
+
+ private static void test(Method method) {
+ if (method != null) {
+ Class<?> type = method.getReturnType();
+ if (!type.equals(void.class)) {
+ throw new Error("unexpected return type: " + type);
+ }
+ }
+ }
+
+ private static PropertyDescriptor[] getPropertyDescriptors(Class<?> type) {
+ try {
+ return Introspector.getBeanInfo(type).getPropertyDescriptors();
+ }
+ catch (IntrospectionException exception) {
+ throw new Error("unexpected exception", exception);
+ }
+ }
+
+ public Object getValue() {
+ return null;
+ }
+
+ public Object setValue(Object value) {
+ return value;
+ }
+
+ public Object getValues(int index) {
+ return null;
+ }
+
+ public Object setValues(int index, Object value) {
+ return value;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/PropertyEditor/6380849/FirstBean.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,2 @@
+public class FirstBean {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/PropertyEditor/6380849/FirstBeanEditor.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,4 @@
+import java.beans.PropertyEditorSupport;
+
+public class FirstBeanEditor extends PropertyEditorSupport {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/PropertyEditor/6380849/SecondBean.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,2 @@
+public class SecondBean {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/PropertyEditor/6380849/TestPropertyEditor.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,141 @@
+/**
+ * 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 6380849
+ * @summary Tests PropertyEditor finder
+ * @author Sergey Malenkov
+ */
+
+import editors.SecondBeanEditor;
+import editors.ThirdBeanEditor;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.beans.PropertyEditor;
+import java.beans.PropertyEditorManager;
+
+import sun.awt.SunToolkit;
+import sun.beans.editors.BooleanEditor;
+import sun.beans.editors.ByteEditor;
+import sun.beans.editors.ColorEditor;
+import sun.beans.editors.DoubleEditor;
+import sun.beans.editors.EnumEditor;
+import sun.beans.editors.FloatEditor;
+import sun.beans.editors.FontEditor;
+import sun.beans.editors.IntegerEditor;
+import sun.beans.editors.LongEditor;
+import sun.beans.editors.ShortEditor;
+import sun.beans.editors.StringEditor;
+
+public class TestPropertyEditor implements Runnable {
+
+ private enum Enumeration {
+ FIRST, SECOND, THIRD
+ }
+
+ private static final String[] SEARCH_PATH = { "editors" }; // NON-NLS: package name
+
+ public static void main(String[] args) throws InterruptedException {
+ TestPropertyEditor test = new TestPropertyEditor();
+ test.run();
+ // the following tests fails on previous build
+ ThreadGroup group = new ThreadGroup("$$$"); // NON-NLS: unique thread name
+ Thread thread = new Thread(group, test);
+ thread.start();
+ thread.join();
+ }
+
+ private static void test(Class<?> type, Class<? extends PropertyEditor> expected) {
+ PropertyEditor actual = PropertyEditorManager.findEditor(type);
+ if ((actual == null) && (expected != null)) {
+ throw new Error("expected editor is not found");
+ }
+ if ((actual != null) && !actual.getClass().equals(expected)) {
+ throw new Error("found unexpected editor");
+ }
+ }
+
+ private boolean passed;
+
+ public void run() {
+ if (this.passed) {
+ SunToolkit.createNewAppContext();
+ }
+ PropertyEditorManager.registerEditor(ThirdBean.class, ThirdBeanEditor.class);
+
+ test(FirstBean.class, FirstBeanEditor.class);
+ test(SecondBean.class, null);
+ test(ThirdBean.class, ThirdBeanEditor.class);
+ // test editors for default primitive types
+ test(Byte.TYPE, ByteEditor.class);
+ test(Short.TYPE, ShortEditor.class);
+ test(Integer.TYPE, IntegerEditor.class);
+ test(Long.TYPE, LongEditor.class);
+ test(Boolean.TYPE, BooleanEditor.class);
+ test(Float.TYPE, FloatEditor.class);
+ test(Double.TYPE, DoubleEditor.class);
+ // test editors for default object types
+ test(Byte.class, ByteEditor.class);
+ test(Short.class, ShortEditor.class);
+ test(Integer.class, IntegerEditor.class);
+ test(Long.class, LongEditor.class);
+ test(Boolean.class, BooleanEditor.class);
+ test(Float.class, FloatEditor.class);
+ test(Double.class, DoubleEditor.class);
+ test(String.class, StringEditor.class);
+ test(Color.class, ColorEditor.class);
+ test(Font.class, FontEditor.class);
+ test(Enumeration.class, EnumEditor.class);
+
+ PropertyEditorManager.registerEditor(ThirdBean.class, null);
+ PropertyEditorManager.setEditorSearchPath(SEARCH_PATH);
+
+ test(FirstBean.class, FirstBeanEditor.class);
+ test(SecondBean.class, SecondBeanEditor.class);
+ test(ThirdBean.class, ThirdBeanEditor.class);
+ // test editors for default primitive types
+ test(Byte.TYPE, ByteEditor.class);
+ test(Short.TYPE, ShortEditor.class);
+ test(Integer.TYPE, IntegerEditor.class);
+ test(Long.TYPE, LongEditor.class);
+ test(Boolean.TYPE, BooleanEditor.class);
+ test(Float.TYPE, FloatEditor.class);
+ test(Double.TYPE, DoubleEditor.class);
+ // test editors for default object types
+ test(Byte.class, null);
+ test(Short.class, null);
+ test(Integer.class, null);
+ test(Long.class, null);
+ test(Boolean.class, null);
+ test(Float.class, null);
+ test(Double.class, null);
+ test(String.class, null);
+ test(Color.class, null);
+ test(Font.class, null);
+ test(Enumeration.class, EnumEditor.class);
+
+ this.passed = true;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/PropertyEditor/6380849/ThirdBean.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,2 @@
+public class ThirdBean {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/PropertyEditor/6380849/editors/SecondBeanEditor.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,6 @@
+package editors;
+
+import java.beans.PropertyEditorSupport;
+
+public class SecondBeanEditor extends PropertyEditorSupport {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/PropertyEditor/6380849/editors/ThirdBeanEditor.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,6 @@
+package editors;
+
+import java.beans.PropertyEditorSupport;
+
+public class ThirdBeanEditor extends PropertyEditorSupport {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/XMLEncoder/6329581/Test6329581.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,75 @@
+/*
+ * 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 6329581
+ * @summary Tests encoding of a class with custom ClassLoader
+ * @author Sergey Malenkov
+ */
+
+import java.beans.ExceptionListener;
+import java.beans.XMLDecoder;
+import java.beans.XMLEncoder;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+public class Test6329581 implements ExceptionListener {
+
+ public static void main(String[] args) throws Exception {
+ ExceptionListener listener = new Test6329581();
+ // write bean to byte array
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ XMLEncoder encoder = new XMLEncoder(out);
+ encoder.setExceptionListener(listener);
+ encoder.writeObject(getClassLoader("beans.jar").loadClass("test.Bean").newInstance());
+ encoder.close();
+ // read bean from byte array
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ XMLDecoder decoder = new XMLDecoder(in, null, listener, getClassLoader("beans.jar"));
+ Object object = decoder.readObject();
+ decoder.close();
+
+ if (!object.getClass().getClassLoader().getClass().equals(URLClassLoader.class)) {
+ throw new Error("bean is loaded with unexpected class loader");
+ }
+ }
+
+ private static ClassLoader getClassLoader(String name) throws Exception {
+ StringBuilder sb = new StringBuilder(256);
+ sb.append("file:");
+ sb.append(System.getProperty("test.src", "."));
+ sb.append(File.separatorChar);
+ sb.append(name);
+
+ URL[] url = { new URL(sb.toString()) };
+ return new URLClassLoader(url);
+ }
+
+ public void exceptionThrown(Exception exception) {
+ throw new Error("unexpected exception", exception);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/XMLEncoder/6380849/Bean.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,2 @@
+public class Bean {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/XMLEncoder/6380849/BeanPersistenceDelegate.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,5 @@
+import java.beans.DefaultPersistenceDelegate;
+
+public class BeanPersistenceDelegate
+ extends DefaultPersistenceDelegate {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/beans/XMLEncoder/6380849/TestPersistenceDelegate.java Tue Jul 21 23:23:57 2009 -0700
@@ -0,0 +1,60 @@
+/**
+ * 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 6380849
+ * @summary Tests PersistenceDelegate finder
+ * @author Sergey Malenkov
+ */
+
+import java.beans.PersistenceDelegate;
+import java.beans.XMLEncoder;
+import java.beans.DefaultPersistenceDelegate;
+
+public class TestPersistenceDelegate {
+
+ private static final XMLEncoder ENCODER = new XMLEncoder(System.out);
+
+ public static void main(String[] args) throws InterruptedException {
+ Class<?> type = TestPersistenceDelegate.class;
+ test(type, DefaultPersistenceDelegate.class);
+ ENCODER.setPersistenceDelegate(type, new BeanPersistenceDelegate());
+ test(type, BeanPersistenceDelegate.class);
+ ENCODER.setPersistenceDelegate(type, null);
+ test(type, DefaultPersistenceDelegate.class);
+ // the following tests fails on previous build
+ test(Bean.class, BeanPersistenceDelegate.class);
+ test(BeanPersistenceDelegate.class, BeanPersistenceDelegate.class);
+ }
+
+ private static void test(Class<?> type, Class<? extends PersistenceDelegate> expected) {
+ PersistenceDelegate actual = ENCODER.getPersistenceDelegate(type);
+ if ((actual == null) && (expected != null)) {
+ throw new Error("expected delegate is not found");
+ }
+ if ((actual != null) && !actual.getClass().equals(expected)) {
+ throw new Error("found unexpected delegate");
+ }
+ }
+}