Skip to content

Commit

Permalink
WELDX-136
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Sep 8, 2010
1 parent f02296e commit dd27ea7
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
Expand Up @@ -418,6 +418,7 @@ void createGenericBeans(@Observes AfterBeanDiscovery event, BeanManager beanMana

// Register the GenericProduct bean
event.addBean(createGenericProductBean(beanManager, genericConfiguration));
event.addBean(createGenericProductAnnotatedMemberBean(beanManager, genericConfiguration));

if (genericBeanProducerMethods.containsKey(genericConfigurationType))
{
Expand Down Expand Up @@ -522,6 +523,31 @@ public T create(Bean<T> bean, CreationalContext<T> ctx)
});
return builder.create();
}

private Bean<AnnotatedMember<?>> createGenericProductAnnotatedMemberBean(BeanManager beanManager, final Annotation genericConfiguration)
{
// We don't have a bean created for this generic configuration annotation. Create it, store it to be added later
Synthetic syntheticQualifier = productSyntheticProvider.get(genericConfiguration);

@SuppressWarnings("unchecked")
final ProducerHolder<?, ?> holder = genericProducers.get(genericConfiguration);

// TODO make this passivation capable?
BeanBuilder<AnnotatedMember<?>> builder = new BeanBuilder<AnnotatedMember<?>>(beanManager).setBeanClass(AnnotatedMember.class).setQualifiers(Arrays2.<Annotation> asSet(syntheticQualifier)).setBeanLifecycle(new BeanLifecycle<AnnotatedMember<?>>()
{

public void destroy(Bean<AnnotatedMember<?>> bean, AnnotatedMember<?> instance, CreationalContext<AnnotatedMember<?>> ctx)
{
// No-op
}

public AnnotatedMember<?> create(Bean<AnnotatedMember<?>> bean, CreationalContext<AnnotatedMember<?>> ctx)
{
return holder.getMember();
}
});
return builder.create();
}

/**
* Generate a bean to be used to produce the generic bean for each generic
Expand Down
Expand Up @@ -17,6 +17,8 @@
package org.jboss.weld.extensions.test.bean.generic.field;

import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.AnnotatedMember;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;

import org.jboss.weld.extensions.bean.generic.GenericProduct;
Expand All @@ -36,6 +38,9 @@ public class Garply
@Inject @GenericProduct
private Waldo waldo;

@Inject @GenericProduct
private AnnotatedMember<?> annotatedMember;

@Produces @WaldoName
public String getWaldoName()
{
Expand All @@ -47,4 +52,9 @@ public Waldo getWaldo()
return waldo;
}

public AnnotatedMember<?> getAnnotatedMember()
{
return annotatedMember;
}

}
Expand Up @@ -20,6 +20,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import javax.inject.Inject;

Expand Down Expand Up @@ -82,5 +83,14 @@ public void testGeneric()

assertEquals("Pete", waldoName1);
assertEquals("Stuart", waldoName2);

// Check injection of generic product injection point
assertNotNull(garply1.getAnnotatedMember());
assertTrue(garply1.getAnnotatedMember().isAnnotationPresent(Service.class));
assertEquals(1, garply1.getAnnotatedMember().getAnnotation(Service.class).value());

assertNotNull(garply2.getAnnotatedMember());
assertTrue(garply2.getAnnotatedMember().isAnnotationPresent(Service.class));
assertEquals(2, garply2.getAnnotatedMember().getAnnotation(Service.class).value());
}
}

0 comments on commit dd27ea7

Please sign in to comment.