You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2009/10/24 20:13:20 UTC
svn commit: r829428 -
/geronimo/server/branches/2.2/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java
Author: djencks
Date: Sat Oct 24 18:13:20 2009
New Revision: 829428
URL: http://svn.apache.org/viewvc?rev=829428&view=rev
Log:
GERONIMO-4930 allow wildcards in generic constructor parameters in annotated gbeans
Modified:
geronimo/server/branches/2.2/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java
Modified: geronimo/server/branches/2.2/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java?rev=829428&r1=829427&r2=829428&view=diff
==============================================================================
--- geronimo/server/branches/2.2/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java (original)
+++ geronimo/server/branches/2.2/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java Sat Oct 24 18:13:20 2009
@@ -25,6 +25,7 @@
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.lang.reflect.WildcardType;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@@ -207,7 +208,17 @@
if (Collection.class.isAssignableFrom(parameterType)) {
if (genericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) genericType;
- return (Class) parameterizedType.getActualTypeArguments()[0];
+ Type componentType = parameterizedType.getActualTypeArguments()[0];
+ if (componentType instanceof Class) {
+ return (Class) componentType;
+ }
+ if (componentType instanceof WildcardType) {
+ Type[] upper = ((WildcardType)componentType).getUpperBounds();
+ if (upper.length == 1 && upper[0] instanceof Class) {
+ return (Class) upper[0];
+ }
+ }
+ throw new GBeanAnnotationException("Generic type is not a class: " + componentType);
} else {
throw new GBeanAnnotationException(Collection.class + " parameter must be generified");
}