[jboss-cvs] JBossAS SVN: r64331 - in projects/microcontainer/trunk/kernel/src: resources/tests/org/jboss/test/kernel/inject/test and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 27 13:28:17 EDT 2007


Author: alesj
Date: 2007-07-27 13:28:17 -0400 (Fri, 27 Jul 2007)
New Revision: 64331

Added:
   projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/inject/test/GenericsContextualInjection.xml
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/GenericsTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/GenericsContextualInjectionTestCase.java
Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractFeatureMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionTestSuite.java
Log:
Generics support.
"Yes. Ales asked the same question a couple of months ago,
but this example wasn't committed then." :-)

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -59,7 +59,7 @@
          // No type specified
          if (info == null)
          {
-            info = getElementClassInfo(cl);
+            info = getElementClassInfo(cl, null);
             if (info == null)
                return null;
             info = info.getArrayType(0);

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -609,7 +609,7 @@
          children.addAll(uninstallCallbacks);
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       throw new IllegalArgumentException("Cannot determine inject class type: " + this);
    }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -29,8 +29,8 @@
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.reflect.spi.ClassInfo;
-import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
 
@@ -83,7 +83,7 @@
    {
       Collection result = getTypeInstance(info, cl, Collection.class);
 
-      TypeInfo elementTypeInfo = getElementClassInfo(cl);
+      TypeInfo elementTypeInfo = getElementClassInfo(cl, info);
       for (int i = 0; i < collection.size(); ++i)
       {
          ValueMetaData vmd = (ValueMetaData) collection.get(i);
@@ -92,7 +92,7 @@
       return result;
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       if (elementType != null)
       {
@@ -192,14 +192,24 @@
     * Get the class info for the element type
     *
     * @param cl the classloader
+    * @param info the type info
     * @return the class info
     * @throws Throwable for any error
     */
-   protected ClassInfo getElementClassInfo(ClassLoader cl) throws Throwable
+   protected TypeInfo getElementClassInfo(ClassLoader cl, TypeInfo info) throws Throwable
    {
-      if (elementType == null)
-         return null;
+      if (elementType != null)
+         return configurator.getClassInfo(elementType, cl);
 
-      return configurator.getClassInfo(elementType, cl);
+      // null is excluded
+      if (info instanceof ClassInfo)
+      {
+         ClassInfo classInfo = (ClassInfo)info;
+         TypeInfo[] types = classInfo.getActualTypeArguments();
+         if (types != null)
+            return types[0];
+      }
+
+      return null;
    }
 }
\ No newline at end of file

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -38,6 +38,7 @@
 import org.jboss.reflect.spi.ClassInfo;
 import org.jboss.reflect.spi.ConstructorInfo;
 import org.jboss.reflect.spi.MethodInfo;
+import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
 
@@ -175,7 +176,7 @@
          children.add(factory);
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       if (factory != null || factoryClassName != null)
       {
@@ -196,7 +197,7 @@
          ParameterMetaData parameter = (ParameterMetaData) previous;
          String[] parameterTypes = Configurator.getParameterTypes(false, parameters);
          MethodInfo methodInfo = Configurator.findMethodInfo(classInfo, factoryMethod, parameterTypes, factoryClassName != null, true);
-         return applyCollectionOrMapCheck(methodInfo.getParameterTypes()[parameter.getIndex()].getType());
+         return applyCollectionOrMapCheck(methodInfo.getParameterTypes()[parameter.getIndex()]);
       }
       else
       {
@@ -208,13 +209,13 @@
             ParameterMetaData parameter = (ParameterMetaData) previous;
             String[] paramTypes = Configurator.getParameterTypes(false, parameters);
             ConstructorInfo ci = Configurator.findConstructorInfo(beanInfo.getClassInfo(), paramTypes);
-            return applyCollectionOrMapCheck(ci.getParameterTypes()[parameter.getIndex()].getType());
+            return applyCollectionOrMapCheck(ci.getParameterTypes()[parameter.getIndex()]);
          }
          else
          {
             // currently value constructor supports only values that are instances of class itself
             // this will add another instance with the same class to context
-            Class type = beanInfo.getClassInfo().getType();
+            ClassInfo type = beanInfo.getClassInfo();
             log.warn("Constructing bean from injection value: results in multiple beans with same class type - " + type);
             return type;
 /*

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractFeatureMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractFeatureMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractFeatureMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -22,18 +22,21 @@
 package org.jboss.beans.metadata.plugins;
 
 import java.io.Serializable;
+import java.util.Collection;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Set;
-import java.util.Collection;
-import java.util.Map;
 
 import org.jboss.beans.metadata.spi.AnnotationMetaData;
 import org.jboss.beans.metadata.spi.FeatureMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
-import org.jboss.util.collection.CollectionsFactory;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
+import org.jboss.util.collection.CollectionsFactory;
+import org.jboss.reflect.spi.TypeInfo;
+import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.reflect.spi.TypeInfoFactory;
 
 /**
  * General metadata.
@@ -101,14 +104,23 @@
       vistor.describeVisit(this);
    }
 
-   protected Class applyCollectionOrMapCheck(Class clazz) throws Throwable
+   protected TypeInfo applyCollectionOrMapCheck(TypeInfo typeInfo) throws Throwable
    {
-      // todo - some generics check
-      if (Collection.class.isAssignableFrom(clazz) || Map.class.isAssignableFrom(clazz))
+      TypeInfoFactory tif = typeInfo.getTypeInfoFactory();
+      boolean isMapTypeInfo = tif.getTypeInfo(Map.class).isAssignableFrom(typeInfo);
+      // cannot determine on map, since we don't know if we are key or value
+      if (typeInfo instanceof ClassInfo && isMapTypeInfo == false)
       {
+         ClassInfo classInfo = (ClassInfo)typeInfo;
+         TypeInfo[] types = classInfo.getActualTypeArguments();
+         if (types != null)
+            return types[0];
+      }
+      if (tif.getTypeInfo(Collection.class).isAssignableFrom(typeInfo) || isMapTypeInfo)
+      {
          throw new IllegalArgumentException("Should not be here - set element/value class type in collection/map: " + this);
       }
-      return clazz;
+      return typeInfo;
    }
 
    @SuppressWarnings("unchecked")

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -281,7 +281,7 @@
                   if (node instanceof TypeProvider)
                   {
                      TypeProvider typeProvider = (TypeProvider)node;
-                     Class injectionClass = typeProvider.getType(visitor, this);
+                     Class injectionClass = typeProvider.getType(visitor, this).getType();
                      // set when required
                      ControllerState whenRequired = whenRequiredState;
                      if (whenRequired == null)

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -35,6 +35,7 @@
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.reflect.spi.ClassInfo;
 import org.jboss.reflect.spi.MethodInfo;
+import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
 
@@ -161,14 +162,14 @@
          children.addAll(parameters);
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       ParameterMetaData parameter = (ParameterMetaData) previous;
       KernelControllerContext context = visitor.getControllerContext();
       String method = (methodName != null ? methodName : type);
       String[] parameterTypes = Configurator.getParameterTypes(false, parameters);
       MethodInfo methodInfo = Configurator.findMethodInfo(getClassInfo(context), method, parameterTypes);
-      return applyCollectionOrMapCheck(methodInfo.getParameterTypes()[parameter.getIndex()].getType());
+      return applyCollectionOrMapCheck(methodInfo.getParameterTypes()[parameter.getIndex()]);
    }
 
    protected ClassInfo getClassInfo(KernelControllerContext context) throws Throwable

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -192,7 +192,7 @@
       return children.iterator();
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       if (keyType != null)
       {

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -34,6 +34,7 @@
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.util.JBossStringBuilder;
+import org.jboss.reflect.spi.TypeInfo;
 
 /**
  * Metadata for a parameter.
@@ -164,7 +165,7 @@
          children.add(value);
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       if (type != null)
       {
@@ -172,7 +173,7 @@
          ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
          KernelController controller = (KernelController) context.getController();
          KernelConfigurator configurator = controller.getKernel().getConfigurator();
-         return applyCollectionOrMapCheck(configurator.getClassInfo(type, cl).getType());
+         return applyCollectionOrMapCheck(configurator.getClassInfo(type, cl));
       }
       else
       {

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -35,6 +35,7 @@
 import org.jboss.kernel.spi.config.KernelConfigurator;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.util.JBossStringBuilder;
+import org.jboss.reflect.spi.TypeInfo;
 
 /**
  * Metadata for a property.
@@ -177,7 +178,7 @@
          children.add(value);
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       String type = getType();
       if (type != null)
@@ -185,7 +186,7 @@
          KernelControllerContext context = visitor.getControllerContext();
          ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
          KernelConfigurator configurator = context.getKernel().getConfigurator();
-         return configurator.getClassInfo(type, cl).getType();
+         return configurator.getClassInfo(type, cl);
       }
       // check properties
       KernelControllerContext context = visitor.getControllerContext();
@@ -197,7 +198,7 @@
             PropertyInfo pi = (PropertyInfo) it.next();
             if (getName().equals(pi.getName()))
             {
-               return applyCollectionOrMapCheck(pi.getType().getType());
+               return applyCollectionOrMapCheck(pi.getType());
             }
          }
       }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -331,11 +331,11 @@
       return configurator.getClassInfo(classType, cl);
    }
 
-   protected Class getClass(MetaDataVisitor visitor, String classType) throws Throwable
+   protected ClassInfo getClass(MetaDataVisitor visitor, String classType) throws Throwable
    {
       KernelControllerContext context = visitor.getControllerContext();
       ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
-      return getClassInfo(classType, cl).getType();
+      return getClassInfo(classType, cl);
    }
 
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -102,7 +102,7 @@
       vistor.describeVisit(this);
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       Stack<MetaDataVisitorNode> visitorNodeStack = visitor.visitorNodeStack();
       // see AbstractInjectionValueMetaData.describeVisit

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -106,7 +106,7 @@
       return null;
    }
 
-   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       if (getType() != null)
       {

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -23,6 +23,7 @@
 
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.reflect.spi.TypeInfo;
 
 /**
  * @author <a href="mailto:ales.justin at genera-lynx.com">Ales Justin</a>
@@ -30,16 +31,16 @@
 public interface TypeProvider
 {
    // error msg
-   static final String ERROR_MSG = "Node not of TypeProvider instance, cannot determine class type.";
+   static final String ERROR_MSG = "Node not of TypeProvider instance, cannot determine type info.";
 
    /**
-    * Get the injectee class type.
+    * Get the injectee type info.
     *
     * @param visitor meda data visitor
     * @param previous previous node in the stack
-    * @return class type for injection ByClass
+    * @return TypeInfo type info for injection ByClass
     * @throws Throwable if could not determine class
     */
-   Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable;
+   TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable;
 
 }

Added: projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/inject/test/GenericsContextualInjection.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/inject/test/GenericsContextualInjection.xml	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/inject/test/GenericsContextualInjection.xml	2007-07-27 17:28:17 UTC (rev 64331)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+            xmlns="urn:jboss:bean-deployer">
+
+   <bean name="testObject" class="org.jboss.test.kernel.inject.support.GenericsTestObject">
+      <property name="collection">
+         <collection><inject/></collection>
+      </property>
+      <property name="list">
+         <list><inject/></list>
+      </property>
+      <property name="set">
+         <set><inject/></set>
+      </property>
+   </bean>
+
+   <bean name="duplicateTester" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
+
+</deployment>

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/GenericsTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/GenericsTestObject.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/GenericsTestObject.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -0,0 +1,66 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.inject.support;
+
+import java.util.Collection;
+import java.util.Set;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
+ */
+public class GenericsTestObject
+{
+   private Collection<TesterInterface> collection;
+   private Set<TesterInterface> set;
+   private List<TesterInterface> list;
+
+   public Collection<TesterInterface> getCollection()
+   {
+      return collection;
+   }
+
+   public void setCollection(Collection<TesterInterface> collection)
+   {
+      this.collection = collection;
+   }
+
+   public Set<TesterInterface> getSet()
+   {
+      return set;
+   }
+
+   public void setSet(Set<TesterInterface> set)
+   {
+      this.set = set;
+   }
+
+   public List<TesterInterface> getList()
+   {
+      return list;
+   }
+
+   public void setList(List<TesterInterface> list)
+   {
+      this.list = list;
+   }
+}

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionTestSuite.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionTestSuite.java	2007-07-27 17:20:23 UTC (rev 64330)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionTestSuite.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -52,10 +52,12 @@
       suite.addTest(BadCardinalityCallbackTestCase.suite());
       suite.addTest(CandidateContextualInjectionTestCase.suite());
 /*
+      TODO
       suite.addTest(AdditionAnnotationCallbackTestCase.suite());
       suite.addTest(CollectionAnnotationCallbackTestCase.suite());
       suite.addTest(CardinalityAnnotationCallbackTestCase.suite());
 */
+      suite.addTest(GenericsContextualInjectionTestCase.suite());
 
       return suite;
    }

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/GenericsContextualInjectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/GenericsContextualInjectionTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/GenericsContextualInjectionTestCase.java	2007-07-27 17:28:17 UTC (rev 64331)
@@ -0,0 +1,68 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.inject.test;
+
+import java.util.Collection;
+
+import junit.framework.Test;
+import org.jboss.test.kernel.inject.support.GenericsTestObject;
+import org.jboss.test.kernel.inject.support.TesterInterface;
+
+/**
+ * Generics injection.
+ *
+ * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
+ */
+public class GenericsContextualInjectionTestCase extends SingleContextualInjectionAdapter
+{
+   public GenericsContextualInjectionTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(GenericsContextualInjectionTestCase.class);
+   }
+
+   protected String getResource()
+   {
+      return "GenericsContextualInjection.xml";
+   }
+
+   protected void checkInjection()
+   {
+      GenericsTestObject testBean = (GenericsTestObject)getBean("testObject");
+      assertNotNull(testBean);
+      TesterInterface tester = (TesterInterface)getBean("duplicateTester");
+      checkCollection(testBean.getCollection(), tester);
+      checkCollection(testBean.getList(), tester);
+      checkCollection(testBean.getSet(), tester);
+   }
+
+   protected void checkCollection(Collection<TesterInterface> collection, TesterInterface tester)
+   {
+      assertNotNull(collection);
+      assertFalse(collection.isEmpty());
+      assertEquals(collection.iterator().next(), tester);
+   }
+}




More information about the jboss-cvs-commits mailing list