Index: ChangeLog =================================================================== RCS file: /cvsroot/classpath/classpath/ChangeLog,v retrieving revision 1.2386.2.59 diff -u -3 -p -u -r1.2386.2.59 ChangeLog --- ChangeLog 18 Jan 2005 11:38:27 -0000 1.2386.2.59 +++ ChangeLog 19 Jan 2005 02:09:00 -0000 @@ -1,3 +1,20 @@ +2005-01-18 Mark Wielaard + + Fixes bug #11618. + * java/io/ObjectInputStream.java (readClassDescriptor): Handle classes + without a super class and us ObjectStreamClass.lookupForClassObject(). + (resolveClass): Check for primitive types. + (lookupClass): Return null when argument is null. + +2005-01-18 David Gilbert + + * javax/swing/DefaultListModel.java + (add): fire correct event, + (addElement): corrected interval indices in event, + (clear): corrected upper bound for interval, only fire event if + list is not empty, + (setSize): fire appropriate event. + 2005-01-18 Jeroen Frijters * java/io/Externalizable.java, Index: java/io/ObjectInputStream.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/io/ObjectInputStream.java,v retrieving revision 1.43.2.5 diff -u -3 -p -u -r1.43.2.5 ObjectInputStream.java --- java/io/ObjectInputStream.java 16 Jan 2005 15:15:11 -0000 1.43.2.5 +++ java/io/ObjectInputStream.java 19 Jan 2005 02:09:01 -0000 @@ -1,5 +1,6 @@ /* ObjectInputStream.java -- Class used to read serialized objects - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 + Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -543,8 +544,14 @@ public class ObjectInputStream extends I // find the first non-serializable, non-abstract // class in clazz's inheritance hierarchy Class first_nonserial = clazz.getSuperclass(); - while (Serializable.class.isAssignableFrom(first_nonserial) - || Modifier.isAbstract(first_nonserial.getModifiers())) + // Maybe it is a primitive class, those don't have a super class, + // or Object itself. Otherwise we can keep getting the superclass + // till we hit the Object class, or some other non-serializable class. + if (first_nonserial == null) + first_nonserial = clazz; + else + while (Serializable.class.isAssignableFrom(first_nonserial) + || Modifier.isAbstract(first_nonserial.getModifiers())) first_nonserial = first_nonserial.getSuperclass(); final Class local_constructor_class = first_nonserial; @@ -574,7 +581,7 @@ public class ObjectInputStream extends I osc.realClassIsExternalizable = Externalizable.class.isAssignableFrom(clazz); ObjectStreamField[] stream_fields = osc.fields; - ObjectStreamField[] real_fields = ObjectStreamClass.lookup(clazz).fields; + ObjectStreamField[] real_fields = ObjectStreamClass.lookupForClassObject(clazz).fields; ObjectStreamField[] fieldmapping = new ObjectStreamField[2 * Math.max(stream_fields.length, real_fields.length)]; int stream_idx = 0; @@ -740,7 +747,37 @@ public class ObjectInputStream extends I protected Class resolveClass(ObjectStreamClass osc) throws ClassNotFoundException, IOException { - return Class.forName(osc.getName(), true, currentLoader()); + try + { + return Class.forName(osc.getName(), true, currentLoader()); + } + catch (ClassNotFoundException cnfe) + { + // Maybe it was an primitive class? + String name = osc.getName(); + if (name.equals("void")) + return Void.TYPE; + if (name.equals("boolean")) + return Boolean.TYPE; + if (name.equals("byte")) + return Byte.TYPE; + if (name.equals("short")) + return Short.TYPE; + if (name.equals("char")) + return Character.TYPE; + if (name.equals("int")) + return Integer.TYPE; + if (name.equals("long")) + return Long.TYPE; + if (name.equals("float")) + return Float.TYPE; + if (name.equals("double")) + return Double.TYPE; + if (name.equals("void")) + return Void.TYPE; + + throw cnfe; + } } /** @@ -773,8 +810,10 @@ public class ObjectInputStream extends I */ private ObjectStreamClass lookupClass(Class clazz) { - ObjectStreamClass oclazz; + if (clazz == null) + return null; + ObjectStreamClass oclazz; oclazz = (ObjectStreamClass)classLookupTable.get(clazz); if (oclazz == null) return ObjectStreamClass.lookup(clazz); Index: javax/swing/DefaultListModel.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/DefaultListModel.java,v retrieving revision 1.8 diff -u -3 -p -u -r1.8 DefaultListModel.java --- javax/swing/DefaultListModel.java 1 May 2004 17:40:10 -0000 1.8 +++ javax/swing/DefaultListModel.java 19 Jan 2005 02:09:01 -0000 @@ -1,5 +1,5 @@ /* DefaultListModel.java -- - Copyright (C) 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -198,7 +198,7 @@ public class DefaultListModel extends Ab public void add(int index, Object element) { elements.add(index, element); - fireContentsChanged(this, index, index); + fireIntervalAdded(this, index, index); } /** @@ -209,8 +209,9 @@ public class DefaultListModel extends Ab */ public void addElement(Object element) { + int s = elements.size(); elements.add(element); - fireIntervalAdded(this, elements.size(), elements.size()); + fireIntervalAdded(this, s, s); } /** @@ -266,8 +267,12 @@ public class DefaultListModel extends Ab */ public void clear() { - elements.clear(); - fireIntervalRemoved(this, 0, elements.size()); + int s = elements.size(); + if (s > 0) + { + elements.clear(); + fireIntervalRemoved(this, 0, s - 1); + } } /** @@ -341,7 +346,16 @@ public class DefaultListModel extends Ab */ public void setSize(int size) { + int oldSize = elements.size(); elements.setSize(size); + if (oldSize < size) + { + fireIntervalAdded(this, oldSize, size - 1); + } + else if (oldSize > size) + { + this.fireIntervalRemoved(this, size, oldSize - 1); + } } /**