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