[weld-commits] Weld SVN: r6662 - in core/trunk: tests/src/test/java/org/jboss/weld/tests/extensions/multipleBeans and 1 other directory.
weld-commits at lists.jboss.org
weld-commits at lists.jboss.org
Fri Jul 16 00:17:08 EDT 2010
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.
More information about the weld-commits
mailing list