Merge
This commit is contained in:
commit
cacd580a84
@ -374,7 +374,7 @@ public final class AWTUtilities {
|
|||||||
"The window argument should not be null.");
|
"The window argument should not be null.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return AWTAccessor.getWindowAccessor().isOpaque(window);
|
return window.isOpaque();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
102
jdk/src/share/classes/com/sun/beans/finder/BeanInfoFinder.java
Normal file
102
jdk/src/share/classes/com/sun/beans/finder/BeanInfoFinder.java
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
111
jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java
Normal file
111
jdk/src/share/classes/com/sun/beans/finder/InstanceFinder.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -2370,12 +2370,10 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
|||||||
* rectangular region. A non-opaque component paints only some of
|
* rectangular region. A non-opaque component paints only some of
|
||||||
* its pixels, allowing the pixels underneath it to "show through".
|
* its pixels, allowing the pixels underneath it to "show through".
|
||||||
* A component that does not fully paint its pixels therefore
|
* A component that does not fully paint its pixels therefore
|
||||||
* provides a degree of transparency. Only lightweight
|
* provides a degree of transparency.
|
||||||
* components can be transparent.
|
|
||||||
* <p>
|
* <p>
|
||||||
* Subclasses that guarantee to always completely paint their
|
* Subclasses that guarantee to always completely paint their
|
||||||
* contents should override this method and return true. All
|
* contents should override this method and return true.
|
||||||
* of the "heavyweight" AWT components are opaque.
|
|
||||||
*
|
*
|
||||||
* @return true if this component is completely opaque
|
* @return true if this component is completely opaque
|
||||||
* @see #isLightweight
|
* @see #isLightweight
|
||||||
|
@ -281,8 +281,8 @@ public abstract class GraphicsDevice {
|
|||||||
if (w.getOpacity() < 1.0f) {
|
if (w.getOpacity() < 1.0f) {
|
||||||
w.setOpacity(1.0f);
|
w.setOpacity(1.0f);
|
||||||
}
|
}
|
||||||
|
if (!w.isOpaque()) {
|
||||||
Color bgColor = w.getBackground();
|
Color bgColor = w.getBackground();
|
||||||
if ((bgColor != null) && (bgColor.getAlpha() < 255)) {
|
|
||||||
bgColor = new Color(bgColor.getRed(), bgColor.getGreen(),
|
bgColor = new Color(bgColor.getRed(), bgColor.getGreen(),
|
||||||
bgColor.getBlue(), 255);
|
bgColor.getBlue(), 255);
|
||||||
w.setBackground(bgColor);
|
w.setBackground(bgColor);
|
||||||
|
@ -70,7 +70,7 @@ public class Robot {
|
|||||||
private RobotPeer peer;
|
private RobotPeer peer;
|
||||||
private boolean isAutoWaitForIdle = false;
|
private boolean isAutoWaitForIdle = false;
|
||||||
private int autoDelay = 0;
|
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()
|
// location of robot's GC, used in mouseMove(), getPixelColor() and captureScreenImage()
|
||||||
private Point gdLoc;
|
private Point gdLoc;
|
||||||
@ -95,23 +95,6 @@ public class Robot {
|
|||||||
}
|
}
|
||||||
init(GraphicsEnvironment.getLocalGraphicsEnvironment()
|
init(GraphicsEnvironment.getLocalGraphicsEnvironment()
|
||||||
.getDefaultScreenDevice());
|
.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 @@ public class Robot {
|
|||||||
disposer = new RobotDisposer(peer);
|
disposer = new RobotDisposer(peer);
|
||||||
sun.java2d.Disposer.addRecord(anchor, disposer);
|
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 */
|
/* determine if the security policy allows Robot's to be created */
|
||||||
|
@ -143,6 +143,9 @@ public class TrayIcon {
|
|||||||
*/
|
*/
|
||||||
public TrayIcon(Image image) {
|
public TrayIcon(Image image) {
|
||||||
this();
|
this();
|
||||||
|
if (image == null) {
|
||||||
|
throw new IllegalArgumentException("creating TrayIcon with null Image");
|
||||||
|
}
|
||||||
setImage(image);
|
setImage(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3521,6 +3521,7 @@ public class Window extends Container implements Accessible {
|
|||||||
* @return this component's background color
|
* @return this component's background color
|
||||||
*
|
*
|
||||||
* @see Window#setBackground
|
* @see Window#setBackground
|
||||||
|
* @see Window#isOpaque
|
||||||
* @see GraphicsDevice.WindowTranslucency
|
* @see GraphicsDevice.WindowTranslucency
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -3583,6 +3584,7 @@ public class Window extends Container implements Accessible {
|
|||||||
* PERPIXEL_TRANSLUCENT} translucency is not supported
|
* PERPIXEL_TRANSLUCENT} translucency is not supported
|
||||||
*
|
*
|
||||||
* @see Window#getBackground
|
* @see Window#getBackground
|
||||||
|
* @see Window#isOpaque
|
||||||
* @see Window#setOpacity()
|
* @see Window#setOpacity()
|
||||||
* @see Window#setShape()
|
* @see Window#setShape()
|
||||||
* @see GraphicsDevice.WindowTranslucency
|
* @see GraphicsDevice.WindowTranslucency
|
||||||
@ -3597,7 +3599,7 @@ public class Window extends Container implements Accessible {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int oldAlpha = oldBg != null ? oldBg.getAlpha() : 255;
|
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
|
if ((oldAlpha == 255) && (alpha < 255)) { // non-opaque window
|
||||||
GraphicsConfiguration gc = getGraphicsConfiguration();
|
GraphicsConfiguration gc = getGraphicsConfiguration();
|
||||||
GraphicsDevice gd = gc.getDevice();
|
GraphicsDevice gd = gc.getDevice();
|
||||||
@ -3623,6 +3625,25 @@ public class Window extends Container implements Accessible {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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() {
|
private void updateWindow() {
|
||||||
synchronized (getTreeLock()) {
|
synchronized (getTreeLock()) {
|
||||||
WindowPeer peer = (WindowPeer)getPeer();
|
WindowPeer peer = (WindowPeer)getPeer();
|
||||||
@ -3639,12 +3660,11 @@ public class Window extends Container implements Accessible {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void paint(Graphics g) {
|
public void paint(Graphics g) {
|
||||||
Color bgColor = getBackground();
|
if (!isOpaque()) {
|
||||||
if ((bgColor != null) && (bgColor.getAlpha() < 255)) {
|
|
||||||
Graphics gg = g.create();
|
Graphics gg = g.create();
|
||||||
try {
|
try {
|
||||||
if (gg instanceof Graphics2D) {
|
if (gg instanceof Graphics2D) {
|
||||||
gg.setColor(bgColor);
|
gg.setColor(getBackground());
|
||||||
((Graphics2D)gg).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
|
((Graphics2D)gg).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
|
||||||
gg.fillRect(0, 0, getWidth(), getHeight());
|
gg.fillRect(0, 0, getWidth(), getHeight());
|
||||||
}
|
}
|
||||||
@ -3749,10 +3769,6 @@ public class Window extends Container implements Accessible {
|
|||||||
public void setShape(Window window, Shape shape) {
|
public void setShape(Window window, Shape shape) {
|
||||||
window.setShape(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) {
|
public void setOpaque(Window window, boolean opaque) {
|
||||||
Color bg = window.getBackground();
|
Color bg = window.getBackground();
|
||||||
if (bg == null) {
|
if (bg == null) {
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -24,7 +24,8 @@
|
|||||||
*/
|
*/
|
||||||
package java.beans;
|
package java.beans;
|
||||||
|
|
||||||
import java.util.Collections;
|
import com.sun.beans.finder.PersistenceDelegateFinder;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.IdentityHashMap;
|
import java.util.IdentityHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -45,8 +46,7 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public class Encoder {
|
public class Encoder {
|
||||||
private final Map<Class<?>, PersistenceDelegate> delegates
|
private final PersistenceDelegateFinder finder = new PersistenceDelegateFinder();
|
||||||
= Collections.synchronizedMap(new HashMap<Class<?>, PersistenceDelegate>());
|
|
||||||
private Map bindings = new IdentityHashMap();
|
private Map bindings = new IdentityHashMap();
|
||||||
private ExceptionListener exceptionListener;
|
private ExceptionListener exceptionListener;
|
||||||
boolean executeStatements = true;
|
boolean executeStatements = true;
|
||||||
@ -166,8 +166,13 @@ public class Encoder {
|
|||||||
* @see java.beans.BeanInfo#getBeanDescriptor
|
* @see java.beans.BeanInfo#getBeanDescriptor
|
||||||
*/
|
*/
|
||||||
public PersistenceDelegate getPersistenceDelegate(Class<?> type) {
|
public PersistenceDelegate getPersistenceDelegate(Class<?> type) {
|
||||||
PersistenceDelegate pd = this.delegates.get(type);
|
synchronized (this.finder) {
|
||||||
return (pd != null) ? pd : MetaData.getPersistenceDelegate(type);
|
PersistenceDelegate pd = this.finder.find(type);
|
||||||
|
if (pd != null) {
|
||||||
|
return pd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return MetaData.getPersistenceDelegate(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -184,10 +189,8 @@ public class Encoder {
|
|||||||
public void setPersistenceDelegate(Class<?> type,
|
public void setPersistenceDelegate(Class<?> type,
|
||||||
PersistenceDelegate persistenceDelegate)
|
PersistenceDelegate persistenceDelegate)
|
||||||
{
|
{
|
||||||
if (persistenceDelegate != null) {
|
synchronized (this.finder) {
|
||||||
this.delegates.put(type, persistenceDelegate);
|
this.finder.register(type, persistenceDelegate);
|
||||||
} else {
|
|
||||||
this.delegates.remove(type);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,12 +246,11 @@ public class Encoder {
|
|||||||
for (int i = 0; i < oldArgs.length; i++) {
|
for (int i = 0; i < oldArgs.length; i++) {
|
||||||
newArgs[i] = writeObject1(oldArgs[i]);
|
newArgs[i] = writeObject1(oldArgs[i]);
|
||||||
}
|
}
|
||||||
if (oldExp.getClass() == Statement.class) {
|
Statement newExp = Statement.class.equals(oldExp.getClass())
|
||||||
return new Statement(newTarget, oldExp.getMethodName(), newArgs);
|
? new Statement(newTarget, oldExp.getMethodName(), newArgs)
|
||||||
}
|
: new Expression(newTarget, oldExp.getMethodName(), newArgs);
|
||||||
else {
|
newExp.loader = oldExp.loader;
|
||||||
return new Expression(newTarget, oldExp.getMethodName(), newArgs);
|
return newExp;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -274,6 +274,11 @@ perty.
|
|||||||
}
|
}
|
||||||
indexedWriteMethod = Introspector.findMethod(cls, indexedWriteMethodName,
|
indexedWriteMethod = Introspector.findMethod(cls, indexedWriteMethodName,
|
||||||
2, (type == null) ? null : new Class[] { int.class, type });
|
2, (type == null) ? null : new Class[] { int.class, type });
|
||||||
|
if (indexedWriteMethod != null) {
|
||||||
|
if (!indexedWriteMethod.getReturnType().equals(void.class)) {
|
||||||
|
indexedWriteMethod = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
setIndexedWriteMethod0(indexedWriteMethod);
|
setIndexedWriteMethod0(indexedWriteMethod);
|
||||||
}
|
}
|
||||||
return indexedWriteMethod;
|
return indexedWriteMethod;
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
package java.beans;
|
package java.beans;
|
||||||
|
|
||||||
|
import com.sun.beans.finder.BeanInfoFinder;
|
||||||
import com.sun.beans.finder.ClassFinder;
|
import com.sun.beans.finder.ClassFinder;
|
||||||
|
|
||||||
import java.lang.ref.Reference;
|
import java.lang.ref.Reference;
|
||||||
@ -45,6 +46,8 @@ import java.util.EventListener;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import sun.awt.AppContext;
|
||||||
import sun.reflect.misc.ReflectUtil;
|
import sun.reflect.misc.ReflectUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -137,10 +140,6 @@ public class Introspector {
|
|||||||
// events maps from String names to EventSetDescriptors
|
// events maps from String names to EventSetDescriptors
|
||||||
private Map events;
|
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];
|
private final static EventSetDescriptor[] EMPTY_EVENTSETDESCRIPTORS = new EventSetDescriptor[0];
|
||||||
|
|
||||||
static final String ADD_PREFIX = "add";
|
static final String ADD_PREFIX = "add";
|
||||||
@ -149,7 +148,7 @@ public class Introspector {
|
|||||||
static final String SET_PREFIX = "set";
|
static final String SET_PREFIX = "set";
|
||||||
static final String IS_PREFIX = "is";
|
static final String IS_PREFIX = "is";
|
||||||
|
|
||||||
private static final String BEANINFO_SUFFIX = "BeanInfo";
|
private static final Object FINDER_KEY = new Object();
|
||||||
|
|
||||||
//======================================================================
|
//======================================================================
|
||||||
// Public methods
|
// Public methods
|
||||||
@ -309,13 +308,11 @@ public class Introspector {
|
|||||||
* Sun implementation initially sets to {"sun.beans.infos"}.
|
* Sun implementation initially sets to {"sun.beans.infos"}.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static synchronized String[] getBeanInfoSearchPath() {
|
public static String[] getBeanInfoSearchPath() {
|
||||||
// Return a copy of the searchPath.
|
BeanInfoFinder finder = getFinder();
|
||||||
String result[] = new String[searchPath.length];
|
synchronized (finder) {
|
||||||
for (int i = 0; i < searchPath.length; i++) {
|
return finder.getPackages();
|
||||||
result[i] = searchPath[i];
|
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -334,12 +331,15 @@ public class Introspector {
|
|||||||
* @see SecurityManager#checkPropertiesAccess
|
* @see SecurityManager#checkPropertiesAccess
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static synchronized void setBeanInfoSearchPath(String path[]) {
|
public static void setBeanInfoSearchPath(String[] path) {
|
||||||
SecurityManager sm = System.getSecurityManager();
|
SecurityManager sm = System.getSecurityManager();
|
||||||
if (sm != null) {
|
if (sm != null) {
|
||||||
sm.checkPropertiesAccess();
|
sm.checkPropertiesAccess();
|
||||||
}
|
}
|
||||||
searchPath = path;
|
BeanInfoFinder finder = getFinder();
|
||||||
|
synchronized (finder) {
|
||||||
|
finder.setPackages(path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -447,67 +447,14 @@ public class Introspector {
|
|||||||
* then it checks to see if the class is its own BeanInfo. Finally,
|
* then it checks to see if the class is its own BeanInfo. Finally,
|
||||||
* the BeanInfo search path is prepended to the class and searched.
|
* 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.
|
* @return Instance of an explicit BeanInfo class or null if one isn't found.
|
||||||
*/
|
*/
|
||||||
private static synchronized BeanInfo findExplicitBeanInfo(Class beanClass) {
|
private static BeanInfo findExplicitBeanInfo(Class beanClass) {
|
||||||
String name = beanClass.getName() + BEANINFO_SUFFIX;
|
BeanInfoFinder finder = getFinder();
|
||||||
try {
|
synchronized (finder) {
|
||||||
return (java.beans.BeanInfo)instantiate(beanClass, name);
|
return finder.find(beanClass);
|
||||||
} 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
|
|
||||||
}
|
|
||||||
// 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 @@ public class Introspector {
|
|||||||
pd = new PropertyDescriptor(this.beanClass, name.substring(2), method, null);
|
pd = new PropertyDescriptor(this.beanClass, name.substring(2), method, null);
|
||||||
}
|
}
|
||||||
} else if (argCount == 1) {
|
} 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);
|
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
|
// Simple setter
|
||||||
pd = new PropertyDescriptor(this.beanClass, name.substring(3), null, method);
|
pd = new PropertyDescriptor(this.beanClass, name.substring(3), null, method);
|
||||||
if (throwsException(method, PropertyVetoException.class)) {
|
if (throwsException(method, PropertyVetoException.class)) {
|
||||||
@ -587,7 +534,7 @@ public class Introspector {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (argCount == 2) {
|
} 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);
|
pd = new IndexedPropertyDescriptor(this.beanClass, name.substring(3), null, null, null, method);
|
||||||
if (throwsException(method, PropertyVetoException.class)) {
|
if (throwsException(method, PropertyVetoException.class)) {
|
||||||
pd.setConstrained(true);
|
pd.setConstrained(true);
|
||||||
@ -1483,6 +1430,16 @@ public class Introspector {
|
|||||||
return false;
|
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.
|
* Try to create an instance of a named class.
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -219,7 +219,9 @@ class java_lang_Class_PersistenceDelegate extends PersistenceDelegate {
|
|||||||
return new Expression(oldInstance, String.class, "getClass", new Object[]{});
|
return new Expression(oldInstance, String.class, "getClass", new Object[]{});
|
||||||
}
|
}
|
||||||
else {
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -294,6 +294,11 @@ public class PropertyDescriptor extends FeatureDescriptor {
|
|||||||
|
|
||||||
writeMethod = Introspector.findMethod(cls, writeMethodName, 1,
|
writeMethod = Introspector.findMethod(cls, writeMethodName, 1,
|
||||||
(type == null) ? null : new Class[] { type });
|
(type == null) ? null : new Class[] { type });
|
||||||
|
if (writeMethod != null) {
|
||||||
|
if (!writeMethod.getReturnType().equals(void.class)) {
|
||||||
|
writeMethod = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
setWriteMethod(writeMethod);
|
setWriteMethod(writeMethod);
|
||||||
} catch (IntrospectionException ex) {
|
} catch (IntrospectionException ex) {
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -25,8 +25,8 @@
|
|||||||
|
|
||||||
package java.beans;
|
package java.beans;
|
||||||
|
|
||||||
import com.sun.beans.WeakCache;
|
import com.sun.beans.finder.PropertyEditorFinder;
|
||||||
import sun.beans.editors.*;
|
import sun.awt.AppContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The PropertyEditorManager can be used to locate a property editor for
|
* The PropertyEditorManager can be used to locate a property editor for
|
||||||
@ -55,6 +55,8 @@ import sun.beans.editors.*;
|
|||||||
|
|
||||||
public class PropertyEditorManager {
|
public class PropertyEditorManager {
|
||||||
|
|
||||||
|
private static final Object FINDER_KEY = new Object();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers an editor class to edit values of the given target class.
|
* Registers an editor class to edit values of the given target class.
|
||||||
* If the editor class is {@code null},
|
* If the editor class is {@code null},
|
||||||
@ -74,12 +76,15 @@ public class PropertyEditorManager {
|
|||||||
*
|
*
|
||||||
* @see SecurityManager#checkPropertiesAccess
|
* @see SecurityManager#checkPropertiesAccess
|
||||||
*/
|
*/
|
||||||
public static synchronized void registerEditor(Class<?> targetType, Class<?> editorClass) {
|
public static void registerEditor(Class<?> targetType, Class<?> editorClass) {
|
||||||
SecurityManager sm = System.getSecurityManager();
|
SecurityManager sm = System.getSecurityManager();
|
||||||
if (sm != null) {
|
if (sm != null) {
|
||||||
sm.checkPropertiesAccess();
|
sm.checkPropertiesAccess();
|
||||||
}
|
}
|
||||||
registry.put(targetType, editorClass);
|
PropertyEditorFinder finder = getFinder();
|
||||||
|
synchronized (finder) {
|
||||||
|
finder.register(targetType, editorClass);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -89,48 +94,13 @@ public class PropertyEditorManager {
|
|||||||
* @return An editor object for the given target class.
|
* @return An editor object for the given target class.
|
||||||
* The result is null if no suitable editor can be found.
|
* The result is null if no suitable editor can be found.
|
||||||
*/
|
*/
|
||||||
public static synchronized PropertyEditor findEditor(Class<?> targetType) {
|
public static PropertyEditor findEditor(Class<?> targetType) {
|
||||||
Class editorClass = registry.get(targetType);
|
PropertyEditorFinder finder = getFinder();
|
||||||
if (editorClass != null) {
|
synchronized (finder) {
|
||||||
try {
|
return finder.find(targetType);
|
||||||
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.
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the package names that will be searched for property editors.
|
* Gets the package names that will be searched for property editors.
|
||||||
*
|
*
|
||||||
@ -139,8 +109,11 @@ public class PropertyEditorManager {
|
|||||||
* <p> The default value for this array is implementation-dependent,
|
* <p> The default value for this array is implementation-dependent,
|
||||||
* e.g. Sun implementation initially sets to {"sun.beans.editors"}.
|
* e.g. Sun implementation initially sets to {"sun.beans.editors"}.
|
||||||
*/
|
*/
|
||||||
public static synchronized String[] getEditorSearchPath() {
|
public static String[] getEditorSearchPath() {
|
||||||
return searchPath.clone();
|
PropertyEditorFinder finder = getFinder();
|
||||||
|
synchronized (finder) {
|
||||||
|
return finder.getPackages();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -156,28 +129,25 @@ public class PropertyEditorManager {
|
|||||||
* of system properties.
|
* of system properties.
|
||||||
* @see SecurityManager#checkPropertiesAccess
|
* @see SecurityManager#checkPropertiesAccess
|
||||||
*/
|
*/
|
||||||
public static synchronized void setEditorSearchPath(String[] path) {
|
public static void setEditorSearchPath(String[] path) {
|
||||||
SecurityManager sm = System.getSecurityManager();
|
SecurityManager sm = System.getSecurityManager();
|
||||||
if (sm != null) {
|
if (sm != null) {
|
||||||
sm.checkPropertiesAccess();
|
sm.checkPropertiesAccess();
|
||||||
}
|
}
|
||||||
searchPath = (path != null)
|
PropertyEditorFinder finder = getFinder();
|
||||||
? path.clone()
|
synchronized (finder) {
|
||||||
: EMPTY;
|
finder.setPackages(path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String[] searchPath = { "sun.beans.editors" };
|
private static PropertyEditorFinder getFinder() {
|
||||||
private static final String[] EMPTY = {};
|
AppContext context = AppContext.getAppContext();
|
||||||
private static final WeakCache<Class<?>, Class<?>> registry;
|
Object object = context.get(FINDER_KEY);
|
||||||
|
if (object instanceof PropertyEditorFinder) {
|
||||||
static {
|
return (PropertyEditorFinder) object;
|
||||||
registry = new WeakCache<Class<?>, Class<?>>();
|
}
|
||||||
registry.put(Byte.TYPE, ByteEditor.class);
|
PropertyEditorFinder finder = new PropertyEditorFinder();
|
||||||
registry.put(Short.TYPE, ShortEditor.class);
|
context.put(FINDER_KEY, finder);
|
||||||
registry.put(Integer.TYPE, IntegerEditor.class);
|
return finder;
|
||||||
registry.put(Long.TYPE, LongEditor.class);
|
|
||||||
registry.put(Boolean.TYPE, BooleanEditor.class);
|
|
||||||
registry.put(Float.TYPE, FloatEditor.class);
|
|
||||||
registry.put(Double.TYPE, DoubleEditor.class);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,7 @@ public class Statement {
|
|||||||
Object target;
|
Object target;
|
||||||
String methodName;
|
String methodName;
|
||||||
Object[] arguments;
|
Object[] arguments;
|
||||||
|
ClassLoader loader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new <code>Statement</code> object with a <code>target</code>,
|
* Creates a new <code>Statement</code> object with a <code>target</code>,
|
||||||
@ -157,7 +158,7 @@ public class Statement {
|
|||||||
// of core from a class inside core. Special
|
// of core from a class inside core. Special
|
||||||
// case this method.
|
// case this method.
|
||||||
if (target == Class.class && methodName.equals("forName")) {
|
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];
|
Class[] argClasses = new Class[arguments.length];
|
||||||
for(int i = 0; i < arguments.length; i++) {
|
for(int i = 0; i < arguments.length; i++) {
|
||||||
|
@ -708,7 +708,7 @@ public class DefaultDesktopManager implements DesktopManager, java.io.Serializab
|
|||||||
// update window if it's non-opaque
|
// update window if it's non-opaque
|
||||||
Window topLevel = SwingUtilities.getWindowAncestor(f);
|
Window topLevel = SwingUtilities.getWindowAncestor(f);
|
||||||
Toolkit tk = Toolkit.getDefaultToolkit();
|
Toolkit tk = Toolkit.getDefaultToolkit();
|
||||||
if (!AWTAccessor.getWindowAccessor().isOpaque(topLevel) &&
|
if (!topLevel.isOpaque() &&
|
||||||
(tk instanceof SunToolkit) &&
|
(tk instanceof SunToolkit) &&
|
||||||
((SunToolkit)tk).needUpdateWindow())
|
((SunToolkit)tk).needUpdateWindow())
|
||||||
{
|
{
|
||||||
|
@ -732,7 +732,7 @@ public class RepaintManager
|
|||||||
(Window)dirty :
|
(Window)dirty :
|
||||||
SwingUtilities.getWindowAncestor(dirty);
|
SwingUtilities.getWindowAncestor(dirty);
|
||||||
if (window != null &&
|
if (window != null &&
|
||||||
!AWTAccessor.getWindowAccessor().isOpaque(window))
|
!window.isOpaque())
|
||||||
{
|
{
|
||||||
windows.add(window);
|
windows.add(window);
|
||||||
}
|
}
|
||||||
@ -996,7 +996,7 @@ public class RepaintManager
|
|||||||
|
|
||||||
// If the window is non-opaque, it's double-buffered at peer's level
|
// If the window is non-opaque, it's double-buffered at peer's level
|
||||||
Window w = (c instanceof Window) ? (Window)c : SwingUtilities.getWindowAncestor(c);
|
Window w = (c instanceof Window) ? (Window)c : SwingUtilities.getWindowAncestor(c);
|
||||||
if (!AWTAccessor.getWindowAccessor().isOpaque(w)) {
|
if (!w.isOpaque()) {
|
||||||
Toolkit tk = Toolkit.getDefaultToolkit();
|
Toolkit tk = Toolkit.getDefaultToolkit();
|
||||||
if ((tk instanceof SunToolkit) && (((SunToolkit)tk).needUpdateWindow())) {
|
if ((tk instanceof SunToolkit) && (((SunToolkit)tk).needUpdateWindow())) {
|
||||||
return null;
|
return null;
|
||||||
@ -1032,7 +1032,7 @@ public class RepaintManager
|
|||||||
|
|
||||||
// If the window is non-opaque, it's double-buffered at peer's level
|
// If the window is non-opaque, it's double-buffered at peer's level
|
||||||
Window w = (c instanceof Window) ? (Window)c : SwingUtilities.getWindowAncestor(c);
|
Window w = (c instanceof Window) ? (Window)c : SwingUtilities.getWindowAncestor(c);
|
||||||
if (!AWTAccessor.getWindowAccessor().isOpaque(w)) {
|
if (!w.isOpaque()) {
|
||||||
Toolkit tk = Toolkit.getDefaultToolkit();
|
Toolkit tk = Toolkit.getDefaultToolkit();
|
||||||
if ((tk instanceof SunToolkit) && (((SunToolkit)tk).needUpdateWindow())) {
|
if ((tk instanceof SunToolkit) && (((SunToolkit)tk).needUpdateWindow())) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -136,11 +136,6 @@ public final class AWTAccessor {
|
|||||||
* Set a shape to the given window.
|
* Set a shape to the given window.
|
||||||
*/
|
*/
|
||||||
void setShape(Window window, Shape shape);
|
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.
|
* Set the opaque preoperty to the given window.
|
||||||
*/
|
*/
|
||||||
|
@ -1985,8 +1985,7 @@ public abstract class SunToolkit extends Toolkit
|
|||||||
*/
|
*/
|
||||||
public static boolean isContainingTopLevelOpaque(Component c) {
|
public static boolean isContainingTopLevelOpaque(Component c) {
|
||||||
Window w = getContainingWindow(c);
|
Window w = getContainingWindow(c);
|
||||||
return w != null && ((Window)w).getBackground() != null &&
|
return w != null && w.isOpaque();
|
||||||
((Window)w).getBackground().getAlpha() == 255;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1000,11 +1000,8 @@ public class XBaseWindow {
|
|||||||
int buttonState = 0;
|
int buttonState = 0;
|
||||||
final int buttonsNumber = ((SunToolkit)(Toolkit.getDefaultToolkit())).getNumberOfButtons();
|
final int buttonsNumber = ((SunToolkit)(Toolkit.getDefaultToolkit())).getNumberOfButtons();
|
||||||
for (int i = 0; i<buttonsNumber; i++){
|
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()) {
|
switch (xev.get_type()) {
|
||||||
case XConstants.ButtonPress:
|
case XConstants.ButtonPress:
|
||||||
if (buttonState == 0) {
|
if (buttonState == 0) {
|
||||||
|
@ -194,8 +194,7 @@ public class WWindowPeer extends WPanelPeer implements WindowPeer,
|
|||||||
// default value of a boolean field is 'false', so set isOpaque to
|
// default value of a boolean field is 'false', so set isOpaque to
|
||||||
// true here explicitly
|
// true here explicitly
|
||||||
this.isOpaque = true;
|
this.isOpaque = true;
|
||||||
Color bgColor = ((Window)target).getBackground();
|
setOpaque(((Window)target).isOpaque());
|
||||||
setOpaque((bgColor == null) || (bgColor.getAlpha() == 255));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -981,6 +981,15 @@ JNIEXPORT jintArray JNICALL Java_sun_awt_shell_Win32ShellFolder2_getFileChooserB
|
|||||||
hBitmap = (HBITMAP)LoadImage(libShell32,
|
hBitmap = (HBITMAP)LoadImage(libShell32,
|
||||||
IS_WINVISTA ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216),
|
IS_WINVISTA ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216),
|
||||||
IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
|
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) {
|
if (hBitmap == NULL) {
|
||||||
libComCtl32 = LoadLibrary(TEXT("comctl32.dll"));
|
libComCtl32 = LoadLibrary(TEXT("comctl32.dll"));
|
||||||
|
71
jdk/test/java/awt/Robot/CtorTest/CtorTest.java
Normal file
71
jdk/test/java/awt/Robot/CtorTest/CtorTest.java
Normal file
@ -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();
|
||||||
|
}
|
||||||
|
}
|
53
jdk/test/java/awt/TrayIcon/CtorTest/CtorTest.java
Normal file
53
jdk/test/java/awt/TrayIcon/CtorTest/CtorTest.java
Normal file
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -65,6 +65,7 @@ public class OwnedWindowsLeak
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
garbage = null;
|
||||||
|
|
||||||
// Third, make sure all the weak references are null
|
// Third, make sure all the weak references are null
|
||||||
for (WeakReference<Window> ref : children)
|
for (WeakReference<Window> ref : children)
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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 ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
102
jdk/test/java/beans/Introspector/6380849/TestBeanInfo.java
Normal file
102
jdk/test/java/beans/Introspector/6380849/TestBeanInfo.java
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package beans;
|
||||||
|
|
||||||
|
public class FirstBean {
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package beans;
|
||||||
|
|
||||||
|
public class SecondBean {
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package beans;
|
||||||
|
|
||||||
|
public class ThirdBean {
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
88
jdk/test/java/beans/Introspector/Test6723447.java
Normal file
88
jdk/test/java/beans/Introspector/Test6723447.java
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
public class FirstBean {
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
import java.beans.PropertyEditorSupport;
|
||||||
|
|
||||||
|
public class FirstBeanEditor extends PropertyEditorSupport {
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
public class SecondBean {
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
public class ThirdBean {
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
package editors;
|
||||||
|
|
||||||
|
import java.beans.PropertyEditorSupport;
|
||||||
|
|
||||||
|
public class SecondBeanEditor extends PropertyEditorSupport {
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
package editors;
|
||||||
|
|
||||||
|
import java.beans.PropertyEditorSupport;
|
||||||
|
|
||||||
|
public class ThirdBeanEditor extends PropertyEditorSupport {
|
||||||
|
}
|
75
jdk/test/java/beans/XMLEncoder/6329581/Test6329581.java
Normal file
75
jdk/test/java/beans/XMLEncoder/6329581/Test6329581.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
2
jdk/test/java/beans/XMLEncoder/6380849/Bean.java
Normal file
2
jdk/test/java/beans/XMLEncoder/6380849/Bean.java
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
public class Bean {
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
import java.beans.DefaultPersistenceDelegate;
|
||||||
|
|
||||||
|
public class BeanPersistenceDelegate
|
||||||
|
extends DefaultPersistenceDelegate {
|
||||||
|
}
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user