[weld-commits] Weld SVN: r5994 - in extensions/trunk/genericbeans/src: test/java/org/jboss/weld/extensions/genericbeans/test and 1 other directory.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Wed Mar 3 16:49:14 EST 2010


Author: swd847
Date: 2010-03-03 16:49:14 -0500 (Wed, 03 Mar 2010)
New Revision: 5994

Added:
   extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericConstructorArgument.java
   extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/NormalBean.java
Modified:
   extensions/trunk/genericbeans/src/main/java/org/jboss/weld/extensions/genericbeans/FieldSetter.java
   extensions/trunk/genericbeans/src/main/java/org/jboss/weld/extensions/genericbeans/GenericExtension.java
   extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericBeanTest.java
   extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericMain.java
   extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericProducer.java
   extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/InjectedBean.java
Log:
removed the @InjectGeneric annotation


Modified: extensions/trunk/genericbeans/src/main/java/org/jboss/weld/extensions/genericbeans/FieldSetter.java
===================================================================
--- extensions/trunk/genericbeans/src/main/java/org/jboss/weld/extensions/genericbeans/FieldSetter.java	2010-03-03 18:47:14 UTC (rev 5993)
+++ extensions/trunk/genericbeans/src/main/java/org/jboss/weld/extensions/genericbeans/FieldSetter.java	2010-03-03 21:49:14 UTC (rev 5994)
@@ -32,7 +32,7 @@
       Set<Bean<?>> beans = beanManager.getBeans(field.getType(), qualifier);
       if (beans.size() == 0)
       {
-         throw new RuntimeException("Could not resolve bean for Generic Producer field " + field.getDeclaringClass() + "." + field.getName());
+         throw new RuntimeException("Could not resolve bean for Generic Producer field " + field.getDeclaringClass() + "." + field.getName() + " Type: " + field.getType() + " Qualifiers:" + qualifier);
       }
       if (beans.size() > 1)
       {

Modified: extensions/trunk/genericbeans/src/main/java/org/jboss/weld/extensions/genericbeans/GenericExtension.java
===================================================================
--- extensions/trunk/genericbeans/src/main/java/org/jboss/weld/extensions/genericbeans/GenericExtension.java	2010-03-03 18:47:14 UTC (rev 5993)
+++ extensions/trunk/genericbeans/src/main/java/org/jboss/weld/extensions/genericbeans/GenericExtension.java	2010-03-03 21:49:14 UTC (rev 5994)
@@ -13,10 +13,12 @@
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.Extension;
@@ -70,11 +72,11 @@
             genericBeans.put(an.value(), new HashSet<AnnotatedType<?>>());
          }
          genericBeans.get(an.value()).add(type);
-         // we will install this bean later
+         // we will install (multiple copies of) this bean later
          event.veto();
 
       }
-
+      //make note of any producer fields that produce generic beans
       for (Object f : type.getFields())
       {
          AnnotatedField<?> field = (AnnotatedField<?>) f;
@@ -100,6 +102,9 @@
       }
    }
 
+   /**
+    * wraps InjectionTarget to initialise producer fields that produce generic beans
+    */
    public <T> void processInjectionTarget(@Observes ProcessInjectionTarget<T> event, BeanManager beanManager)
    {
       Class javaClass = event.getAnnotatedType().getJavaClass();
@@ -118,6 +123,9 @@
       }
    }
 
+   /**
+    * Installs the generic beans. 
+    */
    public void afterBeanDiscovery(@Observes AfterBeanDiscovery event, BeanManager beanManager)
    {
       for (Entry<Class<?>, Set<AnnotatedType<?>>> i : genericBeans.entrySet())
@@ -136,13 +144,9 @@
                   for (AnnotatedField<?> f : rt.getFields())
                   {
                      ReannotatedField<?> field = (ReannotatedField<?>) f;
-                     if (field.isAnnotationPresent(InjectGeneric.class))
+
+                     if (field.isAnnotationPresent(Inject.class))
                      {
-                        field.define(newQualifier);
-                        field.define(new InjectLiteral());
-                     }
-                     else if (field.isAnnotationPresent(Inject.class))
-                     {
                         //if this is a configuration injection point
                         if (conc.annotationType().isAssignableFrom(field.getJavaMember().getType()))
                         {
@@ -151,20 +155,69 @@
                            {
                            });
                         }
+                        else
+                        {
+                           //check to see if we should be injecting a generic bean
+                           //we do this by checking if there are any beans that can be injected into this point
+                           //if there is not then we assume it is a generic injection point
+                           //this has the downside that if it is actually a deployment error then it will confuse the user
+                           Annotation[] qls = getQualifiers(field.getAnnotations(), beanManager);
+                           Set<Bean<?>> beans = beanManager.getBeans(field.getJavaMember().getType(), qls);
+                           if (beans.isEmpty())
+                           {
+                              field.define(newQualifier);
+                           }
+                        }
                      }
+                     else if (field.isAnnotationPresent(Produces.class))
+                     {
+                        //TODO: register a producer with the appropriate qualifier
+                     }
                   }
                   for (AnnotatedMethod<?> m : rt.getMethods())
                   {
-                     for (AnnotatedParameter<?> a : m.getParameters())
+                     //TODO: need to properly handle Observer methods and Disposal methods
+                     if (m.isAnnotationPresent(Produces.class))
                      {
-                        ReannotatedParameter<?> param = (ReannotatedParameter<?>) a;
-                        if (param.isAnnotationPresent(InjectGeneric.class))
+                        //TODO: we need to register the producer bean, so this is not very useful at the moment
+                        for (AnnotatedParameter<?> pm : m.getParameters())
                         {
-                           param.define(newQualifier);
-                           param.define(new InjectLiteral());
+                           ReannotatedParameter<?> param = (ReannotatedParameter<?>) pm;
+
+                           Class paramType = m.getJavaMember().getParameterTypes()[param.getPosition()];
+
+                           //check to see if we should be injecting a generic bean
+                           //we do this by checking if there are any beans that can be injected into this point
+                           //if there is not then we assume it is a generic injection point
+                           //this has the downside that if it is actually a deployment error then it will confuse the user
+                           Annotation[] qls = getQualifiers(param.getAnnotations(), beanManager);
+                           Set<Bean<?>> beans = beanManager.getBeans(paramType, qls);
+                           if (beans.isEmpty())
+                           {
+                              param.define(newQualifier);
+                           }
                         }
                      }
                   }
+
+                  for (AnnotatedConstructor<?> m : rt.getConstructors())
+                  {
+                     if (m.isAnnotationPresent(Inject.class))
+                     {
+                        for (AnnotatedParameter<?> pm : m.getParameters())
+                        {
+                           ReannotatedParameter<?> param = (ReannotatedParameter<?>) pm;
+
+                           Class paramType = m.getJavaMember().getParameterTypes()[param.getPosition()];
+                           Annotation[] qls = getQualifiers(param.getAnnotations(), beanManager);
+                           Set<Bean<?>> beans = beanManager.getBeans(paramType, qls);
+                           if (beans.isEmpty())
+                           {
+                              param.define(newQualifier);
+                           }
+                        }
+                     }
+                  }
                   InjectionTarget<?> it = beanManager.createInjectionTarget(rt);
 
                   it = new GenericBeanInjectionTargetWrapper(rt, it, conc);
@@ -188,4 +241,22 @@
       return qualifierMap.get(a);
    }
 
+   static Annotation[] getQualifiers(Set<Annotation> annotations, BeanManager manager)
+   {
+      List<Annotation> qualifiers = new ArrayList<Annotation>();
+      for (Annotation a : annotations)
+      {
+         if (manager.isQualifier(a.annotationType()))
+         {
+            qualifiers.add(a);
+         }
+      }
+      Annotation[] qls = new Annotation[qualifiers.size()];
+      for (int j = 0; j < qls.length; ++j)
+      {
+         qls[j] = qualifiers.get(j);
+      }
+      return qls;
+   }
+
 }

Modified: extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericBeanTest.java
===================================================================
--- extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericBeanTest.java	2010-03-03 18:47:14 UTC (rev 5993)
+++ extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericBeanTest.java	2010-03-03 21:49:14 UTC (rev 5994)
@@ -7,11 +7,12 @@
    @Test
    public void testGeneric()
    {
+      //TODO: This needs to be split up into lots of little tests
       InjectedBean bean = getReference(InjectedBean.class);
       assert bean.main1.getValue().equals("hello1");
       assert bean.main2.getValue().equals("hello2");
       assert bean.main1.getNoData() == null;
       assert bean.main2.getNoData() == null;
-
+      assert bean.main2.normalBean != null;
    }
 }

Added: extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericConstructorArgument.java
===================================================================
--- extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericConstructorArgument.java	                        (rev 0)
+++ extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericConstructorArgument.java	2010-03-03 21:49:14 UTC (rev 5994)
@@ -0,0 +1,18 @@
+package org.jboss.weld.extensions.genericbeans.test;
+
+import javax.inject.Inject;
+
+import org.jboss.weld.extensions.genericbeans.Generic;
+
+ at Generic(TestAnnotation.class)
+public class GenericConstructorArgument
+{
+   @Inject
+   TestAnnotation data;
+
+   public String getValue()
+   {
+      return data.value();
+   }
+
+}

Modified: extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericMain.java
===================================================================
--- extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericMain.java	2010-03-03 18:47:14 UTC (rev 5993)
+++ extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericMain.java	2010-03-03 21:49:14 UTC (rev 5994)
@@ -1,14 +1,26 @@
 package org.jboss.weld.extensions.genericbeans.test;
 
+import javax.inject.Inject;
+
 import org.jboss.weld.extensions.genericbeans.Generic;
-import org.jboss.weld.extensions.genericbeans.InjectGeneric;
 
 @Generic(TestAnnotation.class)
 public class GenericMain
 {
-   @InjectGeneric
+   @Inject
+   public GenericMain(GenericConstructorArgument args)
+   {
+      constArgs = args;
+   }
+
+   @Inject
    GenericDep dep;
 
+   @Inject
+   NormalBean normalBean;
+
+   GenericConstructorArgument constArgs;
+
    public String getValue()
    {
       return dep.getValue();

Modified: extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericProducer.java
===================================================================
--- extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericProducer.java	2010-03-03 18:47:14 UTC (rev 5993)
+++ extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/GenericProducer.java	2010-03-03 21:49:14 UTC (rev 5994)
@@ -13,4 +13,5 @@
    @Produces
    @TestAnnotation("hello2")
    GenericMain main2;
+
 }

Modified: extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/InjectedBean.java
===================================================================
--- extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/InjectedBean.java	2010-03-03 18:47:14 UTC (rev 5993)
+++ extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/InjectedBean.java	2010-03-03 21:49:14 UTC (rev 5994)
@@ -4,9 +4,12 @@
 
 public class InjectedBean
 {
-   @Inject @SomeQualifier(1) 
+   @Inject
+   @SomeQualifier(1)
    public GenericMain main1;
-   
-   @Inject @SomeQualifier(2) 
+
+   @Inject
+   @SomeQualifier(2)
    public GenericMain main2;
+
 }

Added: extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/NormalBean.java
===================================================================
--- extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/NormalBean.java	                        (rev 0)
+++ extensions/trunk/genericbeans/src/test/java/org/jboss/weld/extensions/genericbeans/test/NormalBean.java	2010-03-03 21:49:14 UTC (rev 5994)
@@ -0,0 +1,6 @@
+package org.jboss.weld.extensions.genericbeans.test;
+
+public class NormalBean
+{
+
+}



More information about the weld-commits mailing list