diff options
author | warrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-11-16 21:34:48 +0000 |
---|---|---|
committer | warrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-11-16 21:34:48 +0000 |
commit | d40d5ee920dd9b518ee2d882cb57e219203a3fac (patch) | |
tree | b895a710e76271b5a4f4860ebdd33f4b614eb558 /libjava/java/beans | |
parent | 907ba722395185009291c17810b6879458801959 (diff) | |
download | gcc-d40d5ee920dd9b518ee2d882cb57e219203a3fac.tar.gz |
* 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).
Serialization mods.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37506 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/beans')
-rw-r--r-- | libjava/java/beans/PropertyChangeSupport.java | 56 | ||||
-rw-r--r-- | libjava/java/beans/VetoableChangeSupport.java | 57 |
2 files changed, 93 insertions, 20 deletions
diff --git a/libjava/java/beans/PropertyChangeSupport.java b/libjava/java/beans/PropertyChangeSupport.java index 512c8edeb7d..4c3d3bc4515 100644 --- a/libjava/java/beans/PropertyChangeSupport.java +++ b/libjava/java/beans/PropertyChangeSupport.java @@ -1,5 +1,5 @@ /* 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. @@ -28,6 +28,11 @@ executable file might be covered by the GNU General Public License. */ 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 @@ -39,16 +44,47 @@ import java.util.Vector; **/ 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. @@ -166,7 +202,7 @@ public class PropertyChangeSupport implements java.io.Serializable { ** @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. @@ -176,7 +212,7 @@ public class PropertyChangeSupport implements java.io.Serializable { ** @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. @@ -186,7 +222,7 @@ public class PropertyChangeSupport implements java.io.Serializable { ** @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. diff --git a/libjava/java/beans/VetoableChangeSupport.java b/libjava/java/beans/VetoableChangeSupport.java index 6d0ff0c0acb..a3e2bc63152 100644 --- a/libjava/java/beans/VetoableChangeSupport.java +++ b/libjava/java/beans/VetoableChangeSupport.java @@ -1,6 +1,6 @@ /* * 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 @@ -21,6 +21,11 @@ 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 @@ -33,16 +38,48 @@ import java.util.Vector; **/ 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. @@ -199,7 +236,7 @@ public class VetoableChangeSupport implements java.io.Serializable { ** @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. @@ -213,7 +250,7 @@ public class VetoableChangeSupport implements java.io.Serializable { ** @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. @@ -227,7 +264,7 @@ public class VetoableChangeSupport implements java.io.Serializable { ** @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))); } |