You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by al...@apache.org on 2007/06/18 12:35:24 UTC

svn commit: r548290 - /incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java

Author: almaw
Date: Mon Jun 18 03:35:21 2007
New Revision: 548290

URL: http://svn.apache.org/viewvc?view=rev&rev=548290
Log:
WICKET-625 - Wicket doesn't clean up properly when hot-deploying; hangs onto Class references. (partial fix, work in progress)

Modified:
    incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java?view=diff&rev=548290&r1=548289&r2=548290
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java Mon Jun 18 03:35:21 2007
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.util.lang;
 
+import java.lang.ref.WeakReference;
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
@@ -271,14 +272,15 @@
 
 	private final static IGetAndSet getGetAndSetter(String exp, Class clz)
 	{
-		Map getAndSetters = (Map)classesToGetAndSetters.get(clz);
+		Map getAndSetters = (Map)classesToGetAndSetters.get(clz.getName());
 		if (getAndSetters == null)
 		{
 			getAndSetters = new ConcurrentHashMap(8);
-			classesToGetAndSetters.put(clz, getAndSetters);
+			classesToGetAndSetters.put(clz.getName(), getAndSetters);
 		}
 
-		IGetAndSet getAndSetter = (IGetAndSet)getAndSetters.get(exp);
+		WeakReference ref = (WeakReference)getAndSetters.get(exp);
+		IGetAndSet getAndSetter = ref == null ? null : (IGetAndSet)ref.get();
 		if (getAndSetter == null)
 		{
 			Method method = null;
@@ -409,7 +411,7 @@
 				field = findField(clz, exp);
 				getAndSetter = new MethodGetAndSet(method, field);
 			}
-			getAndSetters.put(exp, getAndSetter);
+			getAndSetters.put(exp, new WeakReference(getAndSetter));
 		}
 		return getAndSetter;
 	}
@@ -1141,6 +1143,10 @@
 		 */
 		public Method getSetter()
 		{
+			if (setMethod == null)
+			{
+				setMethod = findSetter(getMethod, getMethod.getReturnType());
+			}
 			return setMethod;
 		}