Author: pete
Date: Thu Nov 25 00:07:45 2010
New Revision: 1038876
URL: http://svn.apache.org/viewvc?rev=1038876&view=rev
Log:
WICKET-3193: SerializableChecker writeObjectMethodCache Map never holds a
Method -- in fact it only stores negative lookups to avoid repeated checking.
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java?rev=1038876&r1=1038875&r2=1038876&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
Thu Nov 25 00:07:45 2010
@@ -30,15 +30,16 @@ import java.lang.reflect.InvocationTarge
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;
+import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Set;
import java.util.Stack;
import org.apache.wicket.Component;
import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.util.lang.Generics;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -291,8 +292,8 @@ public final class SerializableChecker e
/** root object being analyzed. */
private Object root;
- /** cache for classes - writeObject methods. */
- private final Map<Class<?>, Object> writeObjectMethodCache =
Generics.newHashMap();
+ /** set of classes that had no writeObject methods at lookup (to avoid
repeated checking) */
+ private final Set<Class<?>> writeObjectMethodMissing = new
HashSet<Class<?>>();
/** current simple field name. */
private String simpleName = "";
@@ -330,7 +331,7 @@ public final class SerializableChecker e
simpleName = null;
traceStack.clear();
nameStack.clear();
- writeObjectMethodCache.clear();
+ writeObjectMethodMissing.clear();
}
private void check(Object obj)
@@ -457,15 +458,7 @@ public final class SerializableChecker e
else
{
Method writeObjectMethod = null;
- Object o = writeObjectMethodCache.get(cls);
- if (o != null)
- {
- if (o instanceof Method)
- {
- writeObjectMethod = (Method)o;
- }
- }
- else
+ if (writeObjectMethodMissing.contains(cls) == false)
{
try
{
@@ -474,13 +467,13 @@ public final class SerializableChecker e
}
catch (SecurityException e)
{
- // we can't access/ set accessible to
true
- writeObjectMethodCache.put(cls,
Boolean.FALSE);
+ // we can't access / set accessible to
true
+ writeObjectMethodMissing.add(cls);
}
catch (NoSuchMethodException e)
{
// cls doesn't have that method
- writeObjectMethodCache.put(cls,
Boolean.FALSE);
+ writeObjectMethodMissing.add(cls);
}
}