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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to