[weld-commits] Weld SVN: r6795 - in extensions/trunk: impl/src/main/java/org/jboss/weld/extensions/bean and 4 other directories.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Sat Jul 24 08:23:30 EDT 2010


Author: pete.muir at jboss.org
Date: 2010-07-24 08:23:29 -0400 (Sat, 24 Jul 2010)
New Revision: 6795

Added:
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Arrays2.java
Modified:
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanBuilder.java
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanImpl.java
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanLifecycle.java
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanLifecycleImpl.java
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/PassivationCapableBeanImpl.java
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/core/CoreExtension.java
   extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Synthetic.java
   extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java
   extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java
   extensions/trunk/pom.xml
Log:
reimpl as Bean rather than IT wrapper

Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanBuilder.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanBuilder.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanBuilder.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -23,15 +23,15 @@
 
 import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.Alternative;
-import javax.enterprise.inject.Default;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.InjectionTarget;
-import javax.enterprise.util.AnnotationLiteral;
 import javax.inject.Named;
 
 import org.jboss.weld.extensions.annotated.Annotateds;
+import org.jboss.weld.extensions.literal.DefaultLiteral;
 
 /**
  * class that can build a bean from an AnnotatedType.
@@ -42,38 +42,43 @@
 public class BeanBuilder<T>
 {
 
-   private final AnnotatedType<T> type;
    private final BeanManager beanManager;
-   private InjectionTarget<T> injectionTarget;
+   
+   private Class<? extends T> javaClass;
    private String name;
    private Set<Annotation> qualifiers;
    private Class<? extends Annotation> scope;
    private Set<Class<? extends Annotation>> stereotypes;
-   private Set<Type> types = new HashSet<Type>();
-   private boolean alternative = false;
-   private boolean nullable = false;
+   private Set<Type> types;
+   private Set<InjectionPoint> injectionPoints;
+   private boolean alternative;
+   private boolean nullable;
    private BeanLifecycle<T> beanLifecycle;
    boolean passivationCapable;
    private String id;
 
-   public BeanBuilder(AnnotatedType<T> type, BeanManager beanManager)
+   public BeanBuilder(BeanManager beanManager)
    {
-      this.type = type;
       this.beanManager = beanManager;
    }
 
-   public BeanBuilder<T> defineBeanFromAnnotatedType()
+   public BeanBuilder<T> defineBeanFromAnnotatedType(AnnotatedType<T> type)
    {
+      this.javaClass = type.getJavaClass();
+      InjectionTarget<T> injectionTarget;
       if (!type.getJavaClass().isInterface())
       {
-         this.injectionTarget = beanManager.createInjectionTarget(type);
+         injectionTarget = beanManager.createInjectionTarget(type);
       }
       else
       {
-         this.injectionTarget = new DummyInjectionTarget<T>();
+         injectionTarget = new DummyInjectionTarget<T>();
       }
+      this.beanLifecycle = new BeanLifecycleImpl<T>(injectionTarget);
+      this.injectionPoints = injectionTarget.getInjectionPoints();
       this.qualifiers = new HashSet<Annotation>();
       this.stereotypes = new HashSet<Class<? extends Annotation>>();
+      this.types = new HashSet<Type>();
       for (Annotation annotation : type.getAnnotations())
       {
          if (beanManager.isQualifier(annotation.annotationType()))
@@ -111,11 +116,8 @@
       }
       if (qualifiers.isEmpty())
       {
-         qualifiers.add(new AnnotationLiteral<Default>()
-         {
-         });
+         qualifiers.add(DefaultLiteral.INSTANCE);
       }
-      this.beanLifecycle = new BeanLifecycleImpl<T>();
       this.id = BeanImpl.class.getName() + ":" + Annotateds.createTypeId(type);
       return this;
    }
@@ -124,23 +126,11 @@
    {
       if (!passivationCapable)
       {
-         return new BeanImpl<T>(type.getJavaClass(), injectionTarget, name, qualifiers, scope, stereotypes, types, alternative, nullable, beanLifecycle);
+         return new BeanImpl<T>(javaClass, name, qualifiers, scope, stereotypes, types, alternative, nullable, injectionPoints, beanLifecycle);
       }
-      return new PassivationCapableBeanImpl<T>(id, type.getJavaClass(), injectionTarget, name, qualifiers, scope, stereotypes, types, alternative, nullable, beanLifecycle);
-
+      return new PassivationCapableBeanImpl<T>(id, javaClass, name, qualifiers, scope, stereotypes, types, alternative, nullable, injectionPoints, beanLifecycle);
    }
 
-   public InjectionTarget<T> getInjectionTarget()
-   {
-      return injectionTarget;
-   }
-
-   public BeanBuilder<T> setInjectionTarget(InjectionTarget<T> injectionTarget)
-   {
-      this.injectionTarget = injectionTarget;
-      return this;
-   }
-
    public Set<Annotation> getQualifiers()
    {
       return qualifiers;
@@ -218,10 +208,16 @@
       return this;
    }
 
-   public AnnotatedType<T> getType()
+   public Class<? extends T> getJavaClass()
    {
-      return type;
+      return javaClass;
    }
+   
+   public BeanBuilder<T> setJavaClass(Class<? extends T> javaClass)
+   {
+      this.javaClass = javaClass;
+      return this;
+   }
 
    public BeanManager getBeanManager()
    {
@@ -260,5 +256,16 @@
       this.id = id;
       return this;
    }
+   
+   public Set<InjectionPoint> getInjectionPoints()
+   {
+      return injectionPoints;
+   }
+   
+   public BeanBuilder<T> setInjectionPoints(Set<InjectionPoint> injectionPoints)
+   {
+      this.injectionPoints = injectionPoints;
+      return this;
+   }
 
 }

Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanImpl.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanImpl.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanImpl.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -22,22 +22,30 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.Default;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.InjectionTarget;
 
+import org.jboss.weld.extensions.literal.DefaultLiteral;
+import org.jboss.weld.extensions.util.Arrays2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
- * An immutable bean.
+ * An immutable bean which provides basic defaulting and checking of arguments.
  * 
  * @author stuart
+ * @author Pete Muir
  * 
- * @param <T>
  */
 public class BeanImpl<T> implements Bean<T>
 {
+
+   private static final Logger log = LoggerFactory.getLogger(BeanImpl.class);
+
    private final Class<?> beanClass;
-   private final InjectionTarget<T> injectionTarget;
    private final String name;
    private final Set<Annotation> qualifiers;
    private final Class<? extends Annotation> scope;
@@ -46,16 +54,79 @@
    private final boolean alternative;
    private final boolean nullable;
    private final BeanLifecycle<T> beanLifecycle;
+   private final Set<InjectionPoint> injectionPoints;
 
-   BeanImpl(Class<?> beanClass, InjectionTarget<T> injectionTarget, String name, Set<Annotation> qualifiers, Class<? extends Annotation> scope, Set<Class<? extends Annotation>> stereotypes, Set<Type> types, boolean alternative, boolean nullable, BeanLifecycle<T> beanLifecycle)
+   /**
+    * Create a new, immutable bean. All arguments passed as collections are defensively copied.
+    * 
+    * @param beanClass The Bean class, may not be null
+    * @param name The bean name
+    * @param qualifiers The bean's qualifiers, if null, a singleton set of
+    *           {@link Default} is used
+    * @param scope The bean's scope, if null, the default scope of
+    *           {@link Dependent} is used
+    * @param stereotypes The bean's stereotypes, if null, an empty set is used
+    * @param types The bean's types, if null, the beanClass and {@link Object}
+    *           will be used
+    * @param alternative True if the bean is an alternative
+    * @param nullable True if the bean is nullable
+    * @param injectionPoints the bean's injection points, if null an empty set is used
+    * @param beanLifecycle Handler for {@link #create(CreationalContext)} and
+    *           {@link #destroy(Object, CreationalContext)}
+    * 
+    * @throws IllegalArgumentException if the beanClass is null
+    */
+   public BeanImpl(Class<?> beanClass, String name, Set<Annotation> qualifiers, Class<? extends Annotation> scope, Set<Class<? extends Annotation>> stereotypes, Set<Type> types, boolean alternative, boolean nullable, Set<InjectionPoint> injectionPoints, BeanLifecycle<T> beanLifecycle)
    {
+      if (beanClass == null)
+      {
+         throw new IllegalArgumentException("beanClass cannot be null");
+      }
       this.beanClass = beanClass;
-      this.injectionTarget = injectionTarget;
       this.name = name;
-      this.qualifiers = new HashSet<Annotation>(qualifiers);
-      this.scope = scope;
-      this.stereotypes = new HashSet<Class<? extends Annotation>>(stereotypes);
-      this.types = new HashSet<Type>(types);
+      if (qualifiers == null)
+      {
+         this.qualifiers = Collections.<Annotation>singleton(DefaultLiteral.INSTANCE);
+         log.trace("No qualifers provided for bean class " + beanClass + ", using singleton set of @Default");
+      }
+      else
+      {
+         this.qualifiers = new HashSet<Annotation>(qualifiers);
+      }
+      if (scope == null)
+      {
+         this.scope = Dependent.class;
+         log.trace("No scope provided for bean class " + beanClass + ", using @Dependent");
+      }
+      else
+      {
+         this.scope = scope;
+      }
+      if (stereotypes == null)
+      {
+         this.stereotypes = Collections.emptySet();
+      }
+      else
+      {
+         this.stereotypes = new HashSet<Class<? extends Annotation>>(stereotypes);
+      }
+      if (types == null)
+      {
+         this.types = Arrays2.<Type>asSet(Object.class, beanClass);
+         log.trace("No types provided for bean class " + beanClass + ", using [java.lang.Object.class, " + beanClass.getName() + ".class]");
+      }
+      else
+      {
+         this.types = new HashSet<Type>(types);
+      }
+      if (injectionPoints == null)
+      {
+         this.injectionPoints = Collections.emptySet();
+      }
+      else
+      {
+         this.injectionPoints = new HashSet<InjectionPoint>(injectionPoints);
+      }
       this.alternative = alternative;
       this.nullable = nullable;
       this.beanLifecycle = beanLifecycle;
@@ -68,14 +139,9 @@
 
    public Set<InjectionPoint> getInjectionPoints()
    {
-      return injectionTarget.getInjectionPoints();
+      return injectionPoints;
    }
 
-   public InjectionTarget<T> getInjectionTarget()
-   {
-      return injectionTarget;
-   }
-
    public String getName()
    {
       return name;
@@ -120,7 +186,7 @@
    {
       beanLifecycle.destroy(this, arg0, arg1);
    }
-   
+
    @Override
    public String toString()
    {

Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanLifecycle.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanLifecycle.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanLifecycle.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -17,9 +17,12 @@
 package org.jboss.weld.extensions.bean;
 
 import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.InjectionTarget;
 
 /**
- * Handler for the create/destroy methods of CustomBean
+ * Handler for the create/destroy methods of {@link BeanImpl}. By default, the
+ * {@link InjectionTarget} will be used to create and destroy the bean
  * 
  * @author stuart
  * 
@@ -27,8 +30,8 @@
  */
 public interface BeanLifecycle<T>
 {
-   public T create(BeanImpl<T> bean, CreationalContext<T> arg0);
+   public T create(Bean<T> bean, CreationalContext<T> arg0);
 
-   public void destroy(BeanImpl<T> bean, T arg0, CreationalContext<T> arg1);
+   public void destroy(Bean<T> bean, T arg0, CreationalContext<T> arg1);
 
 }

Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanLifecycleImpl.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanLifecycleImpl.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/BeanLifecycleImpl.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -17,25 +17,32 @@
 package org.jboss.weld.extensions.bean;
 
 import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.InjectionTarget;
 
-public class BeanLifecycleImpl<T> implements BeanLifecycle<T>
+class BeanLifecycleImpl<T> implements BeanLifecycle<T>
 {
 
-   public BeanLifecycleImpl() {}
+   private final InjectionTarget<T> injectionTarget;
 
-   public T create(BeanImpl<T> bean, CreationalContext<T> creationalContext)
+   BeanLifecycleImpl(InjectionTarget<T> injectionTarget)
    {
-      T instance = bean.getInjectionTarget().produce(creationalContext);
-      bean.getInjectionTarget().inject(instance, creationalContext);
-      bean.getInjectionTarget().postConstruct(instance);
+      this.injectionTarget = injectionTarget;
+   }
+
+   public T create(Bean<T> bean, CreationalContext<T> creationalContext)
+   {
+      T instance = injectionTarget.produce(creationalContext);
+      injectionTarget.inject(instance, creationalContext);
+      injectionTarget.postConstruct(instance);
       return instance;
    }
 
-   public void destroy(BeanImpl<T> bean, T instance, CreationalContext<T> creationalContext)
+   public void destroy(Bean<T> bean, T instance, CreationalContext<T> creationalContext)
    {
       try
       {
-         bean.getInjectionTarget().preDestroy(instance);
+         injectionTarget.preDestroy(instance);
          creationalContext.release();
       }
       catch (Exception e)

Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/PassivationCapableBeanImpl.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/PassivationCapableBeanImpl.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/PassivationCapableBeanImpl.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -20,16 +20,16 @@
 import java.lang.reflect.Type;
 import java.util.Set;
 
-import javax.enterprise.inject.spi.InjectionTarget;
+import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.PassivationCapable;
 
 public class PassivationCapableBeanImpl<T> extends BeanImpl<T> implements PassivationCapable
 {
    private final String id;
 
-   PassivationCapableBeanImpl(String id, Class<?> beanClass, InjectionTarget<T> injectionTarget, String name, Set<Annotation> qualifiers, Class<? extends Annotation> scope, Set<Class<? extends Annotation>> stereotypes, Set<Type> types, boolean alternative, boolean nullable, BeanLifecycle<T> beanLifecycle)
+   PassivationCapableBeanImpl(String id, Class<?> beanClass, String name, Set<Annotation> qualifiers, Class<? extends Annotation> scope, Set<Class<? extends Annotation>> stereotypes, Set<Type> types, boolean alternative, boolean nullable, Set<InjectionPoint> injectionPoints, BeanLifecycle<T> beanLifecycle)
    {
-      super(beanClass, injectionTarget, name, qualifiers, scope, stereotypes, types, alternative, nullable, beanLifecycle);
+      super(beanClass, name, qualifiers, scope, stereotypes, types, alternative, nullable, injectionPoints, beanLifecycle);
       this.id = id;
    }
 

Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericBeanExtension.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -21,6 +21,7 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Member;
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -29,6 +30,8 @@
 import java.util.Set;
 import java.util.Map.Entry;
 
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
@@ -41,13 +44,14 @@
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.InjectionTarget;
 import javax.enterprise.inject.spi.ProcessAnnotatedType;
 import javax.enterprise.inject.spi.ProcessInjectionTarget;
 import javax.inject.Inject;
 
 import org.jboss.weld.extensions.annotated.AnnotatedTypeBuilder;
 import org.jboss.weld.extensions.bean.BeanBuilder;
+import org.jboss.weld.extensions.bean.BeanLifecycle;
+import org.jboss.weld.extensions.util.Arrays2;
 import org.jboss.weld.extensions.util.Synthetic;
 import org.jboss.weld.extensions.util.properties.Properties;
 import org.jboss.weld.extensions.util.properties.Property;
@@ -186,7 +190,7 @@
             {
                for (Annotation concrete : concretes)
                {
-                  event.addBean(redefineType(type, concrete, beanManager));
+                  event.addBean(redefineType(type, concrete, beanManager, event));
                }
             }
          }
@@ -194,12 +198,12 @@
    }
 
    // TODO Do we need to do something this complex, can't we just register the relevant beans?
-   private <X> Bean<X> redefineType(AnnotatedType<X> annotatedType, Annotation concrete, BeanManager beanManager)
+   private <X> Bean<X> redefineType(AnnotatedType<X> annotatedType, Annotation concrete, BeanManager beanManager, AfterBeanDiscovery event)
    {
-      Synthetic syntheticQualifier = syntheticProvider.get(concrete);
+      Synthetic genericBeanSyntheticQualifier = syntheticProvider.get(concrete);
 
       AnnotatedTypeBuilder<X> builder = AnnotatedTypeBuilder.newInstance(annotatedType).readAnnotationsFromUnderlyingType();
-      builder.addToClass(syntheticQualifier);
+      builder.addToClass(genericBeanSyntheticQualifier);
       for (AnnotatedField<? super X> field : annotatedType.getFields())
       {
          if (field.isAnnotationPresent(Inject.class))
@@ -207,8 +211,9 @@
             // if this is a configuration injection point
             if (concrete.annotationType().isAssignableFrom(field.getJavaMember().getType()))
             {
-               builder.removeFromField(field.getJavaMember(), Inject.class);
-               builder.addToField(field.getJavaMember(), InjectConfiguration.INSTANCE);
+               Synthetic genericConfigurationQualifier = syntheticProvider.get();
+               builder.addToField(field.getJavaMember(), genericConfigurationQualifier);
+               event.addBean(createConfigurationBean(beanManager, concrete, genericConfigurationQualifier));
             }
             else
             {
@@ -224,7 +229,7 @@
                Set<Bean<?>> beans = beanManager.getBeans(field.getJavaMember().getType(), qualifiers);
                if (beans.isEmpty())
                {
-                  builder.addToField(field.getJavaMember(), syntheticQualifier);
+                  builder.addToField(field.getJavaMember(), genericBeanSyntheticQualifier);
                }
             }
          }
@@ -256,7 +261,7 @@
                Set<Bean<?>> beans = beanManager.getBeans(paramType, qualifiers);
                if (beans.isEmpty())
                {
-                  builder.addToMethod(method.getJavaMember(), syntheticQualifier);
+                  builder.addToMethod(method.getJavaMember(), genericBeanSyntheticQualifier);
                }
             }
          }
@@ -273,17 +278,38 @@
                Set<Bean<?>> beans = beanManager.getBeans(paramType, qualifiers);
                if (beans.isEmpty())
                {
-                  builder.addToConstructorParameter(constructor.getJavaMember(), parameter.getPosition(), syntheticQualifier);
+                  builder.addToConstructorParameter(constructor.getJavaMember(), parameter.getPosition(), genericBeanSyntheticQualifier);
                }
             }
          }
       }
-      AnnotatedType<X> newAnnotatedType = builder.create();
-      InjectionTarget<X> it = beanManager.createInjectionTarget(newAnnotatedType);
-
-      it = new GenericBeanInjectionTargetWrapper<X>(newAnnotatedType, it, concrete);
-      BeanBuilder<X> beanBuilder = new BeanBuilder<X>(newAnnotatedType, beanManager).defineBeanFromAnnotatedType().setInjectionTarget(it);
+      BeanBuilder<X> beanBuilder = new BeanBuilder<X>(beanManager).defineBeanFromAnnotatedType(builder.create());
       return beanBuilder.create();
    }
+   
+   private Bean<Annotation> createConfigurationBean(BeanManager beanManager, final Annotation genericConfiguration, Annotation syntheticQualifier)
+   {
+      BeanBuilder<Annotation> builder = new BeanBuilder<Annotation>(beanManager)
+         .setJavaClass(genericConfiguration.annotationType())
+         .setTypes(Arrays2.<Type>asSet(genericConfiguration.annotationType(), Object.class))
+         .setScope(Dependent.class)
+         .setQualifiers(Arrays2.asSet(syntheticQualifier))
+         // TODO make this passivation capable?
+         .setBeanLifecycle(new BeanLifecycle<Annotation>()
+         {
+            
+            public void destroy(Bean<Annotation> bean, Annotation arg0, CreationalContext<Annotation> arg1)
+            {
+               // No-op
+            }
+            
+            public Annotation create(Bean<Annotation> bean, CreationalContext<Annotation> arg0)
+            {
+               return genericConfiguration;
+            }
+         });
+      
+      return builder.create();
+   }
 
 }

Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/core/CoreExtension.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/core/CoreExtension.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/core/CoreExtension.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -161,7 +161,7 @@
                annotatedTypeBuilder.addToClass(ann);
             }
             AnnotatedType<X> construtsAnnotatedType = builder.create();
-            additionalBeans.add(new BeanBuilder<X>(construtsAnnotatedType, beanManager).create());
+            additionalBeans.add(new BeanBuilder<X>(beanManager).defineBeanFromAnnotatedType(construtsAnnotatedType).create());
          }
       }
    }

Added: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Arrays2.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Arrays2.java	                        (rev 0)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Arrays2.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.weld.extensions.util;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author pmuir
+ *
+ */
+public class Arrays2
+{
+   
+   private Arrays2() {}
+
+   public static <T> Set<T> asSet(T... array)
+   {
+      Set<T> result = new HashSet<T>();
+      for (T a : array)
+      {
+         result.add(a);
+      }
+      return result;
+   }
+   
+}


Property changes on: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Arrays2.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Modified: extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Synthetic.java
===================================================================
--- extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Synthetic.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/main/java/org/jboss/weld/extensions/util/Synthetic.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -26,7 +26,8 @@
 import javax.enterprise.util.AnnotationLiteral;
 
 /**
- * A synthetic qualifier that can be used to replace other user-supplied configuration at deployment 
+ * A synthetic qualifier that can be used to replace other user-supplied
+ * configuration at deployment
  * 
  * @author Stuart Douglas <stuart at baileyroberts.com.au>
  * @author Pete Muir
@@ -35,18 +36,18 @@
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Synthetic
 {
-   
+
    long index();
-   
+
    String namespace();
-   
+
    public static class SyntheticLiteral extends AnnotationLiteral<Synthetic> implements Synthetic
    {
-      
+
       private final Long index;
-      
+
       private final String namespace;
-      
+
       public SyntheticLiteral(String namespace, Long index)
       {
          this.namespace = namespace;
@@ -57,23 +58,29 @@
       {
          return index;
       }
-      
+
       public String namespace()
       {
          return namespace;
       }
-      
+
    }
-   
+
+   /**
+    * Provides a unique Synthetic qualifier for the specified namespace
+    * 
+    * @author pmuir
+    * 
+    */
    public static class Provider
    {
-      
+
       //Map of generic Annotation instance to a SyntheticQualifier
       private final Map<Annotation, Synthetic> synthetics;
       private final String namespace;
-      
+
       private AtomicLong count;
-      
+
       public Provider(String namespace)
       {
          this.synthetics = new HashMap<Annotation, Synthetic>();
@@ -81,6 +88,13 @@
          this.count = new AtomicLong();
       }
 
+      /**
+       * Get a synthetic qualifier. The provided annotation is used to map the
+       * generated qualifier, allowing later retrieval.
+       * 
+       * @param annotation
+       * @return
+       */
       public Synthetic get(Annotation annotation)
       {
          if (!synthetics.containsKey(annotation))
@@ -89,6 +103,17 @@
          }
          return synthetics.get(annotation);
       }
+
+      /**
+       * Get a synthetic qualifier. The qualifier will not be stored for later
+       * retrieval.
+       * 
+       * @return
+       */
+      public Synthetic get()
+      {
+         return new Synthetic.SyntheticLiteral(namespace, count.getAndIncrement());
+      }
    }
-   
+
 }

Modified: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/Baz.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -36,6 +36,9 @@
 
    @Inject
    private Corge corge;
+   
+   @Inject 
+   private Garply garply;
 
    public Bar getBar()
    {
@@ -46,4 +49,9 @@
    {
       return corge;
    }
+   
+   public Garply getGarply()
+   {
+      return garply;
+   }
 }

Modified: extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java
===================================================================
--- extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/GenericBeanTest.java	2010-07-24 12:23:29 UTC (rev 6795)
@@ -46,7 +46,11 @@
    @Test
    public void testGeneric()
    {
-      // Test that the generic injection wiring is working!
+      // Test that the generic configuration injection wiring is working!
+      assert baz1.getGarply() != null;
+      assert baz1.getGarply().equals("hello1");
+      assert baz2.getGarply() != null;
+      assert baz2.getGarply().equals("hello2");
       assert baz1.getBar() != null;
       assert baz1.getBar().getInjectedGarply() != null;
       assert baz1.getBar().getInjectedGarply().value().equals("hello1");

Modified: extensions/trunk/pom.xml
===================================================================
--- extensions/trunk/pom.xml	2010-07-24 12:15:41 UTC (rev 6794)
+++ extensions/trunk/pom.xml	2010-07-24 12:23:29 UTC (rev 6795)
@@ -62,8 +62,8 @@
    </ciManagement>
 
    <properties>
-      <weld.api.version>1.0-SP1</weld.api.version>
-      <weld.core.version>1.0.1-Final</weld.core.version>
+      <weld.api.version>1.1-SNAPSHOT</weld.api.version>
+      <weld.core.version>1.1.0-SNAPSHOT</weld.core.version>
       <slf4j.version>1.5.10</slf4j.version>
       <testng.version>5.12.1</testng.version>
       <jboss.test.harness.version>1.1.0-CR3</jboss.test.harness.version>



More information about the weld-commits mailing list