[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