[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