+2000-11-16 Warren Levy <warrenl@cygnus.com>
+
+ * java/beans/PropertyChangeSupport.java (propertyListeners): Made
+ transient.
+ (listeners): Made transient.
+ (source): Renamed from 'bean'.
+ (children): New field for serialization.
+ (propertyChangeSupportSerializedDataVersion): Ditto.
+ (serialVersionUID): Ditto.
+ (writeObject): New serialization method.
+ (readObject): New serialization method.
+ * java/beans/VetoableChangeSupport.java (propertyListeners): Made
+ transient.
+ (listeners): Made transient.
+ (source): Renamed from 'bean'.
+ (children): New field for serialization.
+ (vetoableChangeSupportSerializedDataVersion): Ditto.
+ (serialVersionUID): Ditto.
+ (writeObject): New serialization method.
+ (readObject): New serialization method.
+ * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Fixed assert
+ to allow constructor to have a return type (i.e. the class that the
+ constructor constructs).
+
2000-11-14 Tom Tromey <tromey@cygnus.com>
* Makefile.in: Rebuilt.
/* java.beans.PropertyChangeSupport
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU Classpath.
package java.beans;
import java.util.Hashtable;
import java.util.Vector;
+import java.util.Enumeration;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+import java.io.Serializable;
/**
** PropertyChangeSupport makes it easy to fire property
**/
public class PropertyChangeSupport implements java.io.Serializable {
- Hashtable propertyListeners = new Hashtable();
- Vector listeners = new Vector();
- Object bean;
+ transient Hashtable propertyListeners = new Hashtable();
+ transient Vector listeners = new Vector();
+ Hashtable children;
+ Object source;
+ int propertyChangeSupportSerializedDataVersion = 2;
+ private static final long serialVersionUID = 6401253773779951803L;
+
+ /**
+ * Saves the state of the object to the stream. */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ children = propertyListeners.isEmpty() ? null : propertyListeners;
+ stream.defaultWriteObject();
+ for (Enumeration e = listeners.elements(); e.hasMoreElements(); ) {
+ PropertyChangeListener l = (PropertyChangeListener)e.nextElement();
+ if (l instanceof Serializable)
+ stream.writeObject(l);
+ }
+ stream.writeObject(null);
+ }
+
+ /**
+ * Reads the object back from stream (deserialization).
+ */
+ private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ propertyListeners = (children == null) ? new Hashtable() : children;
+ PropertyChangeListener l;
+ while ((l = (PropertyChangeListener)stream.readObject()) != null) {
+ addPropertyChangeListener(l);
+ }
+ // FIXME: XXX: There is no spec for JDK 1.1 serialization
+ // so it is unclear what to do if the value of
+ // propertyChangeSupportSerializedDataVersion is 1.
+ }
/** Create PropertyChangeSupport to work with a specific
** source bean.
- ** @param bean the source bean to use.
+ ** @param source the source bean to use.
**/
- public PropertyChangeSupport(Object bean) {
- this.bean = bean;
+ public PropertyChangeSupport(Object source) {
+ this.source = source;
}
/** Adds a PropertyChangeListener to the list of listeners.
** @param newVal the new value.
**/
public void firePropertyChange(String propertyName, Object oldVal, Object newVal) {
- firePropertyChange(new PropertyChangeEvent(bean,propertyName,oldVal,newVal));
+ firePropertyChange(new PropertyChangeEvent(source,propertyName,oldVal,newVal));
}
/** Fire a PropertyChangeEvent containing the old and new values of the property to all the listeners.
** @param newVal the new value.
**/
public void firePropertyChange(String propertyName, boolean oldVal, boolean newVal) {
- firePropertyChange(new PropertyChangeEvent(bean, propertyName, new Boolean(oldVal), new Boolean(newVal)));
+ firePropertyChange(new PropertyChangeEvent(source, propertyName, new Boolean(oldVal), new Boolean(newVal)));
}
/** Fire a PropertyChangeEvent containing the old and new values of the property to all the listeners.
** @param newVal the new value.
**/
public void firePropertyChange(String propertyName, int oldVal, int newVal) {
- firePropertyChange(new PropertyChangeEvent(bean, propertyName, new Integer(oldVal), new Integer(newVal)));
+ firePropertyChange(new PropertyChangeEvent(source, propertyName, new Integer(oldVal), new Integer(newVal)));
}
/** Tell whether the specified property is being listened on or not.
/*
* java.beans.VetoableChangeSupport: part of the Java Class Libraries project.
- * Copyright (C) 1998 Free Software Foundation
+ * Copyright (C) 1998, 2000 Free Software Foundation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
package java.beans;
import java.util.Hashtable;
import java.util.Vector;
+import java.util.Enumeration;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+import java.io.Serializable;
/**
** VetoableChangeSupport makes it easy to fire vetoable
**/
public class VetoableChangeSupport implements java.io.Serializable {
- Hashtable propertyListeners = new Hashtable();
- Vector listeners = new Vector();
- Object bean;
+ transient Hashtable propertyListeners = new Hashtable();
+ transient Vector listeners = new Vector();
+ Hashtable children;
+ Object source;
+ int vetoableChangeSupportSerializedDataVersion = 2;
+ private static final long serialVersionUID = -5090210921595982017L;
+
+ /**
+ * Saves the state of the object to the stream. */
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ children = propertyListeners.isEmpty() ? null : propertyListeners;
+ stream.defaultWriteObject();
+ for (Enumeration e = listeners.elements(); e.hasMoreElements(); ) {
+ VetoableChangeListener l = (VetoableChangeListener)e.nextElement();
+ if (l instanceof Serializable)
+ stream.writeObject(l);
+ }
+ stream.writeObject(null);
+ }
+
+ /**
+ * Reads the object back from stream (deserialization).
+ */
+ private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ propertyListeners = (children == null) ? new Hashtable() : children;
+ VetoableChangeListener l;
+ while ((l = (VetoableChangeListener)stream.readObject()) != null) {
+ addVetoableChangeListener(l);
+ }
+ // FIXME: XXX: There is no spec for JDK 1.1 serialization
+ // so it is unclear what to do if the value of
+ // vetoableChangeSupportSerializedDataVersion is 1.
+ }
+
/** Create VetoableChangeSupport to work with a specific
** source bean.
- ** @param bean the source bean to use.
+ ** @param source the source bean to use.
**/
- public VetoableChangeSupport(Object bean) {
- this.bean = bean;
+ public VetoableChangeSupport(Object source) {
+ this.source = source;
}
/** Adds a VetoableChangeListener to the list of listeners.
** @exception PropertyVetoException if the change is vetoed.
**/
public void fireVetoableChange(String propertyName, Object oldVal, Object newVal) throws PropertyVetoException {
- fireVetoableChange(new PropertyChangeEvent(bean,propertyName,oldVal,newVal));
+ fireVetoableChange(new PropertyChangeEvent(source,propertyName,oldVal,newVal));
}
/** Fire a VetoableChangeEvent containing the old and new values of the property to all the listeners.
** @exception PropertyVetoException if the change is vetoed.
**/
public void fireVetoableChange(String propertyName, boolean oldVal, boolean newVal) throws PropertyVetoException {
- fireVetoableChange(new PropertyChangeEvent(bean,propertyName,new Boolean(oldVal),new Boolean(newVal)));
+ fireVetoableChange(new PropertyChangeEvent(source,propertyName,new Boolean(oldVal),new Boolean(newVal)));
}
/** Fire a VetoableChangeEvent containing the old and new values of the property to all the listeners.
** @exception PropertyVetoException if the change is vetoed.
**/
public void fireVetoableChange(String propertyName, int oldVal, int newVal) throws PropertyVetoException {
- fireVetoableChange(new PropertyChangeEvent(bean,propertyName,new Integer(oldVal),new Integer(newVal)));
+ fireVetoableChange(new PropertyChangeEvent(source,propertyName,new Integer(oldVal),new Integer(newVal)));
}
jvalue *result)
{
JvAssert (! is_constructor || ! obj);
- JvAssert (! is_constructor || ! return_type);
+ JvAssert (! is_constructor || return_type);
// See whether call needs an object as the first argument. A
// constructor does need a `this' argument, but it is one we create.