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]