Check in missed file from last commit.

From-SVN: r95381
This commit is contained in:
Bryce McKinlay 2005-02-22 03:45:18 +00:00
parent ec88bf8bb7
commit fdc9b3a02b
1 changed files with 57 additions and 57 deletions

View File

@ -452,27 +452,33 @@ public class ObjectStreamClass implements Serializable
}
private Method findMethod(Method[] methods, String name, Class[] params,
Class returnType)
Class returnType, boolean mustBePrivate)
{
outer:
for(int i = 0; i < methods.length; i++)
for (int i = 0; i < methods.length; i++)
{
if(methods[i].getName().equals(name) &&
methods[i].getReturnType() == returnType)
final Method m = methods[i];
int mods = m.getModifiers();
if (Modifier.isStatic(mods)
|| (mustBePrivate && !Modifier.isPrivate(mods)))
{
continue;
}
if (m.getName().equals(name)
&& m.getReturnType() == returnType)
{
Class[] mp = methods[i].getParameterTypes();
if(mp.length == params.length)
Class[] mp = m.getParameterTypes();
if (mp.length == params.length)
{
for(int j = 0; j < mp.length; j++)
for (int j = 0; j < mp.length; j++)
{
if(mp[j] != params[j])
if (mp[j] != params[j])
{
continue outer;
}
}
final Method m = methods[i];
SetAccessibleAction setAccessible = new SetAccessibleAction(m);
AccessController.doPrivileged(setAccessible);
AccessController.doPrivileged(new SetAccessibleAction(m));
return m;
}
}
@ -485,9 +491,14 @@ outer:
Method[] methods = forClass().getDeclaredMethods();
readObjectMethod = findMethod(methods, "readObject",
new Class[] { ObjectInputStream.class },
Void.TYPE);
Void.TYPE, true);
writeObjectMethod = findMethod(methods, "writeObject",
new Class[] { ObjectOutputStream.class },
Void.TYPE, true);
readResolveMethod = findMethod(methods, "readResolve",
new Class[0], Object.class);
new Class[0], Object.class, false);
writeReplaceMethod = findMethod(methods, "writeReplace",
new Class[0], Object.class, false);
}
private ObjectStreamClass(Class cl)
@ -517,20 +528,8 @@ outer:
// only set this bit if CL is NOT Externalizable
flags |= ObjectStreamConstants.SC_SERIALIZABLE;
try
{
Method writeMethod = cl.getDeclaredMethod("writeObject",
writeMethodArgTypes);
int modifiers = writeMethod.getModifiers();
if (writeMethod.getReturnType() == Void.TYPE
&& Modifier.isPrivate(modifiers)
&& !Modifier.isStatic(modifiers))
flags |= ObjectStreamConstants.SC_WRITE_METHOD;
}
catch(NoSuchMethodException oh_well)
{
}
if (writeObjectMethod != null)
flags |= ObjectStreamConstants.SC_WRITE_METHOD;
}
@ -851,11 +850,11 @@ outer:
{
return (Externalizable)constructor.newInstance(null);
}
catch(Throwable t)
catch(Exception x)
{
throw (InvalidClassException)
new InvalidClassException(clazz.getName(),
"Unable to instantiate").initCause(t);
"Unable to instantiate").initCause(x);
}
}
@ -884,10 +883,12 @@ outer:
Method readObjectMethod;
Method readResolveMethod;
Method writeReplaceMethod;
Method writeObjectMethod;
boolean realClassIsSerializable;
boolean realClassIsExternalizable;
ObjectStreamField[] fieldMapping;
Class firstNonSerializableParent;
Constructor firstNonSerializableParentConstructor;
private Constructor constructor; // default constructor for Externalizable
boolean isProxyClass = false;
@ -896,34 +897,33 @@ outer:
// but it will avoid showing up as a discrepancy when comparing SUIDs.
private static final long serialVersionUID = -6120832682080437368L;
}
// interfaces are compared only by name
class InterfaceComparator implements Comparator
{
public int compare(Object o1, Object o2)
// interfaces are compared only by name
private static final class InterfaceComparator implements Comparator
{
return ((Class) o1).getName().compareTo(((Class) o2).getName());
}
}
// Members (Methods and Constructors) are compared first by name,
// conflicts are resolved by comparing type signatures
class MemberComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
Member m1 = (Member) o1;
Member m2 = (Member) o2;
int comp = m1.getName().compareTo(m2.getName());
if (comp == 0)
return TypeSignature.getEncodingOfMember(m1).
compareTo(TypeSignature.getEncodingOfMember(m2));
else
return comp;
public int compare(Object o1, Object o2)
{
return ((Class) o1).getName().compareTo(((Class) o2).getName());
}
}
// Members (Methods and Constructors) are compared first by name,
// conflicts are resolved by comparing type signatures
private static final class MemberComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
Member m1 = (Member) o1;
Member m2 = (Member) o2;
int comp = m1.getName().compareTo(m2.getName());
if (comp == 0)
return TypeSignature.getEncodingOfMember(m1).
compareTo(TypeSignature.getEncodingOfMember(m2));
else
return comp;
}
}
}