You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/11/17 04:24:06 UTC

svn commit: r881137 - in /labs/magma/trunk/foundation-beans/src: main/java/org/apache/magma/beans/PropertyInfo.java test/java/org/apache/magma/beans/BeanDataTest.java

Author: simoneg
Date: Tue Nov 17 03:24:05 2009
New Revision: 881137

URL: http://svn.apache.org/viewvc?rev=881137&view=rev
Log:
Resolve generics when inspecting beans

Modified:
    labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java
    labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java

Modified: labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java?rev=881137&r1=881136&r2=881137&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java (original)
+++ labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java Tue Nov 17 03:24:05 2009
@@ -20,6 +20,7 @@
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -182,7 +183,26 @@
 				((PropertyAwareConverter)this.underlyingConverter).setProperty(this);
 			}
 		} else {
-			this.type = descriptor.getPropertyType();
+			GenericClass gc = GenericClass.forClass(beanClass);
+			if (readMethod != null) {
+				List<MethodDef> methods = gc.findMethods(readMethod.getName());
+				if (methods.size() == 1) {
+					this.type = methods.get(0).getReturnType().getBaseClass();
+				}
+			}
+			if (this.type == null) {
+				if (writeMethod != null) {
+					List<MethodDef> methods = gc.findAllMethods(writeMethod.getName());
+					for (Iterator<MethodDef> iterator = methods.iterator(); iterator.hasNext();) {
+						MethodDef methodDef = iterator.next();
+						if (methodDef.getBaseMethod().getParameterTypes().length != 1) iterator.remove();
+					}
+					if (methods.size() == 1) {
+						this.type = methods.get(0).getParameterTypes()[0].getBaseClass();
+					}
+				}
+			}
+			if (this.type == null) this.type = descriptor.getPropertyType();
 		}
 		
 		this.readable = readMethod != null;

Modified: labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java?rev=881137&r1=881136&r2=881137&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java (original)
+++ labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java Tue Nov 17 03:24:05 2009
@@ -83,4 +83,16 @@
 		assertTrue(property.isReadable());
 		assertFalse(property.isWriteable());
 	}
+	
+	@Test
+	public void genericsInBeans() throws Exception {
+		GenericTestBean<String, Integer> strint = new GenericTestBean<String, Integer>() {};
+		BeanData bd = strint.beanData();
+		
+		PropertyInfo property = bd.getProperty("a");
+		assertTrue(property.isReadable());
+		assertTrue(property.isWriteable());
+		assertEquals(String.class, property.getType());
+	}
+	
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org