[webbeans-commits] Webbeans SVN: r923 - in ri/trunk/webbeans-ri/src: main/java/org/jboss/webbeans/injection and 3 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Tue Jan 13 13:54:36 EST 2009


Author: dallen6
Date: 2009-01-13 13:54:36 -0500 (Tue, 13 Jan 2009)
New Revision: 923

Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/SimpleBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/InjectionPointImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/InjectionPointProvider.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectionPointTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/ConstructorInjectionPointBean.java
Log:
Added method and constructor parameter injection points for InjectionPoint beans; completed the constructor test.

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java	2009-01-13 17:14:25 UTC (rev 922)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java	2009-01-13 18:54:36 UTC (rev 923)
@@ -419,7 +419,7 @@
       for (AnnotatedItem<?, ?> annotatedInjectionPoint : annotatedInjectionPoints)
       {
          AnnotatedMember<?, ?> member = (AnnotatedMember<?, ?>) annotatedInjectionPoint;
-         injectionsPoints.add(InjectionPointImpl.of(member));
+         injectionsPoints.add(InjectionPointImpl.of(member, this));
       }
       return injectionsPoints;
    }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/SimpleBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/SimpleBean.java	2009-01-13 17:14:25 UTC (rev 922)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/SimpleBean.java	2009-01-13 18:54:36 UTC (rev 923)
@@ -235,7 +235,7 @@
 
       for (AnnotatedMethod<?> method : annotatedItem.getAnnotatedMethods(manager.getEjbResolver().getEJBAnnotation()))
       {
-         InjectionPoint injectionPoint = new InjectionPointImpl(method, this);
+         InjectionPoint injectionPoint = InjectionPointImpl.of(method, this);
          Object ejbInstance = manager.getEjbResolver().resolveEjb(injectionPoint, manager.getNaming());
          method.invoke(beanInstance, ejbInstance);
       }
@@ -253,7 +253,7 @@
 
       for (AnnotatedMethod<?> method : annotatedItem.getAnnotatedMethods(manager.getEjbResolver().getPersistenceContextAnnotation()))
       {
-         InjectionPoint injectionPoint = new InjectionPointImpl(method, this);
+         InjectionPoint injectionPoint = InjectionPointImpl.of(method, this);
          Object puInstance = manager.getEjbResolver().resolvePersistenceContext(injectionPoint, manager.getNaming());
          method.invoke(beanInstance, puInstance);
       }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/InjectionPointImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/InjectionPointImpl.java	2009-01-13 17:14:25 UTC (rev 922)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/InjectionPointImpl.java	2009-01-13 18:54:36 UTC (rev 923)
@@ -31,7 +31,9 @@
 import javax.webbeans.Standard;
 import javax.webbeans.manager.Bean;
 
+import org.jboss.webbeans.introspector.AnnotatedField;
 import org.jboss.webbeans.introspector.AnnotatedMember;
+import org.jboss.webbeans.introspector.AnnotatedParameter;
 
 /**
  * The container provided implementation for InjectionPoint beans
@@ -43,6 +45,7 @@
 public class InjectionPointImpl implements InjectionPoint
 {
    private final AnnotatedMember<?, ?> memberInjectionPoint;
+   private final AnnotatedParameter<?> parameterInjectionPoint;
    private final Bean<?> bean;
 
    /**
@@ -52,17 +55,43 @@
     * @param bean The bean being injected
     * @param beanInstance The instance of the bean being injected
     */
-   public InjectionPointImpl(AnnotatedMember<?, ?> injectedMember, Bean<?> bean)
+   public InjectionPointImpl(AnnotatedField<?> injectedMember, Bean<?> bean)
    {
       this.memberInjectionPoint = injectedMember;
+      this.parameterInjectionPoint = null;
       this.bean = bean;
    }
 
-   public static InjectionPointImpl of(AnnotatedMember<?, ?> member)
+   /**
+    * Creates a new injection point representing a parameter to a constructor or method.
+    * 
+    * @param injectedMember The constructor or method member
+    * @param parameterInjectionPoint The parameter
+    * @param bean The bean owning the injectedMember
+    */
+   public InjectionPointImpl(AnnotatedMember<?, ?> injectedMember, AnnotatedParameter<?> parameterInjectionPoint, Bean<?> bean)
    {
-      return new InjectionPointImpl(member, null);
+      this.memberInjectionPoint = injectedMember;
+      this.parameterInjectionPoint = parameterInjectionPoint;
+      this.bean = bean;
    }
 
+   /**
+    * Returns a new injection point of any type.  If this is a parameter, the
+    * information about the parameter is null.
+    * 
+    * @param member The member being injected
+    * @param bean The bean
+    * @return a new injection point metadata bean
+    */
+   public static InjectionPointImpl of(AnnotatedMember<?, ?> member, Bean<?> bean)
+   {
+      if (member instanceof AnnotatedField)
+         return new InjectionPointImpl((AnnotatedField<?>) member, bean);
+      else
+         return new InjectionPointImpl(member, null, bean);
+   }
+
    public boolean isField()
    {
       return getMember() instanceof Field;
@@ -100,7 +129,10 @@
 
    public Set<Annotation> getBindings()
    {
-      return this.memberInjectionPoint.getBindingTypes();
+      if (isField())
+         return this.memberInjectionPoint.getBindingTypes();
+      else
+         return this.parameterInjectionPoint.getBindingTypes();
    }
 
    public Member getMember()
@@ -110,7 +142,10 @@
 
    public Type getType()
    {
-      return this.memberInjectionPoint.getType();
+      if (isField())
+         return this.memberInjectionPoint.getType();
+      else
+         return this.parameterInjectionPoint.getType();
    }
 
    public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/InjectionPointProvider.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/InjectionPointProvider.java	2009-01-13 17:14:25 UTC (rev 922)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/InjectionPointProvider.java	2009-01-13 18:54:36 UTC (rev 923)
@@ -23,7 +23,9 @@
 import javax.webbeans.InjectionPoint;
 import javax.webbeans.manager.Bean;
 
+import org.jboss.webbeans.introspector.AnnotatedField;
 import org.jboss.webbeans.introspector.AnnotatedMember;
+import org.jboss.webbeans.introspector.AnnotatedParameter;
 
 /**
  * Used to create the container provided implementation for the InjectionPoint
@@ -38,6 +40,7 @@
 {
    private final Stack<Bean<?>> beans = new Stack<Bean<?>>();
    private final Stack<AnnotatedMember<?, ? extends Member>> injectionPoints = new Stack<AnnotatedMember<?, ? extends Member>>();
+   private final Stack<AnnotatedParameter<?>> injectionParameters = new Stack<AnnotatedParameter<?>>();
 
    /**
     * Pushes the current bean that is being instantiated onto a stack for later
@@ -61,6 +64,11 @@
       injectionPoints.push(injectedMember);
    }
 
+   public void pushInjectionParameter(AnnotatedParameter<?> parameter)
+   {
+      injectionParameters.push(parameter);
+   }
+
    /**
     * Pops the bean from the stack. This should be called whenever all
     * processing is complete for instantiating a bean.
@@ -79,6 +87,11 @@
       injectionPoints.pop();
    }
 
+   public void popInjectionParameter()
+   {
+      injectionParameters.pop();
+   }
+
    /**
     * Returns the InjectionPoint where the current bean under construction is
     * being injected.
@@ -87,7 +100,11 @@
     */
    public InjectionPoint getPreviousInjectionPoint()
    {
-      return new InjectionPointImpl(getPreviousInjectionMember(), getPreviousBean());
+      AnnotatedMember<?, ? extends Member> member = getPreviousInjectionMember();
+      if (member instanceof AnnotatedField)
+         return new InjectionPointImpl((AnnotatedField<?>) member, getPreviousBean());
+      else
+         return new InjectionPointImpl(member, getPreviousParameter(), getPreviousBean());
    }
 
    /**
@@ -98,13 +115,18 @@
     */
    public InjectionPoint getCurrentInjectionPoint()
    {
-      return new InjectionPointImpl(getCurrentInjectionMember(), getCurrentBean());
+      AnnotatedMember<?, ? extends Member> member = getCurrentInjectionMember();
+      if (member instanceof AnnotatedField)
+         return new InjectionPointImpl((AnnotatedField<?>) member, getCurrentBean());
+      else
+         return new InjectionPointImpl(member, getCurrentParameter(), getCurrentBean());
    }
 
    protected Bean<?> getCurrentBean()
    {
       return beans.peek();
    }
+
    protected AnnotatedMember<?, ? extends Member> getCurrentInjectionMember()
    {
       if (injectionPoints.size() > 0)
@@ -113,6 +135,11 @@
          return null;
    }
 
+   protected AnnotatedParameter<?> getCurrentParameter()
+   {
+      return injectionParameters.peek();
+   }
+
    protected Bean<?> getPreviousBean()
    {
       Bean<?> currentBean = beans.pop();
@@ -139,4 +166,22 @@
       }
       return result;
    }
+
+   protected AnnotatedParameter<?> getPreviousParameter()
+   {
+      AnnotatedParameter<?> result = null;
+      if (getCurrentInjectionMember() instanceof AnnotatedField)
+      {
+         // Since no parameter is pushed, top of stack is the one wanted
+         result = injectionParameters.peek();
+      }
+      else
+      {
+         AnnotatedParameter<?> currentParameter = injectionParameters.pop();
+         result = injectionParameters.peek();
+         injectionParameters.push(currentParameter);
+      }
+      return result;
+   }
+
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java	2009-01-13 17:14:25 UTC (rev 922)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java	2009-01-13 18:54:36 UTC (rev 923)
@@ -220,7 +220,9 @@
             }
             else
             {
+               injectionPointProvider.pushInjectionParameter(param);
                parameterValues[i] = param.getValue(manager);
+               injectionPointProvider.popInjectionParameter();
             }
          }
       }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectionPointTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectionPointTest.java	2009-01-13 17:14:25 UTC (rev 922)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectionPointTest.java	2009-01-13 18:54:36 UTC (rev 923)
@@ -148,7 +148,7 @@
       assert false;
    }
 
-   @Test(groups = { "broken", "injectionPoint" })
+   @Test(groups = { "injectionPoint" })
    @SpecAssertion(section = "5.11")
    public void testGetMemberConstructor()
    {
@@ -163,6 +163,10 @@
          BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
          assert beanWithInjectionPoint.getInjectedMetadata() != null;
          assert Constructor.class.isAssignableFrom(beanWithInjectionPoint.getInjectedMetadata().getMember().getClass());
+         
+         // Since the type and bindings must correspond to the parameter, check them
+         assert beanWithInjectionPoint.getInjectedMetadata().getType().equals(BeanWithInjectionPointMetadata.class);
+         assert beanWithInjectionPoint.getInjectedMetadata().getBindings().contains(new CurrentBinding());
       }
       finally
       {

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/ConstructorInjectionPointBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/ConstructorInjectionPointBean.java	2009-01-13 17:14:25 UTC (rev 922)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/ConstructorInjectionPointBean.java	2009-01-13 18:54:36 UTC (rev 923)
@@ -17,6 +17,7 @@
 package org.jboss.webbeans.test.beans;
 
 import javax.webbeans.Current;
+import javax.webbeans.Initializer;
 
 /**
  * Test bean to inject a bean using injection point metadata into a constructor
@@ -28,6 +29,7 @@
 {
    private BeanWithInjectionPointMetadata injectedBean;
 
+   @Initializer
    public ConstructorInjectionPointBean(@Current BeanWithInjectionPointMetadata injectedBean)
    {
       this.injectedBean = injectedBean;




More information about the weld-commits mailing list