[webbeans-commits] Webbeans SVN: r1135 - ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap and 4 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Tue Jan 20 20:06:31 EST 2009


Author: pete.muir at jboss.org
Date: 2009-01-20 20:06:31 -0500 (Tue, 20 Jan 2009)
New Revision: 1135

Added:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotationStore.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedField.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedMethod.java
Removed:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java
Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java
Log:
More specialization support

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -39,7 +39,7 @@
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.injection.InjectionPointImpl;
 import org.jboss.webbeans.introspector.AnnotatedItem;
-import org.jboss.webbeans.introspector.jlr.AnnotationStore.AnnotationMap;
+import org.jboss.webbeans.introspector.AnnotationStore.AnnotationMap;
 import org.jboss.webbeans.literal.CurrentLiteral;
 import org.jboss.webbeans.log.LogProvider;
 import org.jboss.webbeans.log.Logging;

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -9,6 +9,7 @@
 import java.util.Set;
 
 import javax.webbeans.BindingType;
+import javax.webbeans.DeploymentType;
 import javax.webbeans.Fires;
 import javax.webbeans.Initializer;
 import javax.webbeans.Observes;
@@ -33,6 +34,8 @@
 import org.jboss.webbeans.introspector.AnnotatedField;
 import org.jboss.webbeans.introspector.AnnotatedItem;
 import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.WrappedAnnotatedField;
+import org.jboss.webbeans.introspector.WrappedAnnotatedMethod;
 import org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl;
 import org.jboss.webbeans.jsf.JSFApiAbstraction;
 import org.jboss.webbeans.log.LogProvider;
@@ -109,45 +112,72 @@
       
       manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
       
-      registerProducerMethods(bean, annotatedClass, EMPTY_BINDINGS);
-      registerProducerFields(bean, annotatedClass, EMPTY_BINDINGS);
-      registerObserverMethods(bean, annotatedClass);
-      registerFacades(bean.getAnnotatedInjectionPoints());
+      createProducerMethods(bean, annotatedClass);
+      createProducerFields(bean, annotatedClass);
+      createObserverMethods(bean, annotatedClass);
+      createFacades(bean.getAnnotatedInjectionPoints());
       
       if (annotatedClass.isAnnotationPresent(Realizes.class))
       {
-         Set<Annotation> extraAnnotations = new HashSet<Annotation>();
-         extraAnnotations.addAll(annotatedClass.getDeclaredMetaAnnotations(BindingType.class));
-         registerProducerMethods(bean, annotatedClass.getSuperclass(), extraAnnotations);
-         registerProducerFields(bean, annotatedClass.getSuperclass(), extraAnnotations);
+         createRealizedProducerMethods(bean, annotatedClass);
+         createRealizedProducerFields(bean, annotatedClass);
       }
       
       log.info("Web Bean: " + bean);
    }
    
-   private void registerProducerMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass, Set<Annotation> extraAnnotations)
+   private void createProducerMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass)
    {
       for (AnnotatedMethod<?> method : annotatedClass.getDeclaredAnnotatedMethods(Produces.class))
       {
-         ProducerMethodBean<?> bean = ProducerMethodBean.of(method.wrap(extraAnnotations), declaringBean, manager);
-         beans.add(bean);
-         manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
-         registerFacades(bean.getAnnotatedInjectionPoints());
-         log.info("Web Bean: " + bean);
+         createProducerMethod(declaringBean, method);
+         
       }
    }
    
-   private void registerProducerFields(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass, Set<Annotation> extraAnnotations)
+   private void createProducerMethod(AbstractClassBean<?> declaringBean, AnnotatedMethod<?> annotatedMethod)
    {
+      ProducerMethodBean<?> bean = ProducerMethodBean.of(annotatedMethod, declaringBean, manager);
+      beans.add(bean);
+      manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
+      createFacades(bean.getAnnotatedInjectionPoints());
+      log.info("Web Bean: " + bean);
+   }
+   
+   private void createRealizedProducerMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> realizingClass)
+   {
+      AnnotatedClass<?> realizedClass = realizingClass.getSuperclass();
+      for (AnnotatedMethod<?> realizedMethod : realizedClass.getDeclaredAnnotatedMethods(Produces.class))
+      { 
+         createProducerMethod(declaringBean, realizeProducerMethod(realizedMethod, realizingClass));
+      }
+   }
+   
+   private void createRealizedProducerFields(AbstractClassBean<?> declaringBean, AnnotatedClass<?> realizingClass)
+   {
+      AnnotatedClass<?> realizedClass = realizingClass.getSuperclass();
+      for (final AnnotatedField<?> realizedField : realizedClass.getDeclaredAnnotatedFields(Produces.class))
+      { 
+         createProducerField(declaringBean, realizeProducerField(realizedField, realizingClass));
+      }
+   }
+   
+   private void createProducerField(AbstractClassBean<?> declaringBean, AnnotatedField<?> field)
+   {
+      ProducerFieldBean<?> bean = ProducerFieldBean.of(field, declaringBean, manager);
+      beans.add(bean);
+      log.info("Web Bean: " + bean);
+   }
+   
+   private void createProducerFields(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass)
+   {
       for (AnnotatedField<?> field : annotatedClass.getDeclaredAnnotatedFields(Produces.class))
       {
-         ProducerFieldBean<?> bean = ProducerFieldBean.of(field.wrap(extraAnnotations), declaringBean, manager);
-         beans.add(bean);
-         log.info("Web Bean: " + bean);
+         createProducerField(declaringBean, field);
       }
    }
 
-   private void registerObserverMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass)
+   private void createObserverMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass)
    {
       for (AnnotatedMethod<?> observerMethod : annotatedClass.getDeclaredMethodsWithAnnotatedParameters(Observes.class))
       {
@@ -156,22 +186,22 @@
       }
    }
 
-   private void registerFacades(Set<AnnotatedItem<?, ?>> injectionPoints)
+   private void createFacades(Set<AnnotatedItem<?, ?>> injectionPoints)
    {
       for (AnnotatedItem<?, ?> injectionPoint : injectionPoints)
       {
          if (injectionPoint.isAnnotationPresent(Fires.class))
          {
-             registerEvent(injectionPoint);
+             createEvent(injectionPoint);
          }
          if (injectionPoint.isAnnotationPresent(Obtains.class))
          {
-            registerInstance(injectionPoint);
+            createInstance(injectionPoint);
          }
       }
    }
 
-   private void registerEvent(AnnotatedItem<?, ?> injectionPoint)
+   private void createEvent(AnnotatedItem<?, ?> injectionPoint)
    {
       // TODO Fix this!
       @SuppressWarnings("unchecked")
@@ -180,7 +210,7 @@
       log.info("Web Bean: " + bean);
    }
    
-   private void registerInstance(AnnotatedItem<?, ?> injectionPoint)
+   private void createInstance(AnnotatedItem<?, ?> injectionPoint)
    {
       // TODO FIx this
       @SuppressWarnings("unchecked")
@@ -223,4 +253,73 @@
          return false;
       }
    }
+   
+   private static <T> AnnotatedMethod<T> realizeProducerMethod(final AnnotatedMethod<T> method, final AnnotatedClass<?> realizingClass)
+   {
+      return new WrappedAnnotatedMethod<T>(method, realizingClass.getMetaAnnotations(BindingType.class))
+      {
+         
+         @Override
+         public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
+         {
+            if (metaAnnotationType.equals(DeploymentType.class))
+            {
+               return realizingClass.getMetaAnnotations(DeploymentType.class);
+            }
+            else
+            {
+               return super.getMetaAnnotations(metaAnnotationType);
+            }
+         }
+         
+         @Override
+         public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
+         {
+            if (metaAnnotationType.equals(DeploymentType.class))
+            {
+               return realizingClass.getDeclaredMetaAnnotations(DeploymentType.class);
+            }
+            else
+            {
+               return super.getDeclaredMetaAnnotations(metaAnnotationType);
+            }
+         }
+         
+      };
+   }
+   
+   private static <T> AnnotatedField<T> realizeProducerField(final AnnotatedField<T> field, final AnnotatedClass<?> realizingClass)
+   {
+      return new WrappedAnnotatedField<T>(field, realizingClass.getMetaAnnotations(BindingType.class))
+      {
+         
+         @Override
+         public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
+         {
+            if (metaAnnotationType.equals(DeploymentType.class))
+            {
+               return realizingClass.getMetaAnnotations(DeploymentType.class);
+            }
+            else
+            {
+               return super.getMetaAnnotations(metaAnnotationType);
+            }
+         }
+         
+         @Override
+         public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
+         {
+            if (metaAnnotationType.equals(DeploymentType.class))
+            {
+               return realizingClass.getDeclaredMetaAnnotations(DeploymentType.class);
+            }
+            else
+            {
+               return super.getDeclaredMetaAnnotations(metaAnnotationType);
+            }
+         }
+         
+      };
+   }
+   
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -43,6 +43,4 @@
     */
    public Set<AnnotatedMethod<?>> getAnnotatedMembers(Class<? extends Annotation> annotationType);
    
-   public AnnotatedAnnotation<T> wrap(Set<Annotation> annotations);
-   
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -151,7 +151,5 @@
    public boolean isNonStaticMemberClass();
    
    public boolean isParameterizedType();
-   
-   public AnnotatedClass<T> wrap(Set<Annotation> annotations);
 
 }
\ No newline at end of file

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -20,7 +20,6 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.util.List;
-import java.util.Set;
 
 import org.jboss.webbeans.ManagerImpl;
 
@@ -65,7 +64,5 @@
     * @return An abstraction of the declaring class
     */
    public AnnotatedType<T> getDeclaringClass();
-   
-   public AnnotatedConstructor<T> wrap(Set<Annotation> annotations);
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -17,9 +17,7 @@
 
 package org.jboss.webbeans.introspector;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
-import java.util.Set;
 
 import javax.webbeans.manager.Manager;
 
@@ -99,6 +97,4 @@
 
    public boolean isTransient();
 
-   public AnnotatedField<T> wrap(Set<Annotation> annotations);
-   
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -184,6 +184,6 @@
     */
    public String getName();
    
-   public AnnotatedItem<T, S> wrap(Set<Annotation> annotations);
+   public AnnotationStore getAnnotationStore();
 
 }
\ No newline at end of file

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -16,9 +16,7 @@
  */
 package org.jboss.webbeans.introspector;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Member;
-import java.util.Set;
 /**
  * AnnotedMember provides enhanced access to an annotated member 
  * 
@@ -30,6 +28,4 @@
    
    public S getMember();
    
-   public AnnotatedMember<T, S> wrap(Set<Annotation> annotations);
-   
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -130,7 +130,5 @@
    public boolean isEquivalent(Method method);
 
    public Method getAnnotatedMethod();
-   
-   public AnnotatedMethod<T> wrap(Set<Annotation> annotations);
 
 }

Copied: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotationStore.java (from rev 1134, ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java)
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotationStore.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotationStore.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -0,0 +1,315 @@
+package org.jboss.webbeans.introspector;
+
+import static org.jboss.webbeans.introspector.AnnotatedItem.MAPPED_METAANNOTATIONS;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.webbeans.BindingType;
+
+import org.jboss.webbeans.literal.CurrentLiteral;
+import org.jboss.webbeans.util.Strings;
+
+import com.google.common.collect.ForwardingMap;
+
+public class AnnotationStore
+{
+
+   // The array of default binding types
+   private static final Annotation[] DEFAULT_BINDING_ARRAY = { new CurrentLiteral() };
+   // The set of default binding types
+   private static final Set<Annotation> DEFAULT_BINDING = new HashSet<Annotation>(Arrays.asList(DEFAULT_BINDING_ARRAY));
+   
+   private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
+   
+   /**
+    * Represents a mapping from a annotation type to an annotation
+    * implementation
+    */
+   public static class AnnotationMap extends ForwardingMap<Class<? extends Annotation>, Annotation>
+   {
+      private final Map<Class<? extends Annotation>, Annotation> delegate;
+
+      public AnnotationMap()
+      {
+         delegate = new HashMap<Class<? extends Annotation>, Annotation>();
+      }
+
+      @Override
+      protected Map<Class<? extends Annotation>, Annotation> delegate()
+      {
+         return delegate;
+      }
+
+      /**
+       * Gets a string representation of the Map
+       * 
+       * @return A string representation
+       */
+      @Override
+      public String toString()
+      {
+         return Strings.mapToString("AnnotationMap (annotation type -> annotation): ", delegate);
+      }
+
+   }
+
+   /**
+    * Represents a mapping from a annotation (meta-annotation) to a set of
+    * annotations
+    * 
+    */
+   private static class MetaAnnotationMap extends ForwardingMap<Class<? extends Annotation>, Set<Annotation>>
+   {
+      private final Map<Class<? extends Annotation>, Set<Annotation>> delegate;
+
+      public MetaAnnotationMap()
+      {
+         delegate = new HashMap<Class<? extends Annotation>, Set<Annotation>>();
+      }
+
+      @Override
+      protected Map<Class<? extends Annotation>, Set<Annotation>> delegate()
+      {
+         return delegate;
+      }
+
+      /**
+       * Gets the set of annotations matching the given annotation type
+       * 
+       * @param key The meta-annotation to match
+       * @returns The set of matching annotations containing this
+       *          meta-annotation
+       */
+      @Override
+      public Set<Annotation> get(Object key)
+      {
+         Set<Annotation> annotations = super.get(key);
+         return annotations != null ? annotations : new HashSet<Annotation>();
+      }
+
+      /**
+       * Adds an annotation under the meta-annotation type key
+       * 
+       * @param key The meta-annotation type
+       * @param value The annotation
+       */
+      public void put(Class<? extends Annotation> key, Annotation value)
+      {
+         Set<Annotation> annotations = super.get(key);
+         if (annotations == null)
+         {
+            annotations = new HashSet<Annotation>();
+            super.put(key, annotations);
+         }
+         annotations.add(value);
+      }
+
+      /**
+       * Gets a string representation of the Map
+       * 
+       * @return A string representation
+       */
+      @Override
+      public String toString()
+      {
+         return Strings.mapToString("MetaAnnotationMap (annotation type -> annotation set: ", delegate);
+      }
+
+   }
+
+   /**
+    * Builds the annotation map (annotation type -> annotation)
+    * 
+    * @param annotations The array of annotations to map
+    * @return The annotation map
+    */
+   protected static AnnotationMap buildAnnotationMap(Annotation[] annotations)
+   {
+      AnnotationMap annotationMap = new AnnotationMap();
+      for (Annotation annotation : annotations)
+      {
+         annotationMap.put(annotation.annotationType(), annotation);
+      }
+      return annotationMap;
+   }
+   
+   /**
+    * Builds the annotation map (annotation type -> annotation)
+    * 
+    * @param annotations The array of annotations to map
+    * @return The annotation map
+    */
+   protected static AnnotationMap buildAnnotationMap(Iterable<Annotation> annotations)
+   {
+      AnnotationMap annotationMap = new AnnotationMap();
+      for (Annotation annotation : annotations)
+      {
+         annotationMap.put(annotation.annotationType(), annotation);
+      }
+      return annotationMap;
+   }
+   
+   /**
+    * Build an AnnotatedItemHelper from a class
+    * 
+    * @param annotatedElement
+    * @return
+    */
+   public static AnnotationStore of(AnnotatedElement annotatedElement)
+   {
+      return new AnnotationStore(buildAnnotationMap(annotatedElement.getAnnotations()), buildAnnotationMap(annotatedElement.getDeclaredAnnotations()));
+   }
+   
+   public static AnnotationStore of(Annotation[] annotations, Annotation[] declaredAnnotations)
+   {
+      return new AnnotationStore(buildAnnotationMap(annotations), buildAnnotationMap(declaredAnnotations));
+   }
+   
+   public static AnnotationStore wrap(AnnotationStore annotationStore, Set<Annotation> annotations, Set<Annotation> declaredAnnotations)
+   {
+      AnnotationMap annotationMap = new AnnotationMap();
+      annotationMap.putAll(buildAnnotationMap(annotations));
+      annotationMap.putAll(annotationStore.getAnnotationMap());
+      
+      AnnotationMap declaredAnnotationMap = new AnnotationMap();
+      declaredAnnotationMap.putAll(buildAnnotationMap(declaredAnnotations));
+      declaredAnnotationMap.putAll(annotationStore.getDeclaredAnnotationMap());
+      
+      return new AnnotationStore(annotationMap, declaredAnnotationMap);
+   }
+   
+   // The annotation map (annotation type -> annotation) of the item
+   private final AnnotationMap annotationMap;
+   // The meta-annotation map (annotation type -> set of annotations containing
+   // meta-annotation) of the item
+   private final MetaAnnotationMap metaAnnotationMap;
+   // The set of all annotations on the item
+   private final Set<Annotation> annotationSet;
+   
+   // The annotation map (annotation type -> annotation) of the item
+   private final AnnotationMap declaredAnnotationMap;
+   // The meta-annotation map (annotation type -> set of annotations containing
+   // meta-annotation) of the item
+   private final MetaAnnotationMap declaredMetaAnnotationMap;
+   // The set of all annotations on the item
+   private final Set<Annotation> declaredAnnotationSet;
+   
+   /**
+    * Constructor
+    * 
+    * Also builds the meta-annotation map. Throws a NullPointerException if
+    * trying to register a null map
+    * 
+    * @param annotationMap A map of annotation to register
+    * 
+    */
+   protected AnnotationStore(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap)
+   {
+      if (annotationMap == null)
+      {
+         throw new NullPointerException("annotationMap cannot be null");
+      }
+      this.annotationMap = annotationMap;
+      this.annotationSet = new HashSet<Annotation>();
+      this.metaAnnotationMap = new MetaAnnotationMap();
+      for (Annotation annotation : annotationMap.values())
+      {
+         for (Annotation metaAnnotation : annotation.annotationType().getAnnotations())
+         {
+            // Only map meta-annotations we are interested in
+            if (MAPPED_METAANNOTATIONS.contains(metaAnnotation.annotationType()))
+            {
+               metaAnnotationMap.put(metaAnnotation.annotationType(), annotation);
+            }
+         }
+         annotationSet.add(annotation);
+      }
+      
+      if (declaredAnnotationMap == null)
+      {
+         throw new NullPointerException("declaredAnnotationMap cannot be null");
+      }
+      this.declaredAnnotationMap = declaredAnnotationMap;
+      this.declaredAnnotationSet = new HashSet<Annotation>();
+      this.declaredMetaAnnotationMap = new MetaAnnotationMap();
+      for (Annotation annotation : declaredAnnotationMap.values())
+      {
+         for (Annotation metaAnnotation : annotation.annotationType().getAnnotations())
+         {
+            // Only map meta-annotations we are interested in
+            if (MAPPED_METAANNOTATIONS.contains(metaAnnotation.annotationType()))
+            {
+               declaredMetaAnnotationMap.put(metaAnnotation.annotationType(), annotation);
+            }
+         }
+         declaredAnnotationSet.add(annotation);
+      }
+   }
+   
+   public Set<Annotation> getAnnotations()
+   {
+      return Collections.unmodifiableSet(annotationSet);
+   }
+
+   public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
+   {
+      return Collections.unmodifiableSet(metaAnnotationMap.get(metaAnnotationType));
+   }
+   
+   public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
+   {
+      return Collections.unmodifiableSet(declaredMetaAnnotationMap.get(metaAnnotationType));
+   }
+
+   public Annotation[] getMetaAnnotationsAsArray(Class<? extends Annotation> metaAnnotationType)
+   {
+      return getMetaAnnotations(metaAnnotationType).toArray(EMPTY_ANNOTATION_ARRAY);
+   }
+
+   @Deprecated
+   public Set<Annotation> getBindingTypes()
+   {
+      if (getMetaAnnotations(BindingType.class).size() > 0)
+      {
+         return Collections.unmodifiableSet(getMetaAnnotations(BindingType.class));
+      }
+      else
+      {
+         return Collections.unmodifiableSet(DEFAULT_BINDING);
+      }
+   }
+
+   @Deprecated
+   public Annotation[] getBindingTypesAsArray()
+   {
+      return getBindingTypes().toArray(EMPTY_ANNOTATION_ARRAY);
+   }
+
+   public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
+   {
+      return annotationType.cast(annotationMap.get(annotationType));
+   }
+
+   public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
+   {
+      return annotationMap.containsKey(annotationType);
+   }
+   
+   AnnotationMap getAnnotationMap()
+   {
+      return annotationMap;
+   }
+   
+   AnnotationMap getDeclaredAnnotationMap()
+   {
+      return declaredAnnotationMap;
+   }
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotationStore.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -45,15 +45,15 @@
     */
    public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
    {
-      return delegate().getAnnotation(annotationType);
+      return getAnnotationStore().getAnnotation(annotationType);
    }
 
    /**
     * @see org.jboss.webbeans.introspector.AnnotatedItem
     */
-   public <A extends Annotation> Set<A> getAnnotations()
+   public Set<Annotation> getAnnotations()
    {
-      return delegate().getAnnotations();
+      return getAnnotationStore().getAnnotations();
    }
 
    /**
@@ -61,7 +61,7 @@
     */
    public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
    {
-      return delegate().getMetaAnnotations(metaAnnotationType);
+      return getAnnotationStore().getMetaAnnotations(metaAnnotationType);
    }
 
    /**
@@ -69,23 +69,25 @@
     */
    public Annotation[] getMetaAnnotationsAsArray(Class<? extends Annotation> metaAnnotationType)
    {
-      return delegate().getMetaAnnotationsAsArray(metaAnnotationType);
+      return getAnnotationStore().getMetaAnnotationsAsArray(metaAnnotationType);
    }
 
    /**
     * @see org.jboss.webbeans.introspector.AnnotatedItem
     */
+   @Deprecated
    public Set<Annotation> getBindingTypes()
    {
-      return delegate().getBindingTypes();
+      return getAnnotationStore().getBindingTypes();
    }
 
    /**
     * @see org.jboss.webbeans.introspector.AnnotatedItem
     */
+   @Deprecated
    public Annotation[] getBindingTypesAsArray()
    {
-      return delegate().getBindingTypesAsArray();
+      return getAnnotationStore().getBindingTypesAsArray();
    }
 
    /**
@@ -109,7 +111,7 @@
     */
    public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
    {
-      return delegate().isAnnotationPresent(annotationType);
+      return getAnnotationStore().isAnnotationPresent(annotationType);
    }
 
    /**
@@ -192,7 +194,7 @@
    
    public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
    {
-      return delegate().getDeclaredMetaAnnotations(metaAnnotationType);
+      return getAnnotationStore().getDeclaredMetaAnnotations(metaAnnotationType);
    }
 
    /**
@@ -202,9 +204,9 @@
     */
    protected abstract AnnotatedItem<T, S> delegate();
    
-   public AnnotatedItem<T, S> wrap(Set<Annotation> annotations)
+   public AnnotationStore getAnnotationStore()
    {
-      throw new UnsupportedOperationException();
+      return delegate().getAnnotationStore();
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -1,8 +1,6 @@
 package org.jboss.webbeans.introspector;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Member;
-import java.util.Set;
 
 public abstract class ForwardingAnnotatedMember<T, S extends Member> extends ForwardingAnnotatedItem<T, S> implements AnnotatedMember<T, S>
 {
@@ -15,10 +13,4 @@
       return delegate().getMember();
    }
    
-   @Override
-   public AnnotatedMember<T, S> wrap(Set<Annotation> annotations)
-   {
-      throw new UnsupportedOperationException();
-   }
-   
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -1,7 +1,5 @@
 package org.jboss.webbeans.introspector;
 
-import java.lang.annotation.Annotation;
-import java.util.Set;
 
 
 
@@ -21,10 +19,4 @@
       return delegate().isEquivalent(clazz);
    }
    
-   @Override
-   public AnnotatedType<T> wrap(Set<Annotation> annotations)
-   {
-      throw new UnsupportedOperationException();
-   }
-   
 }

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedField.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedField.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -0,0 +1,30 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+public class WrappedAnnotatedField<T> extends ForwardingAnnotatedField<T>
+{
+   
+   private final AnnotatedField<T> delegate;
+   private AnnotationStore annotationStore;
+   
+   public WrappedAnnotatedField(AnnotatedField<T> field, Set<Annotation> extraAnnotations)
+   {
+      this.delegate = field;
+      this.annotationStore = AnnotationStore.wrap(field.getAnnotationStore(), extraAnnotations, extraAnnotations);
+   }
+   
+   @Override
+   protected AnnotatedField<T> delegate()
+   {
+      return delegate;
+   }
+   
+   @Override
+   public AnnotationStore getAnnotationStore()
+   {
+      return annotationStore;
+   }
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedField.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedMethod.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedMethod.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -0,0 +1,30 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+public class WrappedAnnotatedMethod<T> extends ForwardingAnnotatedMethod<T>
+{
+   
+   private final AnnotatedMethod<T> delegate;
+   private AnnotationStore annotationStore;
+   
+   public WrappedAnnotatedMethod(AnnotatedMethod<T> method, Set<Annotation> extraAnnotations)
+   {
+      this.delegate = method;
+      this.annotationStore = AnnotationStore.wrap(method.getAnnotationStore(), extraAnnotations, extraAnnotations);
+   }
+   
+   @Override
+   protected AnnotatedMethod<T> delegate()
+   {
+      return delegate;
+   }
+   
+   @Override
+   public AnnotationStore getAnnotationStore()
+   {
+      return annotationStore;
+   }
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/WrappedAnnotatedMethod.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -23,6 +23,7 @@
 import java.util.Set;
 
 import org.jboss.webbeans.introspector.AnnotatedItem;
+import org.jboss.webbeans.introspector.AnnotationStore;
 import org.jboss.webbeans.util.Proxies;
 import org.jboss.webbeans.util.Reflections;
 import org.jboss.webbeans.util.Types;

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -34,6 +34,7 @@
 import org.jboss.webbeans.injection.InjectionPointProvider;
 import org.jboss.webbeans.introspector.AnnotatedMember;
 import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.introspector.AnnotationStore;
 import org.jboss.webbeans.introspector.ForwardingAnnotatedMember;
 import org.jboss.webbeans.util.Reflections;
 import org.jboss.webbeans.util.Strings;

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -20,6 +20,7 @@
 import java.lang.reflect.Modifier;
 
 import org.jboss.webbeans.introspector.AnnotatedClass;
+import org.jboss.webbeans.introspector.AnnotationStore;
 import org.jboss.webbeans.util.Reflections;
 
 /**

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -28,6 +28,7 @@
 
 import org.jboss.webbeans.introspector.AnnotatedAnnotation;
 import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.AnnotationStore;
 import org.jboss.webbeans.util.Strings;
 
 import com.google.common.collect.ForwardingMap;

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -37,6 +37,7 @@
 import org.jboss.webbeans.introspector.AnnotatedConstructor;
 import org.jboss.webbeans.introspector.AnnotatedField;
 import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.AnnotationStore;
 import org.jboss.webbeans.util.Names;
 import org.jboss.webbeans.util.Reflections;
 import org.jboss.webbeans.util.Strings;

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -32,6 +32,7 @@
 import org.jboss.webbeans.introspector.AnnotatedConstructor;
 import org.jboss.webbeans.introspector.AnnotatedParameter;
 import org.jboss.webbeans.introspector.AnnotatedType;
+import org.jboss.webbeans.introspector.AnnotationStore;
 import org.jboss.webbeans.util.Names;
 
 /**

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -17,17 +17,15 @@
 
 package org.jboss.webbeans.introspector.jlr;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
-import java.util.Set;
 
 import javax.webbeans.manager.Manager;
 
 import org.jboss.webbeans.introspector.AnnotatedField;
 import org.jboss.webbeans.introspector.AnnotatedType;
-import org.jboss.webbeans.introspector.ForwardingAnnotatedField;
+import org.jboss.webbeans.introspector.AnnotationStore;
 import org.jboss.webbeans.util.Names;
 import org.jboss.webbeans.util.Reflections;
 
@@ -190,72 +188,5 @@
       toString = "Annotated field " + Names.field2String(field);
       return toString;
    }
-   
-   public AnnotatedField<T> wrap(Set<Annotation> annotations)
-   {
-      if (annotations.size() > 0)
-      {
-         final AnnotatedField<T> delegate = this;
-         final AnnotationStore annotationStore = AnnotationStore.wrap(getAnnotationStore(), annotations, annotations);
-         return new ForwardingAnnotatedField<T>()
-         {
-            
-            @Override
-            protected AnnotatedField<T> delegate()
-            {
-               return delegate;
-            }
-            
-            @Override
-            public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
-            {
-               return annotationStore.getAnnotation(annotationType);
-            }
-            
-            @Override
-            public Set<Annotation> getAnnotations()
-            {
-               return annotationStore.getAnnotations();
-            }
-            
-            @Override
-            @Deprecated
-            public Set<Annotation> getBindingTypes()
-            {
-               return annotationStore.getBindingTypes();
-            }
-            
-            @Override
-            @Deprecated
-            public Annotation[] getBindingTypesAsArray()
-            {
-               return annotationStore.getBindingTypesAsArray();
-            }
-            
-            @Override
-            public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
-            {
-               return annotationStore.getDeclaredMetaAnnotations(metaAnnotationType);
-            }
-            
-            @Override
-            public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
-            {
-               return annotationStore.getMetaAnnotations(metaAnnotationType);
-            }
-            
-            @Override
-            public Annotation[] getMetaAnnotationsAsArray(Class<? extends Annotation> metaAnnotationType)
-            {
-               return annotationStore.getMetaAnnotationsAsArray(metaAnnotationType);
-            }
-            
-         };
-      }
-      else
-      {
-         return this;
-      }
-   }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -25,13 +25,12 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Set;
 
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.introspector.AnnotatedMethod;
 import org.jboss.webbeans.introspector.AnnotatedParameter;
 import org.jboss.webbeans.introspector.AnnotatedType;
-import org.jboss.webbeans.introspector.ForwardingAnnotatedMethod;
+import org.jboss.webbeans.introspector.AnnotationStore;
 import org.jboss.webbeans.util.Names;
 import org.jboss.webbeans.util.Reflections;
 
@@ -328,73 +327,6 @@
       toString = "Annotated method " + Names.method2String(method);
       return toString;
    }
-   
-   public AnnotatedMethod<T> wrap(Set<Annotation> annotations)
-   {
-      if (annotations.size() > 0)
-      {
-         final AnnotatedMethod<T> delegate = this;
-         final AnnotationStore annotationStore = AnnotationStore.wrap(getAnnotationStore(), annotations, annotations);
-         return new ForwardingAnnotatedMethod<T>()
-         {
-   
-            @Override
-            protected AnnotatedMethod<T> delegate()
-            {
-               return delegate;
-            }
-            
-            @Override
-            public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
-            {
-               return annotationStore.getAnnotation(annotationType);
-            }
-            
-            @Override
-            public Set<Annotation> getAnnotations()
-            {
-               return annotationStore.getAnnotations();
-            }
-            
-            @Override
-            @Deprecated
-            public Set<Annotation> getBindingTypes()
-            {
-               return annotationStore.getBindingTypes();
-            }
-            
-            @Override
-            @Deprecated
-            public Annotation[] getBindingTypesAsArray()
-            {
-               return annotationStore.getBindingTypesAsArray();
-            }
-            
-            @Override
-            public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
-            {
-               return annotationStore.getDeclaredMetaAnnotations(metaAnnotationType);
-            }
-            
-            @Override
-            public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
-            {
-               return annotationStore.getMetaAnnotations(metaAnnotationType);
-            }
-            
-            @Override
-            public Annotation[] getMetaAnnotationsAsArray(Class<? extends Annotation> metaAnnotationType)
-            {
-               return annotationStore.getMetaAnnotationsAsArray(metaAnnotationType);
-            }
-            
-         };
-      }
-      else
-      {
-         return this;
-      }
-   }
       
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -26,6 +26,7 @@
 
 import org.jboss.webbeans.introspector.AnnotatedMember;
 import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.introspector.AnnotationStore;
 
 /**
  * Represents a parameter

Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -1,315 +0,0 @@
-package org.jboss.webbeans.introspector.jlr;
-
-import static org.jboss.webbeans.introspector.AnnotatedItem.MAPPED_METAANNOTATIONS;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.webbeans.BindingType;
-
-import org.jboss.webbeans.literal.CurrentLiteral;
-import org.jboss.webbeans.util.Strings;
-
-import com.google.common.collect.ForwardingMap;
-
-public class AnnotationStore
-{
-
-   // The array of default binding types
-   private static final Annotation[] DEFAULT_BINDING_ARRAY = { new CurrentLiteral() };
-   // The set of default binding types
-   private static final Set<Annotation> DEFAULT_BINDING = new HashSet<Annotation>(Arrays.asList(DEFAULT_BINDING_ARRAY));
-   
-   private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
-   
-   /**
-    * Represents a mapping from a annotation type to an annotation
-    * implementation
-    */
-   public static class AnnotationMap extends ForwardingMap<Class<? extends Annotation>, Annotation>
-   {
-      private final Map<Class<? extends Annotation>, Annotation> delegate;
-
-      public AnnotationMap()
-      {
-         delegate = new HashMap<Class<? extends Annotation>, Annotation>();
-      }
-
-      @Override
-      protected Map<Class<? extends Annotation>, Annotation> delegate()
-      {
-         return delegate;
-      }
-
-      /**
-       * Gets a string representation of the Map
-       * 
-       * @return A string representation
-       */
-      @Override
-      public String toString()
-      {
-         return Strings.mapToString("AnnotationMap (annotation type -> annotation): ", delegate);
-      }
-
-   }
-
-   /**
-    * Represents a mapping from a annotation (meta-annotation) to a set of
-    * annotations
-    * 
-    */
-   private static class MetaAnnotationMap extends ForwardingMap<Class<? extends Annotation>, Set<Annotation>>
-   {
-      private final Map<Class<? extends Annotation>, Set<Annotation>> delegate;
-
-      public MetaAnnotationMap()
-      {
-         delegate = new HashMap<Class<? extends Annotation>, Set<Annotation>>();
-      }
-
-      @Override
-      protected Map<Class<? extends Annotation>, Set<Annotation>> delegate()
-      {
-         return delegate;
-      }
-
-      /**
-       * Gets the set of annotations matching the given annotation type
-       * 
-       * @param key The meta-annotation to match
-       * @returns The set of matching annotations containing this
-       *          meta-annotation
-       */
-      @Override
-      public Set<Annotation> get(Object key)
-      {
-         Set<Annotation> annotations = super.get(key);
-         return annotations != null ? annotations : new HashSet<Annotation>();
-      }
-
-      /**
-       * Adds an annotation under the meta-annotation type key
-       * 
-       * @param key The meta-annotation type
-       * @param value The annotation
-       */
-      public void put(Class<? extends Annotation> key, Annotation value)
-      {
-         Set<Annotation> annotations = super.get(key);
-         if (annotations == null)
-         {
-            annotations = new HashSet<Annotation>();
-            super.put(key, annotations);
-         }
-         annotations.add(value);
-      }
-
-      /**
-       * Gets a string representation of the Map
-       * 
-       * @return A string representation
-       */
-      @Override
-      public String toString()
-      {
-         return Strings.mapToString("MetaAnnotationMap (annotation type -> annotation set: ", delegate);
-      }
-
-   }
-
-   /**
-    * Builds the annotation map (annotation type -> annotation)
-    * 
-    * @param annotations The array of annotations to map
-    * @return The annotation map
-    */
-   protected static AnnotationMap buildAnnotationMap(Annotation[] annotations)
-   {
-      AnnotationMap annotationMap = new AnnotationMap();
-      for (Annotation annotation : annotations)
-      {
-         annotationMap.put(annotation.annotationType(), annotation);
-      }
-      return annotationMap;
-   }
-   
-   /**
-    * Builds the annotation map (annotation type -> annotation)
-    * 
-    * @param annotations The array of annotations to map
-    * @return The annotation map
-    */
-   protected static AnnotationMap buildAnnotationMap(Iterable<Annotation> annotations)
-   {
-      AnnotationMap annotationMap = new AnnotationMap();
-      for (Annotation annotation : annotations)
-      {
-         annotationMap.put(annotation.annotationType(), annotation);
-      }
-      return annotationMap;
-   }
-   
-   /**
-    * Build an AnnotatedItemHelper from a class
-    * 
-    * @param annotatedElement
-    * @return
-    */
-   public static AnnotationStore of(AnnotatedElement annotatedElement)
-   {
-      return new AnnotationStore(buildAnnotationMap(annotatedElement.getAnnotations()), buildAnnotationMap(annotatedElement.getDeclaredAnnotations()));
-   }
-   
-   public static AnnotationStore of(Annotation[] annotations, Annotation[] declaredAnnotations)
-   {
-      return new AnnotationStore(buildAnnotationMap(annotations), buildAnnotationMap(declaredAnnotations));
-   }
-   
-   public static AnnotationStore wrap(AnnotationStore annotationStore, Set<Annotation> annotations, Set<Annotation> declaredAnnotations)
-   {
-      AnnotationMap annotationMap = new AnnotationMap();
-      annotationMap.putAll(buildAnnotationMap(annotations));
-      annotationMap.putAll(annotationStore.getAnnotationMap());
-      
-      AnnotationMap declaredAnnotationMap = new AnnotationMap();
-      declaredAnnotationMap.putAll(buildAnnotationMap(declaredAnnotations));
-      declaredAnnotationMap.putAll(annotationStore.getDeclaredAnnotationMap());
-      
-      return new AnnotationStore(annotationMap, declaredAnnotationMap);
-   }
-   
-   // The annotation map (annotation type -> annotation) of the item
-   private final AnnotationMap annotationMap;
-   // The meta-annotation map (annotation type -> set of annotations containing
-   // meta-annotation) of the item
-   private final MetaAnnotationMap metaAnnotationMap;
-   // The set of all annotations on the item
-   private final Set<Annotation> annotationSet;
-   
-   // The annotation map (annotation type -> annotation) of the item
-   private final AnnotationMap declaredAnnotationMap;
-   // The meta-annotation map (annotation type -> set of annotations containing
-   // meta-annotation) of the item
-   private final MetaAnnotationMap declaredMetaAnnotationMap;
-   // The set of all annotations on the item
-   private final Set<Annotation> declaredAnnotationSet;
-   
-   /**
-    * Constructor
-    * 
-    * Also builds the meta-annotation map. Throws a NullPointerException if
-    * trying to register a null map
-    * 
-    * @param annotationMap A map of annotation to register
-    * 
-    */
-   protected AnnotationStore(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap)
-   {
-      if (annotationMap == null)
-      {
-         throw new NullPointerException("annotationMap cannot be null");
-      }
-      this.annotationMap = annotationMap;
-      this.annotationSet = new HashSet<Annotation>();
-      this.metaAnnotationMap = new MetaAnnotationMap();
-      for (Annotation annotation : annotationMap.values())
-      {
-         for (Annotation metaAnnotation : annotation.annotationType().getAnnotations())
-         {
-            // Only map meta-annotations we are interested in
-            if (MAPPED_METAANNOTATIONS.contains(metaAnnotation.annotationType()))
-            {
-               metaAnnotationMap.put(metaAnnotation.annotationType(), annotation);
-            }
-         }
-         annotationSet.add(annotation);
-      }
-      
-      if (declaredAnnotationMap == null)
-      {
-         throw new NullPointerException("declaredAnnotationMap cannot be null");
-      }
-      this.declaredAnnotationMap = declaredAnnotationMap;
-      this.declaredAnnotationSet = new HashSet<Annotation>();
-      this.declaredMetaAnnotationMap = new MetaAnnotationMap();
-      for (Annotation annotation : declaredAnnotationMap.values())
-      {
-         for (Annotation metaAnnotation : annotation.annotationType().getAnnotations())
-         {
-            // Only map meta-annotations we are interested in
-            if (MAPPED_METAANNOTATIONS.contains(metaAnnotation.annotationType()))
-            {
-               declaredMetaAnnotationMap.put(metaAnnotation.annotationType(), annotation);
-            }
-         }
-         declaredAnnotationSet.add(annotation);
-      }
-   }
-   
-   public Set<Annotation> getAnnotations()
-   {
-      return Collections.unmodifiableSet(annotationSet);
-   }
-
-   public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
-   {
-      return Collections.unmodifiableSet(metaAnnotationMap.get(metaAnnotationType));
-   }
-   
-   public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
-   {
-      return Collections.unmodifiableSet(declaredMetaAnnotationMap.get(metaAnnotationType));
-   }
-
-   public Annotation[] getMetaAnnotationsAsArray(Class<? extends Annotation> metaAnnotationType)
-   {
-      return getMetaAnnotations(metaAnnotationType).toArray(EMPTY_ANNOTATION_ARRAY);
-   }
-
-   @Deprecated
-   public Set<Annotation> getBindingTypes()
-   {
-      if (getMetaAnnotations(BindingType.class).size() > 0)
-      {
-         return Collections.unmodifiableSet(getMetaAnnotations(BindingType.class));
-      }
-      else
-      {
-         return Collections.unmodifiableSet(DEFAULT_BINDING);
-      }
-   }
-
-   @Deprecated
-   public Annotation[] getBindingTypesAsArray()
-   {
-      return getBindingTypes().toArray(EMPTY_ANNOTATION_ARRAY);
-   }
-
-   public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
-   {
-      return annotationType.cast(annotationMap.get(annotationType));
-   }
-
-   public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
-   {
-      return annotationMap.containsKey(annotationType);
-   }
-   
-   public AnnotationMap getAnnotationMap()
-   {
-      return annotationMap;
-   }
-   
-   public AnnotationMap getDeclaredAnnotationMap()
-   {
-      return declaredAnnotationMap;
-   }
-   
-}

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -22,7 +22,7 @@
 import java.util.Set;
 
 import org.jboss.webbeans.MetaDataCache;
-import org.jboss.webbeans.introspector.jlr.AnnotationStore.AnnotationMap;
+import org.jboss.webbeans.introspector.AnnotationStore.AnnotationMap;
 
 /**
  * Meta model for the merged stereotype for a bean

Modified: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java	2009-01-20 23:32:58 UTC (rev 1134)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java	2009-01-21 01:06:31 UTC (rev 1135)
@@ -37,7 +37,7 @@
       assert manager.resolveByType(Dung.class, SMELLY_LITERAL).iterator().next().getScopeType().equals(RequestScoped.class);
    }
    
-   @Test(groups="broken") @SpecAssertion(section="4.1")
+   @Test @SpecAssertion(section="4.1")
    public void testRealizedBeanWithProducerMethodHasDeploymentTypeOfRealizingClass()
    {
       deployBeans(Cow.class);
@@ -85,12 +85,12 @@
       assert manager.resolveByType(Dung.class, SMELLY_LITERAL).iterator().next().getScopeType().equals(RequestScoped.class);
    }
    
-   @Test(groups="broken") @SpecAssertion(section="4.1")
+   @Test @SpecAssertion(section="4.1")
    public void testRealizedBeanWithProducerFieldHasDeploymentTypeOfRealizingClass()
    {
       deployBeans(Horse.class);
-      assert manager.resolveByType(Dung.class).size() == 1;
-      assert manager.resolveByType(Dung.class).iterator().next().getDeploymentType().equals(AnotherDeploymentType.class);
+      assert manager.resolveByType(Dung.class, SMELLY_LITERAL).size() == 1;
+      assert manager.resolveByType(Dung.class, SMELLY_LITERAL).iterator().next().getDeploymentType().equals(AnotherDeploymentType.class);
    }
    
    @Test @SpecAssertion(section="4.1")




More information about the weld-commits mailing list