[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