diff options
author | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-16 16:30:03 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-16 16:30:03 +0000 |
commit | 8656214b84c3e789deffe8f7b465bd1c886b2a03 (patch) | |
tree | 0fda62a6586bb15fee6065d0863f3e58790cd0b5 /libjava/java/io/ObjectInputStream.java | |
parent | 0678ec6bf847a3faa46aa204332e221f70c10292 (diff) | |
download | gcc-8656214b84c3e789deffe8f7b465bd1c886b2a03.zip gcc-8656214b84c3e789deffe8f7b465bd1c886b2a03.tar.gz gcc-8656214b84c3e789deffe8f7b465bd1c886b2a03.tar.bz2 |
[multiple changes]
2005-11-15 Jeroen Frijters <jeroen@frijters.net>
* java/io/ObjectInputStream.java
(parseContent): Removed bogus println and fixed bug #24422.
2005-11-15 Mark Wielaard <mark@klomp.org>
* java/io/ObjectStreamClass.java: Removed, fully merged now.
* sources.am: Regenerated.
* Makefile.in: Regenerated.
2005-11-15 Wolfgang Baer <WBaer@gmx.de>
* java/io/ObjectInputStream.java
(processResolution): Pass Error, RuntimeException and
ObjectStreamException through to the caller.
(readObject): Documentation update.
From-SVN: r107088
Diffstat (limited to 'libjava/java/io/ObjectInputStream.java')
-rw-r--r-- | libjava/java/io/ObjectInputStream.java | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index 47fd078..54661a9 100644 --- a/libjava/java/io/ObjectInputStream.java +++ b/libjava/java/io/ObjectInputStream.java @@ -113,7 +113,10 @@ public class ObjectInputStream extends InputStream * <code>private void readObject (ObjectInputStream)</code>. * * If an exception is thrown from this method, the stream is left in - * an undefined state. + * an undefined state. This method can also throw Errors and + * RuntimeExceptions if caused by existing readResolve() user code. + * + * @return The object read from the underlying stream. * * @exception ClassNotFoundException The class that an object being * read in belongs to cannot be found. @@ -199,7 +202,6 @@ public class ObjectInputStream extends InputStream for (int i = 0; i < n_intf; i++) { intfs[i] = this.realInputStream.readUTF(); - System.out.println(intfs[i]); } boolean oldmode = setBlockDataMode(true); @@ -207,6 +209,21 @@ public class ObjectInputStream extends InputStream setBlockDataMode(oldmode); ObjectStreamClass osc = lookupClass(cl); + if (osc.firstNonSerializableParentConstructor == null) + { + osc.realClassIsSerializable = true; + osc.fields = osc.fieldMapping = new ObjectStreamField[0]; + try + { + osc.firstNonSerializableParentConstructor = + Object.class.getConstructor(new Class[0]); + } + catch (NoSuchMethodException x) + { + throw (InternalError) + new InternalError("Object ctor missing").initCause(x); + } + } assignNewHandle(osc); if (!is_consumed) @@ -1558,8 +1575,15 @@ public class ObjectInputStream extends InputStream catch (IllegalAccessException ignore) { } - catch (InvocationTargetException ignore) + catch (InvocationTargetException exception) { + Throwable cause = exception.getCause(); + if (cause instanceof ObjectStreamException) + throw (ObjectStreamException) cause; + else if (cause instanceof RuntimeException) + throw (RuntimeException) cause; + else if (cause instanceof Error) + throw (Error) cause; } } |