/[classpath]/classpath/java/io/ObjectInputStream.java
ViewVC logotype

Diff of /classpath/java/io/ObjectInputStream.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.50 by jfrijters, Tue Dec 7 08:49:46 2004 UTC revision 1.51 by mark, Tue Jan 18 22:57:45 2005 UTC
# Line 1  Line 1 
1  /* ObjectInputStream.java -- Class used to read serialized objects  /* ObjectInputStream.java -- Class used to read serialized objects
2     Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.     Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
3       Free Software Foundation, Inc.
4    
5  This file is part of GNU Classpath.  This file is part of GNU Classpath.
6    
# Line 536  public class ObjectInputStream extends I Line 537  public class ObjectInputStream extends I
537      // find the first non-serializable, non-abstract      // find the first non-serializable, non-abstract
538      // class in clazz's inheritance hierarchy      // class in clazz's inheritance hierarchy
539      Class first_nonserial = clazz.getSuperclass();      Class first_nonserial = clazz.getSuperclass();
540      while (Serializable.class.isAssignableFrom(first_nonserial)      // Maybe it is a primitive class, those don't have a super class,
541          || Modifier.isAbstract(first_nonserial.getModifiers()))      // or Object itself.  Otherwise we can keep getting the superclass
542        // till we hit the Object class, or some other non-serializable class.
543        if (first_nonserial == null)
544          first_nonserial = clazz;
545        else
546          while (Serializable.class.isAssignableFrom(first_nonserial)
547                 || Modifier.isAbstract(first_nonserial.getModifiers()))
548          first_nonserial = first_nonserial.getSuperclass();          first_nonserial = first_nonserial.getSuperclass();
549    
550      final Class local_constructor_class = first_nonserial;      final Class local_constructor_class = first_nonserial;
# Line 567  public class ObjectInputStream extends I Line 574  public class ObjectInputStream extends I
574      osc.realClassIsExternalizable = Externalizable.class.isAssignableFrom(clazz);      osc.realClassIsExternalizable = Externalizable.class.isAssignableFrom(clazz);
575    
576      ObjectStreamField[] stream_fields = osc.fields;      ObjectStreamField[] stream_fields = osc.fields;
577      ObjectStreamField[] real_fields = ObjectStreamClass.lookup(clazz).fields;      ObjectStreamField[] real_fields = ObjectStreamClass.lookupForClassObject(clazz).fields;
578      ObjectStreamField[] fieldmapping = new ObjectStreamField[2 * Math.max(stream_fields.length, real_fields.length)];      ObjectStreamField[] fieldmapping = new ObjectStreamField[2 * Math.max(stream_fields.length, real_fields.length)];
579    
580      int stream_idx = 0;      int stream_idx = 0;
# Line 733  public class ObjectInputStream extends I Line 740  public class ObjectInputStream extends I
740    protected Class resolveClass(ObjectStreamClass osc)    protected Class resolveClass(ObjectStreamClass osc)
741      throws ClassNotFoundException, IOException      throws ClassNotFoundException, IOException
742    {    {
743      return Class.forName(osc.getName(), true, currentLoader());      try
744          {
745            return Class.forName(osc.getName(), true, currentLoader());
746          }
747        catch (ClassNotFoundException cnfe)
748          {
749            // Maybe it was an primitive class?
750            String name = osc.getName();
751            if (name.equals("void"))
752              return Void.TYPE;
753            if (name.equals("boolean"))
754              return Boolean.TYPE;
755            if (name.equals("byte"))
756              return Byte.TYPE;
757            if (name.equals("short"))
758              return Short.TYPE;
759            if (name.equals("char"))
760              return Character.TYPE;
761            if (name.equals("int"))
762              return Integer.TYPE;
763            if (name.equals("long"))
764              return Long.TYPE;
765            if (name.equals("float"))
766              return Float.TYPE;
767            if (name.equals("double"))
768              return Double.TYPE;
769            if (name.equals("void"))
770              return Void.TYPE;
771    
772            throw cnfe;
773          }
774    }    }
775    
776    /**    /**
# Line 766  public class ObjectInputStream extends I Line 803  public class ObjectInputStream extends I
803     */     */
804    private ObjectStreamClass lookupClass(Class clazz)    private ObjectStreamClass lookupClass(Class clazz)
805    {    {
806      ObjectStreamClass oclazz;      if (clazz == null)
807          return null;
808    
809        ObjectStreamClass oclazz;
810      oclazz = (ObjectStreamClass)classLookupTable.get(clazz);      oclazz = (ObjectStreamClass)classLookupTable.get(clazz);
811      if (oclazz == null)      if (oclazz == null)
812        return ObjectStreamClass.lookup(clazz);        return ObjectStreamClass.lookup(clazz);

Legend:
Removed from v.1.50  
changed lines
  Added in v.1.51

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26