Author: swd847
Date: 2010-07-16 00:17:08 -0400 (Fri, 16 Jul 2010)
New Revision: 6662
Modified:
core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java
core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java
core/trunk/tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans/MultipleBeansExtension.java
core/trunk/tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans/MultipleBeansTest.java
Log:
WELD-485
Modified: core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java 2010-07-15
10:47:59 UTC (rev 6661)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java 2010-07-16
04:17:08 UTC (rev 6662)
@@ -19,6 +19,7 @@
import static
org.jboss.weld.logging.messages.BootstrapMessage.BEAN_IS_BOTH_INTERCEPTOR_AND_DECORATOR;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.Set;
import javax.decorator.Decorator;
@@ -93,6 +94,27 @@
return this;
}
+ public void fireProcessAnnotatedTypeForTypesAddedThroughTheSPI()
+ {
+ Iterator<WeldClass<?>> it = classes.iterator();
+ ClassTransformer classTransformer =
Container.instance().services().get(ClassTransformer.class);
+ Set<WeldClass<?>> transformed = new
HashSet<WeldClass<?>>();
+ while (it.hasNext())
+ {
+ WeldClass<?> c = it.next();
+ if (!c.isDiscovered())
+ {
+ it.remove();
+ ProcessAnnotatedTypeImpl<?> event =
ProcessAnnotatedTypeImpl.fire(getManager(), c);
+ if (!event.isVeto())
+ {
+ transformed.add(classTransformer.loadClass(event.getAnnotatedType()));
+ }
+ }
+ }
+ classes.addAll(transformed);
+ }
+
public BeanDeployer createBeans()
{
Multimap<Class<?>, WeldClass<?>> otherWeldClasses =
HashMultimap.create();
Modified: core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java 2010-07-15
10:47:59 UTC (rev 6661)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java 2010-07-16
04:17:08 UTC (rev 6662)
@@ -390,6 +390,7 @@
for (Entry<BeanDeploymentArchive, BeanDeployment> entry :
beanDeployments.entrySet())
{
entry.getValue().deployBeans(environment);
+
entry.getValue().getBeanDeployer().fireProcessAnnotatedTypeForTypesAddedThroughTheSPI();
}
AfterBeanDiscoveryImpl.fire(deploymentManager, deployment, beanDeployments);
for (Entry<BeanDeploymentArchive, BeanDeployment> entry :
beanDeployments.entrySet())
Modified:
core/trunk/tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans/MultipleBeansExtension.java
===================================================================
---
core/trunk/tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans/MultipleBeansExtension.java 2010-07-15
10:47:59 UTC (rev 6661)
+++
core/trunk/tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans/MultipleBeansExtension.java 2010-07-16
04:17:08 UTC (rev 6662)
@@ -21,8 +21,11 @@
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeforeBeanDiscovery;
import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
import javax.enterprise.util.AnnotationLiteral;
import javax.inject.Inject;
@@ -37,6 +40,8 @@
public class MultipleBeansExtension implements Extension
{
+ private boolean addedBlogFormatterSeen = false;
+
public void addNewAnnotatedTypes(@Observes BeforeBeanDiscovery event) throws
SecurityException, NoSuchFieldException, NoSuchMethodException
{
TestAnnotatedTypeBuilder<BlogFormatter> formatter = new
TestAnnotatedTypeBuilder<BlogFormatter>(BlogFormatter.class);
@@ -61,7 +66,31 @@
event.addAnnotatedType(uselessBuilder.create());
}
+
+ public void observeProcessBlogFormatter(@Observes
ProcessAnnotatedType<BlogFormatter> event)
+ {
+ AnnotatedType<BlogFormatter> type = event.getAnnotatedType();
+ for(AnnotatedField<? super BlogFormatter> f : type.getFields())
+ {
+ if(f.getJavaMember().getName().equals("content"))
+ {
+ if(f.isAnnotationPresent(Author.class))
+ {
+ if(f.getAnnotation(Author.class).name().equals("Bob"))
+ {
+ addedBlogFormatterSeen = true;
+ }
+ }
+ }
+ }
+ }
+
+ public boolean isAddedBlogFormatterSeen()
+ {
+ return addedBlogFormatterSeen;
+ }
+
private static class InjectLiteral extends AnnotationLiteral<Inject> implements
Inject
{
Modified:
core/trunk/tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans/MultipleBeansTest.java
===================================================================
---
core/trunk/tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans/MultipleBeansTest.java 2010-07-15
10:47:59 UTC (rev 6661)
+++
core/trunk/tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans/MultipleBeansTest.java 2010-07-16
04:17:08 UTC (rev 6662)
@@ -62,6 +62,16 @@
consumer = getReference(BlogConsumer.class, new ConsumerLiteral("Bob"));
assert consumer.blogContent.equals("+Bob's content+");
}
+ /**
+ * makes sure that ProcessAnnotatedType is thrown for types
+ * added through BeforeBeanDiscovery.addAnnotatedType
+ */
+ @Test
+ public void testProcessAnnotatedTypeEventFiredForSPIAddedType()
+ {
+ MultipleBeansExtension ext = getReference(MultipleBeansExtension.class);
+ assert ext.isAddedBlogFormatterSeen();
+ }
/**
* Apparently it is not possible to add two beans that are exactly the same.
Show replies by date