[kaffe] CVS kaffe (robilad): Resynced with GNU classpath: serialization fix
Kaffe CVS
cvs-commits at kaffe.org
Mon Jul 4 08:49:26 PDT 2005
PatchSet 6696
Date: 2005/07/04 15:37:32
Author: robilad
Branch: HEAD
Tag: (none)
Log:
Resynced with GNU classpath: serialization fix
2005-07-04 Dalibor Topic <robilad at kaffe.org>
Resynced with GNU Classpath.
2005-07-03 Daniel Bonniot <bonniot at users.sf.net>
* java/io/ObjectStreamClass.java (inSamePackage): New private method.
(findAccessibleMethod): Likewise.
(cacheMethods): Lookup readResolve and writeReplace using the new
findAccessibleMethod().
Members:
ChangeLog:1.4220->1.4221
libraries/javalib/java/io/ObjectStreamClass.java:1.31->1.32
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4220 kaffe/ChangeLog:1.4221
--- kaffe/ChangeLog:1.4220 Mon Jul 4 15:29:52 2005
+++ kaffe/ChangeLog Mon Jul 4 15:37:32 2005
@@ -2,6 +2,17 @@
Resynced with GNU Classpath.
+ 2005-07-03 Daniel Bonniot <bonniot at users.sf.net>
+
+ * java/io/ObjectStreamClass.java (inSamePackage): New private method.
+ (findAccessibleMethod): Likewise.
+ (cacheMethods): Lookup readResolve and writeReplace using the new
+ findAccessibleMethod().
+
+2005-07-04 Dalibor Topic <robilad at kaffe.org>
+
+ Resynced with GNU Classpath.
+
2005-07-03 Audrius Meskauskas, <AudriusA at Bioinformatics.org>
* org/omg/PortableServer/ServantLocatorPackage/package.html,
Index: kaffe/libraries/javalib/java/io/ObjectStreamClass.java
diff -u kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.31 kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.32
--- kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.31 Mon Jul 4 00:06:37 2005
+++ kaffe/libraries/javalib/java/io/ObjectStreamClass.java Mon Jul 4 15:37:36 2005
@@ -486,19 +486,65 @@
return null;
}
+ private static boolean inSamePackage(Class c1, Class c2)
+ {
+ String name1 = c1.getName();
+ String name2 = c2.getName();
+
+ int id1 = name1.lastIndexOf('.');
+ int id2 = name2.lastIndexOf('.');
+
+ // Handle the default package
+ if (id1 == -1 || id2 == -1)
+ return id1 == id2;
+
+ String package1 = name1.substring(0, id1);
+ String package2 = name2.substring(0, id2);
+
+ return package1.equals(package2);
+ }
+
+ final static Class[] noArgs = new Class[0];
+
+ private static Method findAccessibleMethod(String name, Class from)
+ {
+ for (Class c = from; c != null; c = c.getSuperclass())
+ {
+ try
+ {
+ Method res = c.getDeclaredMethod(name, noArgs);
+ int mods = res.getModifiers();
+
+ if (c != from
+ && (Modifier.isPrivate(mods)
+ || ! Modifier.isPublic(mods) && ! inSamePackage(c, from)))
+ continue;
+
+ return res;
+ }
+ catch (NoSuchMethodException e)
+ {
+ }
+ }
+
+ return null;
+ }
+
private void cacheMethods()
{
Method[] methods = forClass().getDeclaredMethods();
+
readObjectMethod = findMethod(methods, "readObject",
new Class[] { ObjectInputStream.class },
Void.TYPE, true);
writeObjectMethod = findMethod(methods, "writeObject",
new Class[] { ObjectOutputStream.class },
Void.TYPE, true);
- readResolveMethod = findMethod(methods, "readResolve",
- new Class[0], Object.class, false);
- writeReplaceMethod = findMethod(methods, "writeReplace",
- new Class[0], Object.class, false);
+
+ // readResolve and writeReplace can be in parent classes, as long as they
+ // are accessible from this class.
+ readResolveMethod = findAccessibleMethod("readResolve", forClass());
+ writeReplaceMethod = findAccessibleMethod("writeReplace", forClass());
}
private ObjectStreamClass(Class cl)
More information about the kaffe
mailing list