[Jboss-cvs] JBossAS SVN: r56022 - in projects/microcontainer/trunk/kernel/src: main/org/jboss/beans/metadata/plugins main/org/jboss/beans/metadata/plugins/factory main/org/jboss/beans/metadata/spi main/org/jboss/kernel/plugins/dependency main/org/jboss/kernel/plugins/deployment/xml resources/org/jboss/test/kernel/inject/test resources/schema tests/org/jboss/test/kernel/config/test tests/org/jboss/test/kernel/inject/support tests/org/jboss/test/kernel/inject/test

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Aug 17 08:07:10 EDT 2006


Author: alesj
Date: 2006-08-17 08:04:48 -0400 (Thu, 17 Aug 2006)
New Revision: 56022

Added:
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ConstructorContextualInjection.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/LifecycleContextualInjection.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/PropertyContextualInjection.xml
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/ConstructorInjectTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/LifecycleInjectTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/PropertyInjectTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ConstructorContextualInjectionTestCase.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionAdapter.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/LifecycleContextualInjectionTestCase.java
Removed:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/UpdateableDependencyItem.java
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnMultipleNameStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnMultipleTypeStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnNullNameStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnNullTypeStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnSingleNameStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnSingleTypeStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/IllegalParameterContextualInjection.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/MultipleNameStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/MultipleTypeStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/NullNameStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/NullTypeStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ParameterContextualInjection.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/SingleNameStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/SingleTypeStrictTestCase.xml
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedNameStrictSimpleTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedSimpleTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedTypeStrictSimpleTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/ParameterTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/SimpleTestObject.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/SingletonTester.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/TesterInterfaceGetter.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/IllegalParameterContextualInjectionTestCase.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ParameterContextualInjectionTestCase.java
Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractAnnotationMetaData.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/AbstractClassLoaderMetaData.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/AbstractDemandMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDependencyMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.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/AbstractInstallMetaData.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/AbstractSupplyMetaData.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/main/org/jboss/beans/metadata/plugins/factory/GenericBeanFactoryMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitorNode.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ParameterMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CreateDestroyLifecycleAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/StartStopLifecycleAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanCreateInterceptor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanDestroyInterceptor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanFactoryCreateInterceptor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanFactoryStartInterceptor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanStartInterceptor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanStopInterceptor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/ConstructorParametersInterceptor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/InstallParametersInterceptor.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/LifecycleParametersInterceptor.java
   projects/microcontainer/trunk/kernel/src/resources/schema/bean-deployer_2_0.xsd
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/FactoryTestCase.java
   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/PropertyContextualInjectionTestCase.java
Log:
Contextual injection rewrite.

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractAnnotationMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractAnnotationMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractAnnotationMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -85,7 +85,12 @@
    {
       visitor.initialVisit(this);
    }
-   
+
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      vistor.describeVisit(this);
+   }
+
    public Iterator<? extends MetaDataVisitorNode> getChildren()
    {
       return null;

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -27,17 +27,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
-import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
-import org.jboss.beans.metadata.spi.ConstructorMetaData;
-import org.jboss.beans.metadata.spi.DemandMetaData;
-import org.jboss.beans.metadata.spi.DependencyMetaData;
-import org.jboss.beans.metadata.spi.InstallMetaData;
-import org.jboss.beans.metadata.spi.LifecycleMetaData;
-import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
-import org.jboss.beans.metadata.spi.PropertyMetaData;
-import org.jboss.beans.metadata.spi.SupplyMetaData;
+import org.jboss.beans.metadata.spi.*;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.util.JBossObject;
@@ -403,7 +393,7 @@
    {
       super.addChildren(children);
       if (classLoader != null)
-         children.add( classLoader);
+         children.add(classLoader);
       if (constructor != null)
          children.add(constructor);
       if (properties != null)
@@ -427,7 +417,12 @@
       if (uninstalls != null)
          children.addAll(uninstalls);
    }
-   
+
+   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   {
+      throw new IllegalArgumentException("Cannot determine inject class type: " + this);
+   }
+
    public void toString(JBossStringBuilder buffer)
    {
       buffer.append("name=").append(name);

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -82,6 +82,12 @@
       visitor.initialVisit(this);
    }
 
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      // todo - any context setting?
+      vistor.describeVisit(this);
+   }
+
    public Iterator<? extends MetaDataVisitorNode> getChildren()
    {
       if (classloader != null)
@@ -93,7 +99,7 @@
    {
       buffer.append("classloader=").append(classloader);
    }
-   
+
    public void toShortString(JBossStringBuilder buffer)
    {
       buffer.append(classloader);

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -26,6 +26,7 @@
 import java.util.Iterator;
 
 import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.joinpoint.spi.Joinpoint;
@@ -44,7 +45,7 @@
 {
    /** The collection */
    protected ArrayList<MetaDataVisitorNode> collection = new ArrayList<MetaDataVisitorNode>();
-   
+
    /** The element type */
    protected String elementType;
 
@@ -91,6 +92,15 @@
       return result;
    }
 
+   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   {
+      if (elementType != null)
+      {
+         return getClass(visitor, elementType);
+      }
+      return super.getType(visitor, this);
+   }
+
    public boolean add(MetaDataVisitorNode o)
    {
       return collection.add(o);
@@ -150,7 +160,7 @@
    {
       return collection.toArray();
    }
-   
+
    public <T> T[] toArray(T[] a)
    {
       return collection.toArray(a);
@@ -167,7 +177,7 @@
       buffer.append(" collection=");
       JBossObject.list(buffer, collection);
    }
-   
+
    /**
     * Create the default collection instance
     * 
@@ -178,7 +188,7 @@
    {
       return new ArrayList<Object>();
    }
-   
+
    /**
     * Create the collection instance
     * 
@@ -192,10 +202,10 @@
    protected Collection<Object> getCollectionInstance(TypeInfo info, ClassLoader cl, Class<?> expected) throws Throwable
    {
       TypeInfo typeInfo = getClassInfo(cl);
-      
+
       if (typeInfo != null && typeInfo instanceof ClassInfo == false)
          throw new IllegalArgumentException(typeInfo.getName() + " is not a class");
-      
+
       if (typeInfo != null && ((ClassInfo) typeInfo).isInterface())
          throw new IllegalArgumentException(typeInfo.getName() + " is an interface");
 
@@ -207,7 +217,7 @@
          // Not a class 
          if (info instanceof ClassInfo == false)
             return null;
-         // Not an interface
+         // Is an interface
          if (((ClassInfo) info).isInterface())
             return null;
          // Type is too general
@@ -216,7 +226,7 @@
          // Try to use the passed type
          typeInfo = info;
       }
-      
+
       BeanInfo beanInfo = configurator.getBeanInfo(typeInfo);
       Joinpoint constructor = configurator.getConstructorJoinPoint(beanInfo);
       Object result = constructor.dispatch();
@@ -224,7 +234,7 @@
          throw new ClassCastException(result.getClass() + " is not a " + expected.getName());
       return (Collection<Object>) result;
    }
-   
+
    /**
     * Get the class info for the element type
     *
@@ -236,7 +246,7 @@
    {
       if (elementType == null)
          return null;
-      
+
       return configurator.getClassInfo(elementType, cl);
    }
 }
\ 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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -21,37 +21,50 @@
 */
 package org.jboss.beans.metadata.plugins;
 
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
-import org.jboss.beans.metadata.spi.ConstructorMetaData;
-import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
-import org.jboss.beans.metadata.spi.ParameterMetaData;
-import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.spi.*;
+import org.jboss.kernel.plugins.config.Configurator;
+import org.jboss.kernel.spi.config.KernelConfigurator;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.reflect.spi.ConstructorInfo;
+import org.jboss.reflect.spi.MethodInfo;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
 
 /**
  * Metadata for construction.
- * 
+ *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
 public class AbstractConstructorMetaData extends AbstractFeatureMetaData implements ConstructorMetaData
 {
-   /** The paramaters List<ParameterMetaData> */
+   /**
+    * The paramaters List<ParameterMetaData>
+    */
    protected List<ParameterMetaData> parameters;
 
-   /** The value */
+   /**
+    * The value
+    */
    protected ValueMetaData value;
 
-   /** The factory */
+   /**
+    * The factory
+    */
    protected ValueMetaData factory;
 
-   /** The factory class name */
+   /**
+    * The factory class name
+    */
    protected String factoryClassName;
 
-   /** The factory method */
+   /**
+    * The factory method
+    */
    protected String factoryMethod;
 
    /**
@@ -60,10 +73,10 @@
    public AbstractConstructorMetaData()
    {
    }
-   
+
    /**
     * Set the parameters
-    * 
+    *
     * @param parameters List<ParameterMetaData>
     */
    public void setParameters(List<ParameterMetaData> parameters)
@@ -71,10 +84,10 @@
       this.parameters = parameters;
       flushJBossObjectCache();
    }
-   
+
    /**
     * Set the value
-    * 
+    *
     * @param value the value
     */
    public void setValue(ValueMetaData value)
@@ -82,10 +95,10 @@
       this.value = value;
       flushJBossObjectCache();
    }
-   
+
    /**
     * Set the factory
-    * 
+    *
     * @param factory the factory
     */
    public void setFactory(ValueMetaData factory)
@@ -93,10 +106,10 @@
       this.factory = factory;
       flushJBossObjectCache();
    }
-   
+
    /**
     * Set the factory class name
-    * 
+    *
     * @param name the factory class name
     */
    public void setFactoryClass(String name)
@@ -104,10 +117,10 @@
       this.factoryClassName = name;
       flushJBossObjectCache();
    }
-   
+
    /**
     * Set the factory method
-    * 
+    *
     * @param name the factory method
     */
    public void setFactoryMethod(String name)
@@ -115,7 +128,7 @@
       this.factoryMethod = name;
       flushJBossObjectCache();
    }
-   
+
    public List<ParameterMetaData> getParameters()
    {
       return parameters;
@@ -130,17 +143,17 @@
    {
       return factory;
    }
-   
+
    public String getFactoryClass()
    {
       return factoryClassName;
    }
-   
+
    public String getFactoryMethod()
    {
       return factoryMethod;
    }
-   
+
    protected void addChildren(Set<MetaDataVisitorNode> children)
    {
       super.addChildren(children);
@@ -151,7 +164,66 @@
       if (factory != null)
          children.add(factory);
    }
-   
+
+   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   {
+      if (factory != null || factoryClassName != null)
+      {
+         KernelControllerContext context = visitor.getControllerContext();
+         ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
+         KernelConfigurator configurator = context.getKernel().getConfigurator();
+         ClassInfo classInfo;
+         if (factory != null)
+         {
+            Object target = factory.getValue(null, cl);
+            classInfo = configurator.getClassInfo(target.getClass());
+         }
+         else
+         {
+            classInfo = configurator.getClassInfo(factoryClassName, cl);
+         }
+         // should be parameter
+         ParameterMetaData parameter = (ParameterMetaData) previous;
+         String[] parameterTypes = Configurator.getParameterTypes(false, parameters);
+         MethodInfo methodInfo = Configurator.findMethodInfo(classInfo, factoryMethod, parameterTypes);
+         return applyCollectionOrMapCheck(methodInfo.getParameterTypes()[parameter.getIndex()].getType());
+      }
+      else
+      {
+         KernelControllerContext context = visitor.getControllerContext();
+         BeanInfo beanInfo = context.getBeanInfo();
+         // find matching parameter
+         if (previous instanceof ParameterMetaData)
+         {
+            ParameterMetaData parameter = (ParameterMetaData) previous;
+            String[] paramTypes = Configurator.getParameterTypes(false, parameters);
+            ConstructorInfo ci = Configurator.findConstructorInfo(beanInfo.getClassInfo(), paramTypes);
+            return applyCollectionOrMapCheck(ci.getParameterTypes()[parameter.getIndex()].getType());
+         }
+         else
+         {
+            // find all constructors with single value
+            Set<ConstructorInfo> constructors = beanInfo.getConstructors();
+            Set<ConstructorInfo> matchingConstructorInfos = new HashSet<ConstructorInfo>();
+            if (constructors != null)
+            {
+               for (ConstructorInfo ci : constructors)
+               {
+                  if (ci.getParameters() != null && ci.getParameters().length == 1)
+                  {
+                     matchingConstructorInfos.add(ci);
+                  }
+               }
+            }
+            if (matchingConstructorInfos.size() != 1)
+            {
+               throw new IllegalArgumentException("Should not be here - illegal size of matching constructors: " + this);
+            }
+            return applyCollectionOrMapCheck(matchingConstructorInfos.iterator().next().getParameterTypes()[0].getType());
+         }
+      }
+   }
+
    public void toString(JBossStringBuilder buffer)
    {
       buffer.append("parameters=");

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDemandMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDemandMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDemandMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -108,7 +108,12 @@
       visitor.addDependency(item);
       visitor.initialVisit(this);
    }
-   
+
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      vistor.describeVisit(this);
+   }
+
    public Iterator<? extends MetaDataVisitorNode> getChildren()
    {
       return null;

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDependencyMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDependencyMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDependencyMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -87,7 +87,12 @@
 
       visitor.initialVisit(this);
    }
-   
+
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      vistor.describeVisit(this);
+   }
+
    public Iterator<? extends MetaDataVisitorNode> getChildren()
    {
       return null;

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -149,7 +149,7 @@
 
       super.initialVisit(visitor);
    }
-
+      
    public void toString(JBossStringBuilder buffer)
    {
       super.toString(buffer);

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractFeatureMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -23,6 +23,8 @@
 
 import java.util.Iterator;
 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;
@@ -38,7 +40,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class AbstractFeatureMetaData extends JBossObject implements FeatureMetaData
+public abstract class AbstractFeatureMetaData extends JBossObject implements FeatureMetaData, TypeProvider
 {
    /** The description */
    protected String description;
@@ -89,7 +91,22 @@
    {
       visitor.initialVisit(this);
    }
-   
+
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      vistor.describeVisit(this);
+   }
+
+   protected Class applyCollectionOrMapCheck(Class clazz) throws Throwable
+   {
+      // todo - some generics check
+      if (Collection.class.isAssignableFrom(clazz) || Map.class.isAssignableFrom(clazz))
+      {
+         throw new IllegalArgumentException("Should not be here - set element/value class type in collection/map: " + this);
+      }
+      return clazz;
+   }
+
    public Iterator<? extends MetaDataVisitorNode> getChildren()
    {
       Set<MetaDataVisitorNode> children = CollectionsFactory.createLazySet();

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -21,23 +21,16 @@
 */
 package org.jboss.beans.metadata.plugins;
 
-import java.util.Iterator;
-import java.util.Set;
-
-import org.jboss.beans.info.spi.BeanInfo;
-import org.jboss.beans.info.spi.PropertyInfo;
-import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.dependency.plugins.AbstractDependencyItem;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
-import org.jboss.kernel.plugins.dependency.UpdateableDependencyItem;
-import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.util.JBossStringBuilder;
+import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.reflect.spi.TypeInfo;
+import org.jboss.util.JBossStringBuilder;
 
 /**
  * Injection value.
@@ -48,6 +41,7 @@
 {
    protected InjectionType injectionType = InjectionType.BY_CLASS;
 
+   /** Simplyifies things with InjectionType.BY_NAME */
    protected AbstractPropertyMetaData propertyMetaData;
 
    /**
@@ -110,7 +104,6 @@
 
    public void initialVisit(MetaDataVisitor visitor)
    {
-      // determine value
       if (getUnderlyingValue() == null)
       {
          // check for property
@@ -128,26 +121,42 @@
             }
             setValue(propertyMetaData.getName());
          }
-         else if (InjectionType.BY_CLASS.equals(injectionType))
+      }
+      // check if was maybe set with by_name
+      if (getUnderlyingValue() != null)
+      {
+         super.initialVisit(visitor);
+      }
+   }
+
+   public void describeVisit(MetaDataVisitor visitor)
+   {
+      if (getUnderlyingValue() == null)
+      {
+         if (InjectionType.BY_CLASS.equals(injectionType))
          {
-            // set controller
             KernelControllerContext context = visitor.getControllerContext();
-            controller = (KernelController) context.getController();
-            if (propertyMetaData != null)
+            controller = (KernelController) context.getController(); // set controller
+            TypeProvider typeProvider = (TypeProvider) visitor.visitorNodeStack().pop();
+            try
             {
-               DependencyItem item = new PropertyPlaceholderDependencyItem(context.getName(), propertyMetaData.getName());
+               DependencyItem item = new ClassContextDependencyItem(context.getName(), typeProvider.getType(visitor, this));
                visitor.addDependency(item);
             }
-            visitor.initialVisit(this); // as in AbstractValueMetaData
-            // skip AbstractDependencyVMD.initialVisit() - no value defined
-            return;
+            catch (Throwable throwable)
+            {
+               throw new Error(throwable);
+            } finally
+            {
+               visitor.visitorNodeStack().push(typeProvider);
+            }
          }
          else
          {
             throw new IllegalArgumentException("Unknown injection type=" + injectionType);
          }
       }
-      super.initialVisit(visitor);
+      super.describeVisit(visitor);
    }
 
    public void toString(JBossStringBuilder buffer)
@@ -159,53 +168,25 @@
          buffer.append(" propertyMetaData=").append(propertyMetaData.getName()); //else overflow - indefinite recursion
    }
 
-   public class PropertyPlaceholderDependencyItem extends AbstractDependencyItem implements UpdateableDependencyItem
+   public class ClassContextDependencyItem extends AbstractDependencyItem
    {
-      private String propertyName;
-      private Class demandClass;
-
-      public PropertyPlaceholderDependencyItem(Object name, String propertyName)
+      public ClassContextDependencyItem(Object name, Class demandClass)
       {
-         super(name, null, ControllerState.CONFIGURED, dependentState);
-         this.propertyName = propertyName;
+         super(name, demandClass, ControllerState.INSTANTIATED, dependentState);
       }
 
-      public void update(BeanMetaData metaData, BeanInfo info)
-      {
-         Set propertyInfos = info.getProperties();
-         if (propertyInfos != null)
-         {
-            for (Iterator it = propertyInfos.iterator(); it.hasNext();)
-            {
-               PropertyInfo pi = (PropertyInfo) it.next();
-               if (propertyName.equals(pi.getName()))
-               {
-                  demandClass = pi.getType().getType();
-                  break;
-               }
-            }
-         }
-      }
-
       public boolean resolve(Controller controller)
       {
-         if (demandClass != null)
+         ControllerContext context = controller.getInstalledContext(getIDependOn());
+         if (context != null)
          {
-            ControllerContext context = controller.getInstalledContext(demandClass);
-            if (context != null)
-            {
-               setIDependOn(context.getName());
-               addDependsOnMe(controller, context);
-               setResolved(true);
-            }
-            else
-            {
-               setResolved(false);
-            }
+            setIDependOn(context.getName());
+            addDependsOnMe(controller, context);
+            setResolved(true);
          }
          else
          {
-            setResolved(true);
+            setResolved(false);
          }
          return isResolved();
       }
@@ -213,12 +194,12 @@
       public void toString(JBossStringBuilder buffer)
       {
          super.toString(buffer);
-         buffer.append(" demandClass=").append(demandClass);
+         buffer.append(" demandClass=").append(getIDependOn());
       }
 
       public void toShortString(JBossStringBuilder buffer)
       {
-         buffer.append(getName()).append(" demands ").append(demandClass);
+         buffer.append(getName()).append(" demands ").append(getIDependOn());
       }
 
    }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInstallMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInstallMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInstallMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -26,8 +26,12 @@
 import org.jboss.dependency.plugins.AbstractDependencyItem;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.config.KernelConfigurator;
 import org.jboss.util.JBossStringBuilder;
+import org.jboss.reflect.spi.ClassInfo;
 
 /**
  * Metadata for installation.
@@ -50,7 +54,7 @@
    {
       setState(ControllerState.INSTALLED);
    }
-   
+
    public String getBean()
    {
       return bean;
@@ -65,7 +69,7 @@
    {
       this.bean = bean;
    }
-   
+
    /**
     * Set the required state of the dependency
     * 
@@ -93,6 +97,26 @@
       super.initialVisit(visitor);
    }
 
+   protected ClassInfo getClassInfo(KernelControllerContext context) throws Throwable
+   {
+      if (bean != null)
+      {
+         KernelController controller = (KernelController) context.getController();
+         ControllerContext beanContext = controller.getContext(bean, ControllerState.INSTANTIATED);
+         if (beanContext != null)
+         {
+            KernelConfigurator configurator = controller.getKernel().getConfigurator();
+            Object target = beanContext.getTarget();
+            return configurator.getClassInfo(target.getClass());
+         }
+         else
+         {
+            throw new IllegalArgumentException("Cannot determine install bean class: " + this);
+         }
+      }
+      return super.getClassInfo(context);
+   }
+
    public void toString(JBossStringBuilder buffer)
    {
       if (bean != null)
@@ -110,7 +134,7 @@
       if (methodName != null)
          buffer.append(".").append(methodName);
    }
-   
+
    /**
     * An InstallationDependencyItem.
     */

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -29,6 +29,10 @@
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.ParameterMetaData;
 import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.plugins.config.Configurator;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.reflect.spi.MethodInfo;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
 
@@ -42,13 +46,16 @@
 {
    /** The state */
    protected ControllerState state;
-   
+
    /** The method name */
    protected String methodName;
-   
+
    /** The paramaters List<ParameterMetaData> */
    protected List<ParameterMetaData> parameters;
 
+   /** The type - create, start, stop, destroy, install */
+   protected String type;
+
    /**
     * Create a new lifecycle meta data
     */
@@ -65,12 +72,12 @@
    {
       this.state = state;
    }
-   
+
    public String getMethodName()
    {
       return methodName;
    }
-   
+
    /**
     * Set the method name
     * 
@@ -81,12 +88,12 @@
       this.methodName = name;
       flushJBossObjectCache();
    }
-   
+
    public List<ParameterMetaData> getParameters()
    {
       return parameters;
    }
-   
+
    /**
     * Set the parameters
     * 
@@ -98,19 +105,44 @@
       flushJBossObjectCache();
    }
 
+   public String getType()
+   {
+      return type;
+   }
+
+   public void setType(String type)
+   {
+      this.type = type;
+   }
+
    public void initialVisit(MetaDataVisitor visitor)
    {
       visitor.setContextState(state);
       super.initialVisit(visitor);
    }
-   
+
    protected void addChildren(Set<MetaDataVisitorNode> children)
    {
       super.addChildren(children);
       if (parameters != null)
          children.addAll(parameters);
    }
-   
+
+   public Class 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());
+   }
+
+   protected ClassInfo getClassInfo(KernelControllerContext context) throws Throwable
+   {
+      return context.getBeanInfo().getClassInfo();
+   }
+
    public void toString(JBossStringBuilder buffer)
    {
       if (methodName != null)
@@ -120,7 +152,7 @@
       buffer.append(" ");
       super.toString(buffer);
    }
-   
+
    public void toShortString(JBossStringBuilder buffer)
    {
       buffer.append(methodName);

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -21,14 +21,10 @@
 */
 package org.jboss.beans.metadata.plugins;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.joinpoint.spi.Joinpoint;
@@ -167,7 +163,7 @@
    public void putAll(Map<? extends MetaDataVisitorNode, ? extends MetaDataVisitorNode> t)
    {
       putAll(t);
-      
+
    }
 
    public MetaDataVisitorNode remove(Object key)
@@ -187,11 +183,30 @@
 
    public Iterator<? extends MetaDataVisitorNode> getChildren()
    {
-      ArrayList<MetaDataVisitorNode> children = new ArrayList<MetaDataVisitorNode>(map.keySet());
-      children.addAll(map.values());
+      ArrayList<MetaDataVisitorNode> children = new ArrayList<MetaDataVisitorNode>(keySet());
+      children.addAll(values());
       return children.iterator();
    }
 
+   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   {
+      for(MetaDataVisitorNode key : keySet())
+      {
+         if (previous.equals(key) && keyType != null)
+         {
+            return getClass(visitor, keyType);
+         }
+      }
+      for(MetaDataVisitorNode v : values())
+      {
+         if (previous.equals(v) && valueType != null)
+         {
+            return getClass(visitor, valueType);
+         }
+      }
+      return super.getType(visitor, this);
+   }
+
    public void toString(JBossStringBuilder buffer)
    {
       super.toString(buffer);

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -22,27 +22,42 @@
 package org.jboss.beans.metadata.plugins;
 
 import java.util.Set;
+import java.util.Stack;
 
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.ParameterMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.util.JBossStringBuilder;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.config.KernelConfigurator;
+import org.jboss.kernel.plugins.config.Configurator;
 
 /**
  * Metadata for a parameter.
- * 
+ *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
 public class AbstractParameterMetaData extends AbstractFeatureMetaData implements ParameterMetaData
 {
-   /** The parameter type */
+   /**
+    * The parameter type
+    */
    protected String type;
 
-   /** The parameter value */
+   /**
+    * The parameter value
+    */
    protected ValueMetaData value;
 
    /**
+    * The index in parameter list
+    */
+   protected int index;
+
+   /**
     * Create a new parameter meta data
     */
    public AbstractParameterMetaData()
@@ -51,7 +66,7 @@
 
    /**
     * Create a new parameter meta data
-    * 
+    *
     * @param value the value
     */
    public AbstractParameterMetaData(Object value)
@@ -62,7 +77,7 @@
 
    /**
     * Create a new parameter meta data
-    * 
+    *
     * @param value the value metadata
     */
    public AbstractParameterMetaData(ValueMetaData value)
@@ -72,8 +87,8 @@
 
    /**
     * Create a new parameter meta data
-    * 
-    * @param type the type
+    *
+    * @param type  the type
     * @param value the value
     */
    public AbstractParameterMetaData(String type, Object value)
@@ -84,8 +99,8 @@
 
    /**
     * Create a new parameter meta data
-    * 
-    * @param type the type
+    *
+    * @param type  the type
     * @param value the string value
     */
    public AbstractParameterMetaData(String type, String value)
@@ -96,8 +111,8 @@
 
    /**
     * Create a new parameter meta data
-    * 
-    * @param type the type
+    *
+    * @param type  the type
     * @param value the value meta data
     */
    public AbstractParameterMetaData(String type, ValueMetaData value)
@@ -105,43 +120,78 @@
       this.type = type;
       this.value = value;
    }
-   
+
    public String getType()
    {
       return type;
    }
-   
+
    public void setType(String type)
    {
       this.type = type;
       flushJBossObjectCache();
    }
-   
+
    public ValueMetaData getValue()
    {
       return value;
    }
 
+   public int getIndex()
+   {
+      return index;
+   }
+
+   public void setIndex(int index)
+   {
+      this.index = index;
+   }
+
    public void setValue(ValueMetaData value)
    {
       this.value = value;
       flushJBossObjectCache();
    }
-   
+
    protected void addChildren(Set<MetaDataVisitorNode> children)
    {
       super.addChildren(children);
       if (value != null)
          children.add(value);
    }
-   
+
+   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   {
+      if (type != null)
+      {
+         KernelControllerContext context = visitor.getControllerContext();
+         ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
+         KernelController controller = (KernelController) context.getController();
+         KernelConfigurator configurator = controller.getKernel().getConfigurator();
+         return applyCollectionOrMapCheck(configurator.getClassInfo(type, cl).getType());
+      }
+      else
+      {
+         Stack visitorNodeStack = visitor.visitorNodeStack();
+         TypeProvider typeProvider = (TypeProvider) visitorNodeStack.pop();
+         try
+         {
+            return typeProvider.getType(visitor, this);
+         }
+         finally
+         {
+            visitorNodeStack.push(typeProvider);
+         }
+      }
+   }
+
    public void toString(JBossStringBuilder buffer)
    {
       buffer.append("type=").append(type);
       buffer.append(" value=").append(value);
       super.toString(buffer);
    }
-   
+
    public void toShortString(JBossStringBuilder buffer)
    {
       buffer.append(type);

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -21,13 +21,16 @@
 */
 package org.jboss.beans.metadata.plugins;
 
+import java.util.Iterator;
 import java.util.Set;
 
+import org.jboss.beans.info.spi.PropertyInfo;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.PropertyMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.util.JBossStringBuilder;
 
 /**
@@ -36,7 +39,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class AbstractPropertyMetaData extends AbstractFeatureMetaData implements PropertyMetaData
+public class AbstractPropertyMetaData extends AbstractFeatureMetaData implements PropertyMetaData, TypeProvider
 {
    /** The property name */
    protected String name;
@@ -100,7 +103,7 @@
       svmd.setType(type);
       this.value = svmd;
    }
-   
+
    public String getName()
    {
       return name;
@@ -116,7 +119,7 @@
       this.name = name;
       flushJBossObjectCache();
    }
-   
+
    public ValueMetaData getValue()
    {
       return value;
@@ -132,7 +135,7 @@
       this.value = value;
       flushJBossObjectCache();
    }
-   
+
    public void initialVisit(MetaDataVisitor visitor)
    {
       visitor.setContextState(ControllerState.CONFIGURED);
@@ -144,7 +147,25 @@
       if (value != null)
          children.add(value);
    }
-   
+
+   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   {
+      KernelControllerContext context = visitor.getControllerContext();
+      Set propertyInfos = context.getBeanInfo().getProperties();
+      if (propertyInfos != null)
+      {
+         for(Iterator it = propertyInfos.iterator(); it.hasNext();)
+         {
+            PropertyInfo pi = (PropertyInfo) it.next();
+            if (getName().equals(pi.getName()))
+            {
+               return applyCollectionOrMapCheck(pi.getType().getType());
+            }
+         }
+      }
+      throw new IllegalArgumentException("Should not be here - no matching propertyInfo: " + this);
+   }
+
    public void toString(JBossStringBuilder buffer)
    {
       buffer.append("name=").append(name);
@@ -152,7 +173,7 @@
          buffer.append(" value=").append(value);
       super.toString(buffer);
    }
-   
+
    public void toShortString(JBossStringBuilder buffer)
    {
       buffer.append(name);

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSupplyMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSupplyMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSupplyMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -78,6 +78,11 @@
       visitor.initialVisit(this);
    }
 
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      vistor.describeVisit(this);
+   }
+
    public Iterator<? extends MetaDataVisitorNode> getChildren()
    {
       return null;

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -23,6 +23,8 @@
 
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.kernel.spi.config.KernelConfigurator;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.plugins.config.Configurator;
 import org.jboss.reflect.spi.ClassInfo;
 import org.jboss.util.JBossStringBuilder;
 
@@ -103,9 +105,22 @@
     */
    protected ClassInfo getClassInfo(ClassLoader cl) throws Throwable
    {
-      if (type == null)
+      return getClassInfo(type, cl);
+   }
+
+   protected ClassInfo getClassInfo(String classType, ClassLoader cl) throws Throwable
+   {
+      if (classType == null)
          return null;
-      
-      return configurator.getClassInfo(type, cl);
+
+      return configurator.getClassInfo(classType, cl);
    }
+
+   protected Class getClass(MetaDataVisitor visitor, String classType) throws Throwable
+   {
+      KernelControllerContext context = visitor.getControllerContext();
+      ClassLoader cl = Configurator.getClassLoader(context.getBeanMetaData());
+      return getClassInfo(classType, cl).getType();
+   }
+
 }

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -23,6 +23,8 @@
 
 import java.util.Iterator;
 import java.util.Collections;
+import java.util.Stack;
+
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
@@ -36,7 +38,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class AbstractValueMetaData extends JBossObject implements ValueMetaData
+public class AbstractValueMetaData extends JBossObject implements ValueMetaData, TypeProvider
 {
    /** The value */
    protected Object value;
@@ -83,7 +85,26 @@
    {
       visitor.initialVisit(this);
    }
-   
+
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      vistor.describeVisit(this);
+   }
+
+   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   {
+      Stack visitorNodeStack = visitor.visitorNodeStack();
+      TypeProvider typeProvider = (TypeProvider) visitorNodeStack.pop();
+      try
+      {
+         return typeProvider.getType(visitor, this);
+      }
+      finally
+      {
+         visitorNodeStack.push(typeProvider);
+      }
+   }
+
    public Iterator<? extends MetaDataVisitorNode> getChildren()
    {
       if (value instanceof MetaDataVisitorNode)

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -23,6 +23,8 @@
 
 import org.jboss.logging.Logger;
 import org.jboss.reflect.spi.TypeInfo;
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 
 /**
  * String value.
@@ -68,19 +70,29 @@
          throw new ClassCastException("value is not a String: " + value);
       super.setValue(value);
    }
-   
+
    public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
    {
       boolean trace = log.isTraceEnabled();
       if (trace)
          log.trace("getValue value=" + value + " type=" + type + " info=" + info);
-      
+
       TypeInfo typeInfo = getClassInfo(cl);
       if (typeInfo == null)
          typeInfo = info;
       if (typeInfo == null)
          throw new IllegalArgumentException("Unable to determine type for value: " + value);
-         
+
       return typeInfo.convertValue(value);
    }
+
+   public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+   {
+      if (getType() != null)
+      {
+         return getClass(visitor, getType());
+      }
+      return super.getType(visitor, this);
+   }
+
 }

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,15 +1,35 @@
 /*
- * 
- */
-
+* JBoss, Home of Professional Open Source
+* Copyright 2005, 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.beans.metadata.plugins;
 
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+
 /**
  * @author <a href="mailto:ales.justin at genera-lynx.com">Ales Justin</a>
  */
 public interface TypeProvider
 {
 
-   Class getType();
+   Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable;
 
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/factory/GenericBeanFactoryMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/factory/GenericBeanFactoryMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/factory/GenericBeanFactoryMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -34,12 +34,7 @@
 import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
 import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData;
 import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
-import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
-import org.jboss.beans.metadata.spi.ConstructorMetaData;
-import org.jboss.beans.metadata.spi.LifecycleMetaData;
-import org.jboss.beans.metadata.spi.ParameterMetaData;
-import org.jboss.beans.metadata.spi.PropertyMetaData;
-import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.beans.metadata.spi.*;
 import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants;
 import org.jboss.kernel.spi.config.KernelConfigurator;
 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitorNode.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitorNode.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/MetaDataVisitorNode.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -43,7 +43,7 @@
     *
     * @param vistor the visitor
     */
-//   public void describeVisit(MetaDataVisitor vistor);
+   public void describeVisit(MetaDataVisitor vistor);
 
    /**
     * Return the child nodes

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ParameterMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ParameterMetaData.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/ParameterMetaData.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -42,4 +42,12 @@
     * @return the value.
     */
    ValueMetaData getValue();
+
+   /**
+    * Get the index
+    *
+    * @return index in list
+    */
+   int getIndex();
+   
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -343,7 +343,7 @@
       }
       if (numberOfMatchingBeans != 1)
       {
-         log.error("Should not be here, illegas size of matching contexts (" + numberOfMatchingBeans + ") - dependency failed! " + clazz);
+         log.warn("Checking for contextual injection, current matches: " + numberOfMatchingBeans + " - " + clazz);
          return null;
       }
       return contexts.iterator().next();

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -45,33 +45,48 @@
 
 /**
  * Controller context.
- * 
+ *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
 public class AbstractKernelControllerContext extends AbstractControllerContext implements KernelControllerContext
 {
-   /** The default actions */
+   /**
+    * The default actions
+    */
    private static final KernelControllerContextActions actions = KernelControllerContextActions.getInstance();
 
-   /** The no instantiate actions */
+   /**
+    * The no instantiate actions
+    */
    private static final KernelControllerContextActions noInstantiate = KernelControllerContextActions.getNoInstantiate();
-   
-   /** The BeanInfo */
+
+   /**
+    * The BeanInfo
+    */
    protected BeanInfo info;
 
-   /** The meta data */
+   /**
+    * The meta data
+    */
    protected BeanMetaData metaData;
-   
-   /** The access control context */
+
+   /**
+    * The access control context
+    */
    protected AccessControlContext accessContext;
-   
+
    /**
+    * Did we do a describeVisit
+    */
+   protected boolean isDescribeProcessed;
+
+   /**
     * Create an abstract controller context
-    * 
-    * @param info the bean info
+    *
+    * @param info     the bean info
     * @param metaData the meta data
-    * @param target any target object
+    * @param target   any target object
     */
    public AbstractKernelControllerContext(BeanInfo info, BeanMetaData metaData, Object target)
    {
@@ -92,7 +107,7 @@
          throw new IllegalStateException("Context is not installed in controller");
       return controller.getKernel();
    }
-   
+
    public BeanInfo getBeanInfo()
    {
       return info;
@@ -100,12 +115,13 @@
 
    /**
     * Set the bean info
-    * 
+    *
     * @param info the bean info
     */
    public void setBeanInfo(BeanInfo info)
    {
       this.info = info;
+      infoprocessMetaData();
       flushJBossObjectCache();
    }
 
@@ -138,6 +154,18 @@
       AccessController.doPrivileged(visitor);
    }
 
+   /**
+    * Preprocess the metadata for this context
+    */
+   protected void infoprocessMetaData()
+   {
+      if (info == null || isDescribeProcessed)
+         return;
+      DescribedMetaDataVisitor visitor = new DescribedMetaDataVisitor(metaData);
+      AccessController.doPrivileged(visitor);
+      isDescribeProcessed = true;
+   }
+
    public MetaDataContext getMetaDataContext()
    {
       if (info != null)
@@ -153,9 +181,9 @@
 
    /**
     * Get the access control context of the code that created this context.<p>
-    * 
+    * <p/>
     * This will be null when there is no security manager.
-    * 
+    *
     * @return any access control context
     */
    protected AccessControlContext getAccessControlContext()
@@ -165,28 +193,61 @@
 
    protected abstract class AbstractMetaDataVistor implements MetaDataVisitor, PrivilegedAction<Object>
    {
-      /** The current context for when the dependencies are required */
+      /**
+       * The current context for when the dependencies are required
+       */
       protected ControllerState contextState = ControllerState.INSTANTIATED;
 
-      /** The metadata */
+      /**
+       * The metadata
+       */
       protected BeanMetaData bmd;
 
-      /** Visited branch stack */
+      /**
+       * Visited branch stack
+       */
       protected Stack visitorNodeStack;
 
       protected AbstractMetaDataVistor(BeanMetaData bmd)
       {
          this.bmd = bmd;
+         this.visitorNodeStack = new Stack();
       }
 
       public void initialVisit(MetaDataVisitorNode node)
       {
+         visitorNodeStack.push(node);
+         try
+         {
+            internalInitialVisit(node);
+         }
+         finally
+         {
+            visitorNodeStack.pop();
+         }
       }
 
       public void describeVisit(MetaDataVisitorNode node)
       {
+         visitorNodeStack.push(node);
+         try
+         {
+            internalDescribeVisit(node);
+         }
+         finally
+         {
+            visitorNodeStack.pop();
+         }
       }
 
+      protected void internalInitialVisit(MetaDataVisitorNode node)
+      {
+      }
+
+      protected void internalDescribeVisit(MetaDataVisitorNode node)
+      {
+      }
+
       public KernelControllerContext getControllerContext()
       {
          return AbstractKernelControllerContext.this;
@@ -226,27 +287,28 @@
       {
          super(bmd);
       }
-      
+
       /**
        * Visit the bean metadata node, this is the starting point
        */
       public Object run()
       {
          bmd.initialVisit(this);
+         visitorNodeStack = null;
          return null;
       }
-      
+
       /**
        * Visit a node
-       * 
+       *
        * @param node the node
        */
-      public void initialVisit(MetaDataVisitorNode node)
+      protected void internalInitialVisit(MetaDataVisitorNode node)
       {
          boolean trace = log.isTraceEnabled();
          if (trace)
             log.trace("Initial visit node " + node);
-         
+
          // Visit the children of this node
          Iterator children = node.getChildren();
          if (children != null)
@@ -280,7 +342,6 @@
       public DescribedMetaDataVisitor(BeanMetaData bmd)
       {
          super(bmd);
-         this.visitorNodeStack = new Stack();
       }
 
       /**
@@ -288,9 +349,7 @@
        */
       public Object run()
       {
-         visitorNodeStack.push(bmd);
-//         bmd.describeVisit(this);
-         visitorNodeStack.pop();
+         bmd.describeVisit(this);
          visitorNodeStack = null;
          return null;
       }
@@ -300,7 +359,7 @@
        *
        * @param node the node
        */
-      public void describeVisit(MetaDataVisitorNode node)
+      protected void internalDescribeVisit(MetaDataVisitorNode node)
       {
          boolean trace = log.isTraceEnabled();
          if (trace)
@@ -314,15 +373,13 @@
             while (children.hasNext())
             {
                MetaDataVisitorNode child = (MetaDataVisitorNode) children.next();
-               visitorNodeStack.push(child);
                try
                {
-//                  child.describeVisit(this);
+                  child.describeVisit(this);
                }
                finally
                {
                   contextState = restoreState;
-                  visitorNodeStack.pop();
                }
             }
          }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CreateDestroyLifecycleAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CreateDestroyLifecycleAction.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CreateDestroyLifecycleAction.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -40,7 +40,7 @@
    {
       BeanMetaData metaData = context.getBeanMetaData();
       LifecycleMetaData lifecycle = metaData.getCreate();
-      if (lifecycle != null)
+      if (lifecycle != null && lifecycle.getMethodName() != null)
          return lifecycle.getMethodName();
       return "create";
    }
@@ -58,7 +58,7 @@
    {
       BeanMetaData metaData = context.getBeanMetaData();
       LifecycleMetaData lifecycle = metaData.getDestroy();
-      if (lifecycle != null)
+      if (lifecycle != null && lifecycle.getMethodName() != null)
          return lifecycle.getMethodName();
       return "destroy";
    }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/DescribeAction.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -63,13 +63,6 @@
          info = addAnnotations(context, metaData, info);
 
          DependencyInfo depends = context.getDependencyInfo();
-         // update 'placeholder' item with more info
-         Set updateableItems = depends.getIDependOn(UpdateableDependencyItem.class);
-         for(Iterator it = updateableItems.iterator(); it.hasNext();)
-         {
-            UpdateableDependencyItem updateableItem = (UpdateableDependencyItem) it.next();
-            updateableItem.update(metaData, info);
-         }
          // add custom dependencies (e.g. AOP layer).
          List dependencies = info.getDependencies();
          if (dependencies != null)

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/StartStopLifecycleAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/StartStopLifecycleAction.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/StartStopLifecycleAction.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -40,7 +40,7 @@
    {
       BeanMetaData metaData = context.getBeanMetaData();
       LifecycleMetaData lifecycle = metaData.getStart();
-      if (lifecycle != null)
+      if (lifecycle != null && lifecycle.getMethodName() != null)
          return lifecycle.getMethodName();
       return "start";
    }
@@ -58,7 +58,7 @@
    {
       BeanMetaData metaData = context.getBeanMetaData();
       LifecycleMetaData lifecycle = metaData.getStop();
-      if (lifecycle != null)
+      if (lifecycle != null && lifecycle.getMethodName() != null)
          return lifecycle.getMethodName();
       return "stop";
    }

Deleted: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/UpdateableDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/UpdateableDependencyItem.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/UpdateableDependencyItem.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,34 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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.kernel.plugins.dependency;
-
-import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.info.spi.BeanInfo;
-import org.jboss.dependency.spi.DependencyItem;
-
-/**
- * @author <a href="mailto:ales.justin at genera-lynx.com">Ales Justin</a>
- */
-public interface UpdateableDependencyItem extends DependencyItem
-{
-   void update(BeanMetaData metaData, BeanInfo info);
-}

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanCreateInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanCreateInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanCreateInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -42,6 +42,7 @@
    {
       AbstractBeanMetaData bean = (AbstractBeanMetaData) parent;
       AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+      lifecycle.setType("create");
       bean.setCreate(lifecycle);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanDestroyInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanDestroyInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanDestroyInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -42,6 +42,7 @@
    {
       AbstractBeanMetaData bean = (AbstractBeanMetaData) parent;
       AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+      lifecycle.setType("destroy");
       bean.setDestroy(lifecycle);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanFactoryCreateInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanFactoryCreateInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanFactoryCreateInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -42,6 +42,7 @@
    {
       GenericBeanFactoryMetaData bean = (GenericBeanFactoryMetaData) parent;
       AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+      lifecycle.setType("create");
       bean.setBeanCreate(lifecycle);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanFactoryStartInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanFactoryStartInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanFactoryStartInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -42,6 +42,7 @@
    {
       GenericBeanFactoryMetaData bean = (GenericBeanFactoryMetaData) parent;
       AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+      lifecycle.setType("start");
       bean.setBeanStart(lifecycle);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -459,6 +459,7 @@
                parameters = new ArrayList<ParameterMetaData>();
                constructor.setParameters(parameters);
             }
+            parameter.setIndex(parameters.size());
             parameters.add(parameter);
          }
       });
@@ -507,6 +508,7 @@
          {
             AbstractBeanMetaData bean = (AbstractBeanMetaData) parent;
             AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+            lifecycle.setType("create");
             bean.setCreate(lifecycle);
          }
       });
@@ -518,6 +520,7 @@
          {
             GenericBeanFactoryMetaData bean = (GenericBeanFactoryMetaData) parent;
             AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+            lifecycle.setType("create");
             bean.setBeanCreate(lifecycle);
          }
       });
@@ -529,6 +532,7 @@
          {
             AbstractBeanMetaData bean = (AbstractBeanMetaData) parent;
             AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+            lifecycle.setType("start");
             bean.setStart(lifecycle);
          }
       });
@@ -540,6 +544,7 @@
          {
             GenericBeanFactoryMetaData bean = (GenericBeanFactoryMetaData) parent;
             AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+            lifecycle.setType("start");
             bean.setBeanStart(lifecycle);
          }
       });
@@ -551,6 +556,7 @@
          {
             AbstractBeanMetaData bean = (AbstractBeanMetaData) parent;
             AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+            lifecycle.setType("stop");
             bean.setStop(lifecycle);
          }
       });
@@ -562,6 +568,7 @@
          {
             AbstractBeanMetaData bean = (AbstractBeanMetaData) parent;
             AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+            lifecycle.setType("destroy");
             bean.setDestroy(lifecycle);
          }
       });
@@ -600,6 +607,7 @@
                parameters = new ArrayList<ParameterMetaData>();
                lifecycle.setParameters(parameters);
             }
+            parameter.setIndex(parameters.size());
             parameters.add(parameter);
          }
       });

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanStartInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanStartInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanStartInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -42,6 +42,7 @@
    {
       AbstractBeanMetaData bean = (AbstractBeanMetaData) parent;
       AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+      lifecycle.setType("start");
       bean.setStart(lifecycle);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanStopInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanStopInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanStopInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -42,6 +42,7 @@
    {
       AbstractBeanMetaData bean = (AbstractBeanMetaData) parent;
       AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child;
+      lifecycle.setType("stop");
       bean.setStop(lifecycle);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/ConstructorParametersInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/ConstructorParametersInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/ConstructorParametersInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -52,6 +52,7 @@
          parameters = new ArrayList<ParameterMetaData>();
          constructor.setParameters(parameters);
       }
+      parameter.setIndex(parameters.size());
       parameters.add(parameter);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/InstallParametersInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/InstallParametersInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/InstallParametersInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -52,6 +52,7 @@
          parameters = new ArrayList<ParameterMetaData>();
          install.setParameters(parameters);
       }
+      parameter.setIndex(parameters.size());
       parameters.add(parameter);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/LifecycleParametersInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/LifecycleParametersInterceptor.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/LifecycleParametersInterceptor.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -52,6 +52,7 @@
          parameters = new ArrayList<ParameterMetaData>();
          lifecycle.setParameters(parameters);
       }
+      parameter.setIndex(parameters.size());
       parameters.add(parameter);
    }
 }

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnMultipleNameStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnMultipleNameStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnMultipleNameStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,13 +0,0 @@
-<?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="testerInterface" class="org.jboss.test.kernel.inject.support.SingletonTester"/>
-
-   <bean name="duplicateInterface" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-   <bean name="testObject" class="org.jboss.test.kernel.inject.support.AnnotatedNameStrictSimpleTestObject" />
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnMultipleTypeStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnMultipleTypeStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnMultipleTypeStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,13 +0,0 @@
-<?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="duplicateInterface" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-   <bean name="testObject" class="org.jboss.test.kernel.inject.support.AnnotatedTypeStrictSimpleTestObject" />
-
-   <bean name="testerInterface" class="org.jboss.test.kernel.inject.support.SingletonTester"/>
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnNullNameStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnNullNameStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnNullNameStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,9 +0,0 @@
-<?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.AnnotatedNameStrictSimpleTestObject" />
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnNullTypeStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnNullTypeStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnNullTypeStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,9 +0,0 @@
-<?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.AnnotatedTypeStrictSimpleTestObject" />
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnSingleNameStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnSingleNameStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnSingleNameStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,11 +0,0 @@
-<?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="testerInterface" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-   <bean name="testObject" class="org.jboss.test.kernel.inject.support.AnnotatedNameStrictSimpleTestObject" />
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnSingleTypeStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnSingleTypeStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/AnnSingleTypeStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,11 +0,0 @@
-<?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="duplicateInterface" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-   <bean name="testObject" class="org.jboss.test.kernel.inject.support.AnnotatedTypeStrictSimpleTestObject" />
-
-</deployment>

Added: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ConstructorContextualInjection.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ConstructorContextualInjection.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ConstructorContextualInjection.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,48 @@
+<?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="testObject1" class="org.jboss.test.kernel.inject.support.ConstructorInjectTestObject" >
+      <constructor
+            factoryClass="org.jboss.test.kernel.inject.support.ConstructorInjectTestObject"
+            factoryMethod="getInstance"
+            >
+         <parameter><inject/></parameter>
+      </constructor>
+   </bean>
+
+   <bean name="testObject2" class="org.jboss.test.kernel.inject.support.ConstructorInjectTestObject">
+      <constructor>
+         <parameter>test2</parameter>
+         <parameter><list elementClass="org.jboss.test.kernel.inject.support.TesterInterface"><inject/></list></parameter>
+      </constructor>
+   </bean>
+
+   <bean name="testObject3" class="org.jboss.test.kernel.inject.support.ConstructorInjectTestObject">
+      <constructor>
+         <parameter>1</parameter>
+         <parameter>test2</parameter>
+         <parameter><inject/></parameter>
+      </constructor>
+   </bean>
+
+   <bean name="testObject4" class="org.jboss.test.kernel.inject.support.ConstructorInjectTestObject">
+      <constructor><parameter><inject/></parameter></constructor>
+   </bean>
+
+<!--
+   <bean name="testObject5" class="org.jboss.test.kernel.inject.support.ConstructorInjectTestObject" >
+      <constructor factoryMethod="withParameter">
+         <factory bean="testObject6"/>
+         <parameter><inject/></parameter>
+      </constructor>
+   </bean>
+-->
+
+   <bean name="duplicateTester" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
+
+   <bean name="testObject6" class="org.jboss.test.kernel.inject.support.ConstructorInjectTestObject" />
+
+</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/IllegalParameterContextualInjection.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/IllegalParameterContextualInjection.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/IllegalParameterContextualInjection.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,15 +0,0 @@
-<?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="parameterObject1" class="org.jboss.test.kernel.inject.support.ParameterTestObject">
-      <constructor>
-         <parameter><inject/></parameter>
-      </constructor>
-   </bean>
-
-   <bean name="duplicateTester" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-</deployment>

Copied: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/LifecycleContextualInjection.xml (from rev 56014, projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ParameterContextualInjection.xml)
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ParameterContextualInjection.xml	2006-08-17 02:59:34 UTC (rev 56014)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/LifecycleContextualInjection.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,35 @@
+<?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="testObject1" class="org.jboss.test.kernel.inject.support.LifecycleInjectTestObject">
+      <create>
+         <parameter><inject/></parameter>
+      </create>
+      <start method="startMeUp">
+         <parameter><inject/></parameter>
+      </start>
+      <stop>
+         <parameter><inject/></parameter>
+      </stop>
+      <destroy method="destruction">
+         <parameter><inject/></parameter>
+      </destroy>
+   </bean>
+
+<!--
+   <bean name="testObject3" class="org.jboss.test.kernel.inject.support.LifecycleInjectTestObject">
+      <install method="installIt">
+         <parameter><inject/></parameter>
+      </install>
+      <install bean="testObject1" method="fromOutside">
+         <parameter><inject/></parameter>
+      </install>
+   </bean>
+-->
+
+   <bean name="duplicateTester" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
+
+</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/MultipleNameStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/MultipleNameStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/MultipleNameStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,15 +0,0 @@
-<?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="testerInterface" class="org.jboss.test.kernel.inject.support.SingletonTester"/>
-
-   <bean name="duplicateInterface" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-   <bean name="testObject" class="org.jboss.test.kernel.inject.support.SimpleTestObject">
-      <property name="testerInterface"><inject mode="ByName"/></property>
-   </bean>
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/MultipleTypeStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/MultipleTypeStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/MultipleTypeStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,15 +0,0 @@
-<?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.SimpleTestObject">
-      <property name="testerInterface"><inject/></property>
-   </bean>
-
-   <bean name="testerInterface" class="org.jboss.test.kernel.inject.support.SingletonTester"/>
-
-   <bean name="duplicateInterface" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/NullNameStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/NullNameStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/NullNameStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,11 +0,0 @@
-<?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.SimpleTestObject">
-      <property name="testerInterface"><inject mode="ByName"/></property>
-   </bean>
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/NullTypeStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/NullTypeStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/NullTypeStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,11 +0,0 @@
-<?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.SimpleTestObject">
-      <property name="testerInterface"><inject/></property>
-   </bean>
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ParameterContextualInjection.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ParameterContextualInjection.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/ParameterContextualInjection.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,15 +0,0 @@
-<?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="duplicateTester" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-   <bean name="parameterObject1" class="org.jboss.test.kernel.inject.support.ParameterTestObject">
-      <constructor>
-         <parameter><inject/></parameter>
-      </constructor>
-   </bean>
-
-</deployment>

Added: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/PropertyContextualInjection.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/PropertyContextualInjection.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/PropertyContextualInjection.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,49 @@
+<?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="testObject1" class="org.jboss.test.kernel.inject.support.PropertyInjectTestObject">
+      <property name="testerInterface"><inject/></property>
+   </bean>
+
+   <bean name="testObject2" class="org.jboss.test.kernel.inject.support.PropertyInjectTestObject">
+      <property name="duplicateTester"><inject type="ByName"/></property>
+   </bean>
+
+   <bean name="testObject3" class="org.jboss.test.kernel.inject.support.PropertyInjectTestObject">
+      <property name="collection">
+         <list elementClass="org.jboss.test.kernel.inject.support.TesterInterface">
+            <inject/>
+         </list>
+      </property>
+   </bean>
+
+<!--
+   <bean name="testObject4" class="org.jboss.test.kernel.inject.support.PropertyInjectTestObject">
+      <property name="map">
+         <map key="org.jboss.test.kernel.inject.support.TesterInterface" valueClass="org.jboss.test.kernel.inject.support.TesterInterface">
+            <entry>
+               <key><inject/></key>
+               <value><inject/></value>
+            </entry>
+         </map>
+      </property>
+   </bean>
+
+   <bean name="testObject5" class="org.jboss.test.kernel.inject.support.PropertyInjectTestObject">
+      <property name="map">
+         <map>
+            <entry >
+               <key>test</key>
+               <value class="org.jboss.test.kernel.inject.support.TesterInterface"><inject/></value>
+            </entry>
+         </map>
+      </property>
+   </bean>
+-->
+
+   <bean name="duplicateTester" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
+
+</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/SingleNameStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/SingleNameStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/SingleNameStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,13 +0,0 @@
-<?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="testerInterface" class="org.jboss.test.kernel.inject.support.SingletonTester"/>
-
-   <bean name="testObject" class="org.jboss.test.kernel.inject.support.SimpleTestObject">
-      <property name="testerInterface"><inject mode="ByName"/></property>
-   </bean>
-
-</deployment>

Deleted: projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/SingleTypeStrictTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/SingleTypeStrictTestCase.xml	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/org/jboss/test/kernel/inject/test/SingleTypeStrictTestCase.xml	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,13 +0,0 @@
-<?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.SimpleTestObject">
-      <property name="testerInterface"><inject/></property>
-   </bean>
-
-   <bean name="duplicateInterface" class="org.jboss.test.kernel.inject.support.DuplicateTester"/>
-
-</deployment>

Modified: projects/microcontainer/trunk/kernel/src/resources/schema/bean-deployer_2_0.xsd
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/schema/bean-deployer_2_0.xsd	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/resources/schema/bean-deployer_2_0.xsd	2006-08-17 12:04:48 UTC (rev 56022)
@@ -366,7 +366,7 @@
            e.g. 
            <bean name="ConstructMe" ...>
               <constructor factoryMethod="someMethod">
-                 <factory/>
+                 <factory>
                     <javabean xmlns="someOtherNamespace" class="com.acme.FactoryClass"/>
                  </factory>
               </constructor>

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/FactoryTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/FactoryTestCase.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/FactoryTestCase.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -23,8 +23,6 @@
 
 import java.util.ArrayList;
 
-import junit.framework.Test;
-
 import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
 import org.jboss.beans.metadata.plugins.AbstractConstructorMetaData;
 import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
@@ -35,6 +33,8 @@
 import org.jboss.test.kernel.config.support.SimpleBean;
 import org.jboss.test.kernel.config.support.SimpleBeanFactory;
 
+import junit.framework.Test;
+
 /**
  * Factory Test Case.
  * 

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedNameStrictSimpleTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedNameStrictSimpleTestObject.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedNameStrictSimpleTestObject.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,39 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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 org.jboss.beans.metadata.spi.annotations.Inject;
-import org.jboss.beans.metadata.spi.annotations.InjectType;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public class AnnotatedNameStrictSimpleTestObject extends AnnotatedSimpleTestObject
-{
-
-   @Inject(type = InjectType.BY_NAME)
-   public void setTesterInterface(TesterInterface testerInterface)
-   {
-      this.testerInterface = testerInterface;
-   }
-
-}

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedSimpleTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedSimpleTestObject.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedSimpleTestObject.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,37 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public abstract class AnnotatedSimpleTestObject implements TesterInterfaceGetter
-{
-
-   protected TesterInterface testerInterface;
-
-   public TesterInterface getTesterInterface()
-   {
-      return testerInterface;
-   }
-
-}

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedTypeStrictSimpleTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedTypeStrictSimpleTestObject.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/AnnotatedTypeStrictSimpleTestObject.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,38 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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 org.jboss.beans.metadata.spi.annotations.Inject;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public class AnnotatedTypeStrictSimpleTestObject extends AnnotatedSimpleTestObject
-{
-
-   @Inject
-   public void setTesterInterface(TesterInterface testerInterface)
-   {
-      this.testerInterface = testerInterface;
-   }
-
-}

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/ConstructorInjectTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/ConstructorInjectTestObject.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/ConstructorInjectTestObject.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,53 @@
+/*
+ * 
+ */
+
+package org.jboss.test.kernel.inject.support;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
+ */
+public class ConstructorInjectTestObject
+{
+
+   private TesterInterface testerInterface;
+   private List<TesterInterface> testerInterfaces;
+
+   public ConstructorInjectTestObject()
+   {
+   }
+
+   public ConstructorInjectTestObject(TesterInterface testerInterface)
+   {
+      this.testerInterface = testerInterface;
+   }
+
+   public ConstructorInjectTestObject(String someString, List<TesterInterface> testerInterfaces)
+   {
+      this.testerInterfaces = testerInterfaces;
+   }
+
+   public ConstructorInjectTestObject(int x, String someString, TesterInterface testerInterface)
+   {
+      this.testerInterface = testerInterface;
+   }
+
+   public static ConstructorInjectTestObject getInstance(TesterInterface ti)
+   {
+      return new ConstructorInjectTestObject(ti);
+   }
+
+   public ConstructorInjectTestObject withParameter(TesterInterface ti)
+   {
+      this.testerInterface = ti;
+      return this;
+   }
+
+   public TesterInterface getTesterInterface()
+   {
+      return testerInterface;
+   }
+
+}

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/LifecycleInjectTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/LifecycleInjectTestObject.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/LifecycleInjectTestObject.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,45 @@
+/*
+ * 
+ */
+
+package org.jboss.test.kernel.inject.support;
+
+/**
+ * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
+ */
+public class LifecycleInjectTestObject
+{
+
+   private TesterInterface testerInterface;
+
+   public void create(TesterInterface ti)
+   {
+      testerInterface = ti;
+   }
+
+   public void startMeUp(TesterInterface ti)
+   {
+      testerInterface = ti;
+   }
+
+   public void stop(TesterInterface ti)
+   {
+      testerInterface = ti;
+   }
+
+   public void destruction(TesterInterface ti)
+   {
+      testerInterface = ti;
+   }
+
+   public void installIt(TesterInterface ti)
+   {
+      testerInterface = ti;
+   }
+
+   public void fromOutside(TesterInterface ti)
+   {
+      testerInterface = ti;
+   }
+
+}

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/ParameterTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/ParameterTestObject.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/ParameterTestObject.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,42 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public class ParameterTestObject
-{
-
-   private DuplicateTester duplicateTester;
-
-   public ParameterTestObject(DuplicateTester duplicateTester)
-   {
-      this.duplicateTester = duplicateTester;
-   }
-
-   public DuplicateTester getDuplicateTester()
-   {
-      return duplicateTester;
-   }
-
-}

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/PropertyInjectTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/PropertyInjectTestObject.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/PropertyInjectTestObject.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,61 @@
+/*
+ * 
+ */
+
+package org.jboss.test.kernel.inject.support;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
+ */
+public class PropertyInjectTestObject
+{
+
+   private TesterInterface testerInterface;
+   private DuplicateTester duplicateTester;
+   private Collection collection;
+   private Map map;
+
+   public TesterInterface getTesterInterface()
+   {
+      return testerInterface;
+   }
+
+   public void setTesterInterface(TesterInterface testerInterface)
+   {
+      this.testerInterface = testerInterface;
+   }
+
+   public DuplicateTester getDuplicateTester()
+   {
+      return duplicateTester;
+   }
+
+   public void setDuplicateTester(DuplicateTester duplicateTester)
+   {
+      this.duplicateTester = duplicateTester;
+   }
+
+   public Collection getCollection()
+   {
+      return collection;
+   }
+
+   public void setCollection(Collection collection)
+   {
+      this.collection = collection;
+   }
+
+   public Map getMap()
+   {
+      return map;
+   }
+
+   public void setMap(Map map)
+   {
+      this.map = map;
+   }
+
+}

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/SimpleTestObject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/SimpleTestObject.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/SimpleTestObject.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,44 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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 org.jboss.beans.metadata.spi.annotations.Inject;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public class SimpleTestObject implements TesterInterfaceGetter
-{
-
-   private TesterInterface testerInterface;
-
-   public TesterInterface getTesterInterface()
-   {
-      return testerInterface;
-   }
-
-   public void setTesterInterface(TesterInterface testerInterface)
-   {
-      this.testerInterface = testerInterface;
-   }
-
-}

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/SingletonTester.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/SingletonTester.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/SingletonTester.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,34 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public class SingletonTester implements TesterInterface
-{
-
-   public void someMethod()
-   {
-   }
-
-}

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/TesterInterfaceGetter.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/TesterInterfaceGetter.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/support/TesterInterfaceGetter.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,30 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public interface TesterInterfaceGetter
-{
-   TesterInterface getTesterInterface();
-}

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ConstructorContextualInjectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ConstructorContextualInjectionTestCase.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ConstructorContextualInjectionTestCase.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,28 @@
+/*
+ * 
+ */
+
+package org.jboss.test.kernel.inject.test;
+
+import junit.framework.Test;
+
+/**
+ * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
+ */
+public class ConstructorContextualInjectionTestCase extends ContextualInjectionAdapter
+{
+   public ConstructorContextualInjectionTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(ConstructorContextualInjectionTestCase.class);
+   }
+
+   protected String getResource()
+   {
+      return "ConstructorContextualInjection.xml";
+   }
+}

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionAdapter.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionAdapter.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionAdapter.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,35 @@
+/*
+ * 
+ */
+
+package org.jboss.test.kernel.inject.test;
+
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.kernel.junit.MicrocontainerTest;
+
+/**
+ * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
+ */
+public abstract class ContextualInjectionAdapter extends MicrocontainerTest
+{
+
+   public ContextualInjectionAdapter(String name)
+   {
+      super(name);
+   }
+
+   protected abstract String getResource();
+
+   public void testInjection() throws Throwable
+   {
+      KernelDeployment deployment = deploy(getResource());
+      try
+      {
+         validate();
+      }
+      finally
+      {
+         undeploy(deployment);
+      }
+   }
+}

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	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ContextualInjectionTestSuite.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -41,8 +41,8 @@
    {
       TestSuite suite = new TestSuite("Contextal injection Tests");
 
-      suite.addTest(ParameterContextualInjectionTestCase.suite());
-      suite.addTest(IllegalParameterContextualInjectionTestCase.suite());
+      suite.addTest(ConstructorContextualInjectionTestCase.suite());
+      suite.addTest(LifecycleContextualInjectionTestCase.suite());
       suite.addTest(PropertyContextualInjectionTestCase.suite());
 
       return suite;

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/IllegalParameterContextualInjectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/IllegalParameterContextualInjectionTestCase.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/IllegalParameterContextualInjectionTestCase.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,53 +0,0 @@
-/*
- * 
- */
-
-package org.jboss.test.kernel.inject.test;
-
-import org.jboss.test.kernel.junit.MicrocontainerTest;
-import org.jboss.test.kernel.inject.support.ParameterTestObject;
-import org.jboss.kernel.spi.deployment.KernelDeployment;
-
-import junit.framework.Test;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public class IllegalParameterContextualInjectionTestCase extends MicrocontainerTest
-{
-   public IllegalParameterContextualInjectionTestCase(String name)
-   {
-      super(name);
-   }
-
-   public static Test suite()
-   {
-      return suite(IllegalParameterContextualInjectionTestCase.class);
-   }
-
-   public void testContextualInjection() throws Throwable
-   {
-      KernelDeployment deployment = null;
-      try
-      {
-         deployment = deploy("IllegalParameterContextualInjection.xml");
-         validate();
-
-         ParameterTestObject pto = (ParameterTestObject) getBean("parameterObject1");
-         assertNotNull(pto.getDuplicateTester());
-
-      }
-      catch(Throwable t)
-      {
-         getLog().info("Expected throwable: " + t);
-      }
-      finally
-      {
-         if (deployment != null)
-         {
-            undeploy(deployment);
-         }
-      }
-   }
-
-}

Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/LifecycleContextualInjectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/LifecycleContextualInjectionTestCase.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/LifecycleContextualInjectionTestCase.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -0,0 +1,28 @@
+/*
+ * 
+ */
+
+package org.jboss.test.kernel.inject.test;
+
+import junit.framework.Test;
+
+/**
+ * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
+ */
+public class LifecycleContextualInjectionTestCase extends ContextualInjectionAdapter
+{
+   public LifecycleContextualInjectionTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(LifecycleContextualInjectionTestCase.class);
+   }
+
+   protected String getResource()
+   {
+      return "LifecycleContextualInjection.xml";
+   }
+}

Deleted: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ParameterContextualInjectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ParameterContextualInjectionTestCase.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/ParameterContextualInjectionTestCase.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -1,62 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, 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 org.jboss.test.kernel.junit.MicrocontainerTest;
-import org.jboss.test.kernel.inject.support.TesterInterfaceGetter;
-import org.jboss.test.kernel.inject.support.ParameterTestObject;
-import org.jboss.kernel.spi.deployment.KernelDeployment;
-import junit.framework.Test;
-
-/**
- * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
- */
-public class ParameterContextualInjectionTestCase extends MicrocontainerTest
-{
-   public ParameterContextualInjectionTestCase(String name)
-   {
-      super(name);
-   }
-
-   public static Test suite()
-   {
-      return suite(ParameterContextualInjectionTestCase.class);
-   }
-
-   public void testContextualInjection() throws Throwable
-   {
-      KernelDeployment deployment = deploy("ParameterContextualInjection.xml");
-      try
-      {
-         validate();
-
-         ParameterTestObject pto = (ParameterTestObject) getBean("parameterObject1");
-         assertNotNull(pto.getDuplicateTester());
-
-      }
-      finally
-      {
-         undeploy(deployment);
-      }
-   }
-
-}

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/PropertyContextualInjectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/PropertyContextualInjectionTestCase.java	2006-08-17 12:06:44 UTC (rev 56021)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/inject/test/PropertyContextualInjectionTestCase.java	2006-08-17 12:04:48 UTC (rev 56022)
@@ -21,22 +21,13 @@
 */
 package org.jboss.test.kernel.inject.test;
 
-import org.jboss.test.kernel.junit.MicrocontainerTest;
-import org.jboss.test.kernel.inject.support.TesterInterfaceGetter;
-import org.jboss.kernel.spi.deployment.KernelDeployment;
 import junit.framework.Test;
 
 /**
  * @author <a href="mailto:ales.justin at gmail.com">Ales Justin</a>
  */
-public class PropertyContextualInjectionTestCase extends MicrocontainerTest
+public class PropertyContextualInjectionTestCase extends ContextualInjectionAdapter
 {
-   private static final String[] PREFIX = new String[]{"", "Ann"};
-   private static final String[] NUMBER = new String[]{"Single", "Multiple", "Null"};
-   private static final String[] MODE = new String[]{"Type", "Name"};
-   private static final String[] TYPE = new String[]{"Strict"};
-   private static final String TEST_CASE_SUFFIX = "TestCase.xml";
-
    public PropertyContextualInjectionTestCase(String name)
    {
       super(name);
@@ -47,69 +38,9 @@
       return suite(PropertyContextualInjectionTestCase.class);
    }
 
-   public void testContextualInjection() throws Throwable
+   protected String getResource()
    {
-      enableTrace("org.jboss.kernel.plugins.dependency");
-//      enableTrace("org.jboss.dependency");
-      for(int i = 0; i < PropertyContextualInjectionTestCase.PREFIX.length; i++)
-      {
-         for(int j = 0; j < PropertyContextualInjectionTestCase.NUMBER.length; j++)
-         {
-            for(int k = 0; k < PropertyContextualInjectionTestCase.MODE.length; k++)
-            {
-               for(int l = 0; l < PropertyContextualInjectionTestCase.TYPE.length; l++)
-               {
-                  executeTestCase(PropertyContextualInjectionTestCase.PREFIX[i] + PropertyContextualInjectionTestCase.NUMBER[j] + PropertyContextualInjectionTestCase.MODE[k] + PropertyContextualInjectionTestCase.TYPE[l] + PropertyContextualInjectionTestCase.TEST_CASE_SUFFIX);
-               }
-            }
-         }
-      }
+      return "PropertyContextualInjection.xml";
    }
 
-   private void executeTestCase(String testCaseName) throws Throwable
-   {
-      getLog().info("Testing contextual injection: "+ testCaseName);
-      KernelDeployment deployment = null;
-      try
-      {
-         deployment = deploy(testCaseName);
-
-         validate();
-
-         TesterInterfaceGetter interfaceGetter = (TesterInterfaceGetter) getBean("testObject");
-         boolean isSingle = testCaseName.indexOf("Single") >= 0;
-         assertFalse(interfaceGetter == null && isStrict(testCaseName) && isSingle);
-      }
-      catch(Throwable t)
-      {
-         // check if we expect Throwable - e.g. NullTypeStrictTestCase, ...
-         if (isThrowableExpected(testCaseName) == false)
-         {
-            fail("Unexpected injection failure: " + t.toString());
-         }
-         // get some info about 'failure'
-         getLog().info(t);
-      }
-      finally {
-         if (deployment != null)
-         {
-            undeploy(deployment);
-         }
-      }
-   }
-
-   // MultipleNameStrictTC is excluded - unique name requirement
-   private boolean isThrowableExpected(String testCaseName)
-   {
-      boolean isMultiple = testCaseName.indexOf("Multiple") >= 0;
-      boolean isNull = testCaseName.indexOf("Null") >= 0;
-      boolean isName = testCaseName.indexOf("Name") >= 0;
-      return isMultiple || (isNull && isStrict(testCaseName) || (isNull && isName));
-   }
-
-   private boolean isStrict(String testCaseName)
-   {
-      return testCaseName.indexOf("Strict") >= 0;
-   }
-
 }




More information about the jboss-cvs-commits mailing list