[webbeans-commits] Webbeans SVN: r1131 - ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean and 11 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Tue Jan 20 16:13:56 EST 2009


Author: pete.muir at jboss.org
Date: 2009-01-20 16:13:55 -0500 (Tue, 20 Jan 2009)
New Revision: 1131

Added:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.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/ForwardingAnnotatedMethod.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.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/AnnotationStore.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java
Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.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/AnnotatedParameter.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.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/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
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ContainersImpl.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ManagersImpl.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/event/DeferredEventNotificationTest.java
   tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Containers.java
   tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Managers.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java
Log:
realization (still some bugs)

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -56,6 +56,7 @@
 import org.jboss.webbeans.ejb.EjbDescriptorCache;
 import org.jboss.webbeans.ejb.spi.EjbResolver;
 import org.jboss.webbeans.event.EventManager;
+import org.jboss.webbeans.event.ObserverImpl;
 import org.jboss.webbeans.injection.InjectionPointProvider;
 import org.jboss.webbeans.introspector.AnnotatedClass;
 import org.jboss.webbeans.introspector.AnnotatedItem;
@@ -414,6 +415,12 @@
       this.eventManager.addObserver(observer, eventType, bindings);
       return this;
    }
+   
+   public <T> Manager addObserver(ObserverImpl<T> observer)
+   {
+      addObserver(observer, observer.getEventType(), observer.getBindingsAsArray());
+      return this;
+   }
 
    /**
     * Registers an observer for a given event type literal and binding types

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -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.AbstractAnnotatedItem.AnnotationMap;
+import org.jboss.webbeans.introspector.jlr.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/bean/ProducerMethodBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -62,7 +62,7 @@
 
    public static <T> ProducerMethodBean<T> of(Method method, AbstractClassBean<?> declaringBean, ManagerImpl manager)
    {
-      return of(new AnnotatedMethodImpl<T>(method, declaringBean.getAnnotatedItem()), declaringBean, manager);
+      return of(AnnotatedMethodImpl.<T>of(method, declaringBean.getAnnotatedItem()), declaringBean, manager);
    }
 
    /**

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -4,16 +4,16 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import javax.webbeans.DefinitionException;
 import javax.webbeans.Fires;
 import javax.webbeans.Initializer;
-import javax.webbeans.Observer;
 import javax.webbeans.Observes;
 import javax.webbeans.Obtains;
 import javax.webbeans.Produces;
+import javax.webbeans.Realizes;
 
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.bean.AbstractBean;
@@ -44,6 +44,8 @@
    
    private static final LogProvider log = Logging.getLogProvider(BeanDeployer.class);
    
+   private static final Set<Annotation> EMPTY_BINDINGS = Collections.emptySet();
+   
    private final Set<AbstractBean<?, ?>> beans;
    private final ManagerImpl manager;
    
@@ -99,100 +101,90 @@
     * 
     * @param bean The bean representation
     */
-   protected void createBean(AbstractClassBean<?> bean, AnnotatedClass<?> annotatedClass)
+   protected void createBean(AbstractClassBean<?> bean, final AnnotatedClass<?> annotatedClass)
    {
       
       beans.add(bean);
       
       manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
       
-      for (AnnotatedMethod<?> producerMethod : annotatedClass.getDeclaredAnnotatedMethods(Produces.class))
+      registerProducerMethods(bean, annotatedClass, EMPTY_BINDINGS);
+      registerProducerFields(bean, annotatedClass, EMPTY_BINDINGS);
+      registerObserverMethods(bean, annotatedClass);
+      registerFacades(bean.getAnnotatedInjectionPoints());
+      
+      if (annotatedClass.isAnnotationPresent(Realizes.class))
       {
-         ProducerMethodBean<?> producerMethodBean = ProducerMethodBean.of(producerMethod, bean, manager);
-         beans.add(producerMethodBean);
-         manager.getResolver().addInjectionPoints(producerMethodBean.getAnnotatedInjectionPoints());
-         registerEvents(producerMethodBean.getAnnotatedInjectionPoints(), beans);
-         log.info("Web Bean: " + producerMethodBean);
+         registerProducerMethods(bean, annotatedClass.getSuperclass(), bean.getBindings());
+         registerProducerFields(bean, annotatedClass.getSuperclass(), bean.getBindings());
       }
-      for (AnnotatedField<?> producerField : annotatedClass.getDeclaredAnnotatedFields(Produces.class))
+      
+      log.info("Web Bean: " + bean);
+   }
+   
+   private void registerProducerMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass, Set<Annotation> extraBindings)
+   {
+      for (AnnotatedMethod<?> method : annotatedClass.getDeclaredAnnotatedMethods(Produces.class))
       {
-         ProducerFieldBean<?> producerFieldBean = ProducerFieldBean.of(producerField, bean, manager);
-         beans.add(producerFieldBean);
-         log.info("Web Bean: " + producerFieldBean);
+         ProducerMethodBean<?> bean = ProducerMethodBean.of(method.wrap(extraBindings), declaringBean, manager);
+         beans.add(bean);
+         manager.getResolver().addInjectionPoints(bean.getAnnotatedInjectionPoints());
+         registerFacades(bean.getAnnotatedInjectionPoints());
+         log.info("Web Bean: " + bean);
       }
-      for (AnnotatedItem<?, ?> injectionPoint : bean.getAnnotatedInjectionPoints())
+   }
+   
+   private void registerProducerFields(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass, Set<Annotation> extraBindings)
+   {
+      for (AnnotatedField<?> field : annotatedClass.getDeclaredAnnotatedFields(Produces.class))
       {
-         if (injectionPoint.isAnnotationPresent(Fires.class))
-         {
-            registerEvent(injectionPoint, beans);
-         }
-         if (injectionPoint.isAnnotationPresent(Obtains.class))
-         {
-            // TODO FIx this
-            @SuppressWarnings("unchecked")
-            InstanceBean<Object, Field> instanceBean = InstanceBean.of((AnnotatedItem) injectionPoint, manager);
-            beans.add(instanceBean);
-            log.info("Web Bean: " + instanceBean);
-         }
+         ProducerFieldBean<?> bean = ProducerFieldBean.of(field.wrap(extraBindings), declaringBean, manager);
+         beans.add(bean);
+         log.info("Web Bean: " + bean);
       }
+   }
+
+   private void registerObserverMethods(AbstractClassBean<?> declaringBean, AnnotatedClass<?> annotatedClass)
+   {
       for (AnnotatedMethod<?> observerMethod : annotatedClass.getDeclaredMethodsWithAnnotatedParameters(Observes.class))
       {
-         ObserverImpl<?> observer = ObserverImpl.of(observerMethod, bean, manager);
-         if (observerMethod.getAnnotatedParameters(Observes.class).size() == 1)
+         ObserverImpl<?> observer = ObserverImpl.of(observerMethod, declaringBean, manager);
+         manager.addObserver(observer);
+      }
+   }
+
+   private void registerFacades(Set<AnnotatedItem<?, ?>> injectionPoints)
+   {
+      for (AnnotatedItem<?, ?> injectionPoint : injectionPoints)
+      {
+         if (injectionPoint.isAnnotationPresent(Fires.class))
          {
-            registerObserver(observer, observerMethod.getAnnotatedParameters(Observes.class).get(0).getType(), observerMethod.getAnnotatedParameters(Observes.class).get(0).getBindingTypesAsArray());
+             registerEvent(injectionPoint);
          }
-         else
+         if (injectionPoint.isAnnotationPresent(Obtains.class))
          {
-            throw new DefinitionException("Observer method can only have one parameter annotated @Observes " + observer);
+            registerInstance(injectionPoint);
          }
-
       }
-      log.info("Web Bean: " + bean);
    }
-   
 
-   /**
-    * Registers an observer with the getManager()
-    * 
-    * @param observer The observer
-    * @param eventType The event type to observe
-    * @param bindings The binding types to observe on
-    */
-   private <T> void registerObserver(Observer<T> observer, Class<?> eventType, Annotation[] bindings)
+   private void registerEvent(AnnotatedItem<?, ?> injectionPoint)
    {
       // TODO Fix this!
       @SuppressWarnings("unchecked")
-      Class<T> clazz = (Class<T>) eventType;
-      manager.addObserver(observer, clazz, bindings);
+      EventBean<Object, Method> bean = EventBean.of((AnnotatedItem) injectionPoint, manager);
+      beans.add(bean);
+      log.info("Web Bean: " + bean);
    }
-
-   /**
-    * Iterates through the injection points and creates and registers any Event
-    * observables specified with the @Observable annotation
-    * 
-    * @param injectionPoints A set of injection points to inspect
-    * @param beans A set of beans to add the Event beans to
-    */
-   private void registerEvents(Set<AnnotatedItem<?, ?>> injectionPoints, Set<AbstractBean<?, ?>> beans)
+   
+   private void registerInstance(AnnotatedItem<?, ?> injectionPoint)
    {
-      for (AnnotatedItem<?, ?> injectionPoint : injectionPoints)
-      {
-         registerEvent(injectionPoint, beans);
-      }
+      // TODO FIx this
+      @SuppressWarnings("unchecked")
+      InstanceBean<Object, Field> bean = InstanceBean.of((AnnotatedItem) injectionPoint, manager);
+      beans.add(bean);
+      log.info("Web Bean: " + bean);
    }
-
-   private void registerEvent(AnnotatedItem<?, ?> injectionPoint, Set<AbstractBean<?, ?>> beans)
-   {
-      if (injectionPoint.isAnnotationPresent(Fires.class))
-      {
-         // TODO Fix this!
-         @SuppressWarnings("unchecked")
-         EventBean<Object, Method> eventBean = EventBean.of((AnnotatedItem) injectionPoint, manager);
-         beans.add(eventBean);
-         log.info("Web Bean: " + eventBean);
-      }
-   }
    
    /**
     * Indicates if the type is a simple Web Bean

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,6 +17,7 @@
 
 package org.jboss.webbeans.event;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
@@ -68,11 +69,13 @@
       NONE, BEFORE_COMPLETION, AFTER_COMPLETION, AFTER_FAILURE, AFTER_SUCCESS
    }   
    
-   private Bean<?> observerBean;
+   private final Bean<?> observerBean;
    private final AnnotatedMethod<?> observerMethod;
    private TransactionObservationPhase transactionObservationPhase;
-   private boolean conditional;
+   private final boolean conditional;
    private ManagerImpl manager;
+   private final Class<T> eventType;
+   private final Annotation[] bindings;
 
    /**
     * Creates an observer
@@ -95,14 +98,20 @@
     * @param observerBean The observer bean
     * @param manager The Web Beans manager
     */
-   public ObserverImpl(final AnnotatedMethod<?> observer, final Bean<?> observerBean, final ManagerImpl manager)
+   protected ObserverImpl(final AnnotatedMethod<?> observer, final Bean<?> observerBean, final ManagerImpl manager)
    {
       this.manager = manager;
       this.observerBean = observerBean;
       this.observerMethod = observer;
-      validateObserverMethod();
+      checkObserverMethod();
+      
+      @SuppressWarnings("unchecked")
+      Class<T> c = (Class<T>) observerMethod.getAnnotatedParameters(Observes.class).get(0).getType();
+      this.eventType = c;
+      
+      this.bindings = observerMethod.getAnnotatedParameters(Observes.class).get(0).getBindingTypesAsArray(); 
       initTransactionObservationPhase();
-      conditional = !observerMethod.getAnnotatedParameters(IfExists.class).isEmpty();
+      this.conditional = !observerMethod.getAnnotatedParameters(IfExists.class).isEmpty();
    }
 
    private void initTransactionObservationPhase()
@@ -141,13 +150,13 @@
    /**
     * Performs validation of the observer method for compliance with the specifications.
     */
-   private void validateObserverMethod()
+   private void checkObserverMethod()
    {
       // Make sure exactly one and only one parameter is annotated with Observes
       List<AnnotatedParameter<?>> eventObjects = this.observerMethod.getAnnotatedParameters(Observes.class);
       if (eventObjects.size() > 1)
       {
-         throw new DefinitionException(this + " is invalid because it contains more than event parameter");
+         throw new DefinitionException(this + " is invalid because it contains more than event parameter annotated @Observes");
       }
       // Make sure the event object above is not parameterized with a type
       // variable or wildcard
@@ -304,4 +313,14 @@
       return builder.toString();
    }
 
+   public Class<T> getEventType()
+   {
+      return eventType;
+   }
+
+   public Annotation[] getBindingsAsArray()
+   {
+      return bindings;
+   }
+
 }

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedAnnotation.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -43,4 +43,6 @@
     */
    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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedClass.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -151,5 +151,7 @@
    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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -20,6 +20,7 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.util.List;
+import java.util.Set;
 
 import org.jboss.webbeans.ManagerImpl;
 
@@ -64,5 +65,7 @@
     * @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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,7 +17,9 @@
 
 package org.jboss.webbeans.introspector;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
+import java.util.Set;
 
 import javax.webbeans.manager.Manager;
 
@@ -97,4 +99,6 @@
 
    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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -183,5 +183,7 @@
     * @return The name
     */
    public String getName();
+   
+   public AnnotatedItem<T, S> wrap(Set<Annotation> annotations);
 
 }
\ 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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMember.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -16,7 +16,9 @@
  */
 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 
  * 
@@ -28,4 +30,6 @@
    
    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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -130,5 +130,7 @@
    public boolean isEquivalent(Method method);
 
    public Method getAnnotatedMethod();
+   
+   public AnnotatedMethod<T> wrap(Set<Annotation> annotations);
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedParameter.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedParameter.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedParameter.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,6 +17,9 @@
 
 package org.jboss.webbeans.introspector;
 
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
 import javax.webbeans.manager.Manager;
 
 
@@ -38,4 +41,6 @@
    public T getValue(Manager manager);
    
    public AnnotatedMember<?, ?> getDeclaringMember();
+   
+   public AnnotatedParameter<T> wrap(Set<Annotation> annotations);
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,6 +17,9 @@
 
 package org.jboss.webbeans.introspector;
 
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
 /**
  * AnnotatedType provides a uniform access to a type defined either in Java or
  * XML
@@ -40,5 +43,7 @@
     * @return true if equivalent
     */
    public boolean isEquivalent(Class<?> clazz);
+   
+   public AnnotatedType<T> wrap(Set<Annotation> annotations);
 
 }

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedAnnotation.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,27 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+public abstract class ForwardingAnnotatedAnnotation<T extends Annotation> extends ForwardingAnnotatedType<T> implements AnnotatedAnnotation<T>
+{
+   
+   @Override
+   protected abstract AnnotatedAnnotation<T> delegate();
+   
+   public Set<AnnotatedMethod<?>> getAnnotatedMembers(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getAnnotatedMembers(annotationType);
+   }
+   
+   public Set<AnnotatedMethod<?>> getMembers()
+   {
+      return delegate().getMembers();
+   }
+   
+   public AnnotatedAnnotation<T> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedClass.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,98 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Set;
+
+public abstract class ForwardingAnnotatedClass<T> extends ForwardingAnnotatedItem<T, Class<T>> implements AnnotatedClass<T>
+{
+
+   protected abstract AnnotatedClass<T> delegate();
+
+   public Set<AnnotatedConstructor<T>> getAnnotatedConstructors(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getAnnotatedConstructors(annotationType);
+   }
+
+   public Set<AnnotatedField<?>> getAnnotatedFields(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getAnnotatedFields(annotationType);
+   }
+
+   public Set<AnnotatedMethod<?>> getAnnotatedMethods(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getAnnotatedMethods(annotationType);
+   }
+
+   public AnnotatedConstructor<T> getConstructor(List<Class<?>> arguments)
+   {
+      return delegate().getConstructor(arguments);
+   }
+
+   public Set<AnnotatedConstructor<T>> getConstructors()
+   {
+      return delegate().getConstructors();
+   }
+
+   public Set<AnnotatedField<?>> getDeclaredAnnotatedFields(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getDeclaredAnnotatedFields(annotationType);
+   }
+
+   public Set<AnnotatedMethod<?>> getDeclaredAnnotatedMethods(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getDeclaredAnnotatedMethods(annotationType);
+   }
+
+   public Set<AnnotatedMethod<?>> getDeclaredMethodsWithAnnotatedParameters(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getDeclaredMethodsWithAnnotatedParameters(annotationType);
+   }
+
+   public Set<AnnotatedField<?>> getFields()
+   {
+      return delegate().getFields();
+   }
+
+   public Set<AnnotatedField<?>> getMetaAnnotatedFields(Class<? extends Annotation> metaAnnotationType)
+   {
+      return delegate().getMetaAnnotatedFields(metaAnnotationType);
+   }
+
+   public AnnotatedMethod<?> getMethod(Method method)
+   {
+      return delegate().getMethod(method);
+   }
+
+   public Set<AnnotatedMethod<?>> getMethodsWithAnnotatedParameters(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getMethodsWithAnnotatedParameters(annotationType);
+   }
+
+   public AnnotatedClass<?> getSuperclass()
+   {
+      return delegate().getSuperclass();
+   }
+
+   public boolean isNonStaticMemberClass()
+   {
+      return delegate().isNonStaticMemberClass();
+   }
+
+   public boolean isParameterizedType()
+   {
+      return delegate().isParameterizedType();
+   }
+
+   public boolean isEquivalent(Class<?> clazz)
+   {
+      return delegate().isEquivalent(clazz);
+   }
+   
+   public AnnotatedClass<T> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedConstructor.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,43 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.webbeans.ManagerImpl;
+
+public abstract class ForwardingAnnotatedConstructor<T> extends ForwardingAnnotatedMember<T, Constructor<T>> implements AnnotatedConstructor<T>
+{
+
+   @Override
+   protected abstract AnnotatedConstructor<T> delegate();
+
+   public List<AnnotatedParameter<?>> getAnnotatedParameters(Class<? extends Annotation> annotationType)
+   {
+      return delegate().getAnnotatedParameters(annotationType);
+   }
+
+   public AnnotatedType<T> getDeclaringClass()
+   {
+      return delegate().getDeclaringClass();
+   }
+
+   public List<AnnotatedParameter<?>> getParameters()
+   {
+      return delegate().getParameters();
+   }
+
+   public T newInstance(ManagerImpl manager)
+   {
+      return delegate().newInstance(manager);
+   }
+
+   public AnnotatedConstructor<T> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
+   
+   
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,66 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.Set;
+
+import javax.webbeans.manager.Manager;
+
+public abstract class ForwardingAnnotatedField<T> extends ForwardingAnnotatedMember<T, Field> implements AnnotatedField<T>
+{
+
+   @Override
+   protected abstract AnnotatedField<T> delegate();
+
+   public T get(Object instance)
+   {
+      return delegate().get(instance);
+   }
+
+   public Field getAnnotatedField()
+   {
+      return delegate().getAnnotatedField();
+   }
+
+   public AnnotatedType<?> getDeclaringClass()
+   {
+      return delegate().getDeclaringClass();
+   }
+
+   public String getPropertyName()
+   {
+      return delegate().getPropertyName();
+   }
+
+   public void inject(Object declaringInstance, Manager manager)
+   {
+      delegate().inject(declaringInstance, manager);
+   }
+
+   public void inject(Object declaringInstance, Object value)
+   {
+      delegate().inject(declaringInstance, value);
+   }
+
+   public void injectIntoInstance(Object declaringInstance, Object value)
+   {
+      delegate().injectIntoInstance(declaringInstance, value);
+   }
+
+   public void injectIntoInstance(Object declaringInstance, Manager manager)
+   {
+      delegate().injectIntoInstance(declaringInstance, manager);
+   }
+
+   public boolean isTransient()
+   {
+      return delegate().isTransient();
+   }
+
+   public AnnotatedField<T> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
+   
+      
+}


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedField.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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedItem.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -200,6 +200,11 @@
     * 
     * @return The annotated item
     */
-   public abstract AnnotatedItem<T, S> delegate();
+   protected abstract AnnotatedItem<T, S> delegate();
+   
+   public AnnotatedItem<T, S> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
 
 }

Added: 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	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMember.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,24 @@
+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>
+{
+   
+   @Override
+   protected abstract AnnotatedMember<T, S> delegate();
+   
+   public S getMember()
+   {
+      return delegate().getMember();
+   }
+   
+   @Override
+   public AnnotatedMember<T, S> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMethod.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedMethod.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,76 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.webbeans.ManagerImpl;
+
+public abstract class ForwardingAnnotatedMethod<T> extends ForwardingAnnotatedMember<T, Method> implements AnnotatedMethod<T>
+{
+   
+   @Override
+   protected abstract AnnotatedMethod<T> delegate();
+   
+   public Method getAnnotatedMethod()
+   {
+      return delegate().getAnnotatedMethod();
+   }
+   
+   public List<AnnotatedParameter<?>> getAnnotatedParameters(Class<? extends Annotation> metaAnnotationType)
+   {
+      return delegate().getAnnotatedParameters(metaAnnotationType);
+   }
+
+   public AnnotatedType<?> getDeclaringClass()
+   {
+      return delegate().getDeclaringClass();
+   }
+
+   public Class<?>[] getParameterTypesAsArray()
+   {
+      return delegate().getParameterTypesAsArray();
+   }
+
+   public List<AnnotatedParameter<?>> getParameters()
+   {
+      return delegate().getParameters();
+   }
+
+   public String getPropertyName()
+   {
+      return delegate().getPropertyName();
+   }
+
+   public T invoke(Object instance, ManagerImpl manager)
+   {
+      return delegate().invoke(instance, manager);
+   }
+
+   public T invoke(Object instance, Object... parameters)
+   {
+      return delegate().invoke(instance, parameters);
+   }
+
+   public T invokeOnInstance(Object instance, ManagerImpl manager)
+   {
+      return delegate().invokeOnInstance(instance, manager);
+   }
+
+   public T invokeWithSpecialValue(Object instance, Class<? extends Annotation> specialParam, Object specialVal, ManagerImpl manager)
+   {
+      return delegate().invokeWithSpecialValue(instance, specialParam, specialVal, manager);
+   }
+
+   public boolean isEquivalent(Method method)
+   {
+      return delegate().isEquivalent(method);
+   }
+   
+   public AnnotatedMethod<T> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedParameter.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,29 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.webbeans.manager.Manager;
+
+public abstract class ForwardingAnnotatedParameter<T> extends ForwardingAnnotatedItem<T, Object> implements AnnotatedParameter<T>
+{
+
+   @Override
+   protected abstract AnnotatedParameter<T> delegate();
+
+   public AnnotatedMember<?, ?> getDeclaringMember()
+   {
+      return delegate().getDeclaringMember();
+   }
+
+   public T getValue(Manager manager)
+   {
+      return delegate().getValue(manager);
+   }
+
+   public AnnotatedParameter<T> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
+   
+}


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

Added: 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	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,30 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+
+
+public abstract class ForwardingAnnotatedType<T> extends ForwardingAnnotatedItem<T, Class<T>> implements AnnotatedType<T>
+{
+
+   @Override
+   protected abstract AnnotatedType<T> delegate();
+
+   public AnnotatedType<?> getSuperclass()
+   {
+      return delegate().getSuperclass();
+   }
+
+   public boolean isEquivalent(Class<?> clazz)
+   {
+      return delegate().isEquivalent(clazz);
+   }
+   
+   @Override
+   public AnnotatedType<T> wrap(Set<Annotation> annotations)
+   {
+      throw new UnsupportedOperationException();
+   }
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/ForwardingAnnotatedType.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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -18,13 +18,10 @@
 package org.jboss.webbeans.introspector.jlr;
 
 import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Type;
 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;
@@ -33,11 +30,8 @@
 import org.jboss.webbeans.literal.CurrentLiteral;
 import org.jboss.webbeans.util.Proxies;
 import org.jboss.webbeans.util.Reflections;
-import org.jboss.webbeans.util.Strings;
 import org.jboss.webbeans.util.Types;
 
-import com.google.common.collect.ForwardingMap;
-
 /**
  * Represents functionality common for all annotated items, mainly different
  * mappings of the annotations and meta-annotations
@@ -52,168 +46,26 @@
  * 
  * @see org.jboss.webbeans.introspector.AnnotatedItem
  */
-public abstract class AbstractAnnotatedItem<T, S> implements AnnotatedItem<T, S>
+public abstract class AbstractAnnotatedItem<T, S> implements WrappableAnnotatedItem<T, S>
 {
-
-   /**
-    * Represents a mapping from a annotation type to an annotation
-    * implementation
-    */
-   public static class AnnotationMap extends ForwardingMap<Class<? extends Annotation>, Annotation>
+   
+   interface WrappableAnnotatedItem<T, S> extends AnnotatedItem<T, S>
    {
-      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);
-      }
-
+      
+      AnnotationStore getAnnotationStore();
+      
    }
 
-   /**
-    * 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);
-      }
-
-   }
-
    // 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));
-
+   
    // Cached string representation
    private String toString;
+   private final AnnotationStore annotationStore;
 
    /**
-    * Static helper method for building annotation map from an annotated element
-    * 
-    * @param element The element to examine
-    * @return The annotation map
-    */
-   protected static AnnotationMap buildAnnotationMap(AnnotatedElement element)
-   {
-      return buildAnnotationMap(element.getAnnotations());
-   }
-   
-   /**
-    * Static helper method for building annotation map from an annotated element
-    * 
-    * @param element The element to examine
-    * @return The annotation map
-    */
-   protected static AnnotationMap buildDeclaredAnnotationMap(AnnotatedElement element)
-   {
-      return buildAnnotationMap(element.getDeclaredAnnotations());
-   }
-
-   /**
-    * 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;
-   }
-   
-   // 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
@@ -222,52 +74,14 @@
     * @param annotationMap A map of annotation to register
     * 
     */
-   public AbstractAnnotatedItem(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap)
+   public AbstractAnnotatedItem(AnnotationStore annotatedItemHelper)
    {
-      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);
-      }
+      this.annotationStore = annotatedItemHelper;
    }
    
-   public AbstractAnnotatedItem(AnnotationMap annotationMap)
+   public AnnotationStore getAnnotationStore()
    {
-      this(annotationMap, annotationMap);
+      return annotationStore;
    }
 
    /**
@@ -280,7 +94,7 @@
     */
    public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
    {
-      return annotationType.cast(annotationMap.get(annotationType));
+      return annotationType.cast(getAnnotationStore().getAnnotationMap().get(annotationType));
    }
 
    /**
@@ -294,12 +108,12 @@
     */
    public Set<Annotation> getMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
    {
-      return Collections.unmodifiableSet(metaAnnotationMap.get(metaAnnotationType));
+      return Collections.unmodifiableSet(getAnnotationStore().getMetaAnnotationMap().get(metaAnnotationType));
    }
    
    public Set<Annotation> getDeclaredMetaAnnotations(Class<? extends Annotation> metaAnnotationType)
    {
-      return Collections.unmodifiableSet(declaredMetaAnnotationMap.get(metaAnnotationType));
+      return Collections.unmodifiableSet(getAnnotationStore().getDeclaredMetaAnnotationMap().get(metaAnnotationType));
    }
 
    /**
@@ -330,7 +144,7 @@
     */
    public Set<Annotation> getAnnotations()
    {
-      return Collections.unmodifiableSet(annotationSet);
+      return getAnnotationStore().getAnnotationSet();
    }
 
    /**
@@ -343,20 +157,10 @@
     */
    public boolean isAnnotationPresent(Class<? extends Annotation> annotatedType)
    {
-      return annotationMap.containsKey(annotatedType);
+      return getAnnotationStore().getAnnotationMap().containsKey(annotatedType);
    }
 
    /**
-    * Gets the annotation map
-    * 
-    * @return The annotation map
-    */
-   protected Map<Class<? extends Annotation>, Annotation> getAnnotationMap()
-   {
-      return Collections.unmodifiableMap(annotationMap);
-   }
-
-   /**
     * Compares two AbstractAnnotatedItems
     * 
     * @param other The other item

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -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.ForwardingAnnotatedMember;
 import org.jboss.webbeans.util.Reflections;
 import org.jboss.webbeans.util.Strings;
 
@@ -51,6 +52,12 @@
  */
 public abstract class AbstractAnnotatedMember<T, S extends Member> extends AbstractAnnotatedItem<T, S> implements AnnotatedMember<T, S>
 {
+   
+   static abstract class WrappableForwardingAnnotatedMember<T, S extends Member> extends ForwardingAnnotatedMember<T, S> implements WrappableAnnotatedItem<T, S>
+   {
+      
+   }
+   
    /**
     * An annotation type -> list of annotations map
     */
@@ -107,9 +114,9 @@
     * 
     * @param annotationMap The annotation map
     */
-   public AbstractAnnotatedMember(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap, Member member)
+   public AbstractAnnotatedMember(AnnotationStore annotatedItemHelper, Member member)
    {
-      super(annotationMap, declaredAnnotationMap);
+      super(annotatedItemHelper);
       name = member.getName();
       _public = Modifier.isPublic(member.getModifiers());
    }

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -33,6 +33,7 @@
  */
 public abstract class AbstractAnnotatedType<T> extends AbstractAnnotatedItem<T, Class<T>>
 {
+   
    // The superclass abstraction of the type
    private final AnnotatedClass<?> superclass;
    // The name of the type
@@ -47,9 +48,9 @@
     * 
     * @param annotationMap The annotation map
     */
-   public AbstractAnnotatedType(AnnotationMap annotationMap, AnnotationMap declaredAnnotationMap, Class<T> type)
+   public AbstractAnnotatedType(AnnotationStore annotatedItemHelper, Class<T> type)
    {
-      super(annotationMap, declaredAnnotationMap);
+      super(annotatedItemHelper);
       this.name = type.getName();
       if (type.getSuperclass() != null)
       {
@@ -61,11 +62,6 @@
       }
       this._public = Modifier.isFinal(type.getModifiers());
    }
-   
-   public AbstractAnnotatedType(AnnotationMap annotationMap, Class<T> type)
-   {
-      this(annotationMap, annotationMap, type);
-   }
 
    /**
     * Indicates if the type is static

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -28,6 +28,7 @@
 
 import org.jboss.webbeans.introspector.AnnotatedAnnotation;
 import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedAnnotation;
 import org.jboss.webbeans.util.Strings;
 
 import com.google.common.collect.ForwardingMap;
@@ -41,9 +42,21 @@
  * 
  * @param <T>
  */
-public class AnnotatedAnnotationImpl<T extends Annotation> extends AbstractAnnotatedType<T> implements AnnotatedAnnotation<T>
+public class AnnotatedAnnotationImpl<T extends Annotation> extends AbstractAnnotatedType<T> implements AnnotatedAnnotation<T>, WrappableAnnotatedAnnotation<T>
 {
 
+   abstract static class ForwardingWrappableAnnotatedAnnotation<T extends Annotation> extends ForwardingAnnotatedAnnotation<T> implements WrappableAnnotatedType<T>
+   {
+      
+      @Override
+      protected abstract WrappableAnnotatedAnnotation<T> delegate();
+      
+      public AnnotationStore getAnnotationStore()
+      {
+         return delegate().getAnnotationStore();
+      }
+   }
+   
    /**
     * A (annotation type -> set of method abstractions with annotation) map
     */
@@ -106,13 +119,13 @@
     */
    public AnnotatedAnnotationImpl(Class<T> annotationType)
    {
-      super(buildAnnotationMap(annotationType), buildDeclaredAnnotationMap(annotationType), annotationType);
+      super(AnnotationStore.of(annotationType), annotationType);
       this.clazz = annotationType;
       members = new HashSet<AnnotatedMethod<?>>();
       annotatedMembers = new AnnotatedMemberMap();
       for (Method member : clazz.getDeclaredMethods())
       {
-         AnnotatedMethod<?> annotatedMethod = new AnnotatedMethodImpl<Object>(member, this);
+         AnnotatedMethod<?> annotatedMethod = AnnotatedMethodImpl.of(member, this);
          members.add(annotatedMethod);
          for (Annotation annotation : annotatedMethod.getAnnotations())
          {
@@ -193,4 +206,19 @@
       return clazz;
    }
 
+   public AnnotatedAnnotation<T> wrap(Set<Annotation> annotations)
+   {
+      final WrappableAnnotatedAnnotation<T> delegate = this;
+      return new ForwardingWrappableAnnotatedAnnotation<T>()
+      {
+
+         @Override
+         protected WrappableAnnotatedAnnotation<T> delegate()
+         {
+            return delegate;
+         }
+         
+      };
+   }
+
 }

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -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.ForwardingAnnotatedClass;
 import org.jboss.webbeans.util.Names;
 import org.jboss.webbeans.util.Reflections;
 import org.jboss.webbeans.util.Strings;
@@ -52,9 +53,22 @@
  * 
  * @param <T>
  */
-public class AnnotatedClassImpl<T> extends AbstractAnnotatedType<T> implements AnnotatedClass<T>
+public class AnnotatedClassImpl<T> extends AbstractAnnotatedType<T> implements AnnotatedClass<T>, WrappableAnnotatedClass<T>
 {
    
+   abstract static class ForwardingWrappableAnnotatedClass<T> extends ForwardingAnnotatedClass<T> implements WrappableAnnotatedClass<T>
+   {
+      
+      @Override
+      protected abstract WrappableAnnotatedClass<T> delegate();
+      
+      
+      public AnnotationStore getAnnotationStore()
+      {
+         return delegate().getAnnotationStore();
+      }
+   }
+   
    /**
     * A (annotation type -> set of field abstractions with annotation/meta
     * annotation) map
@@ -280,7 +294,7 @@
 
    private AnnotatedClassImpl(Class<T> rawType, Type type, Annotation[] annotations, Annotation[] declaredAnnotations)
    {
-      super(buildAnnotationMap(annotations), buildAnnotationMap(declaredAnnotations), rawType);
+      super(AnnotationStore.of(annotations, declaredAnnotations), rawType);
       this.clazz = rawType;
       if (type instanceof ParameterizedType)
       {
@@ -373,7 +387,7 @@
                method.setAccessible(true);
             }
             
-            AnnotatedMethod<?> annotatedMethod = new AnnotatedMethodImpl<Object>(method, this);
+            AnnotatedMethod<?> annotatedMethod = AnnotatedMethodImpl.of(method, this);
             this.methods.add(annotatedMethod);
             if (c == clazz)
             {
@@ -613,4 +627,19 @@
       return toString;
    }
    
+   public AnnotatedClass<T> wrap(Set<Annotation> annotations)
+   {
+      final WrappableAnnotatedClass<T> delegate = this;
+      return new ForwardingWrappableAnnotatedClass<T>()
+      {
+
+         @Override
+         protected WrappableAnnotatedClass<T> delegate()
+         {
+            return delegate;
+         }
+         
+      };
+   }
+   
 }
\ No newline at end of file

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 import javax.webbeans.ExecutionException;
 
@@ -31,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.ForwardingAnnotatedConstructor;
 import org.jboss.webbeans.util.Names;
 
 /**
@@ -42,8 +44,23 @@
  * 
  * @param <T>
  */
-public class AnnotatedConstructorImpl<T> extends AbstractAnnotatedMember<T, Constructor<T>> implements AnnotatedConstructor<T>
+public class AnnotatedConstructorImpl<T> extends AbstractAnnotatedMember<T, Constructor<T>> implements WrappableAnnotatedConstructor<T>
 {
+   
+   static abstract class ForwardingWrappableAnnotatedConstructor<T> extends ForwardingAnnotatedConstructor<T> implements WrappableAnnotatedConstructor<T>
+   {
+      
+      @Override
+      protected abstract WrappableAnnotatedConstructor<T> delegate();
+      
+      public AnnotationStore getAnnotationStore()
+      {
+         // TODO Auto-generated method stub
+         return null;
+      }
+      
+   }
+   
    // The type arguments
    private static final Type[] actualTypeArguments = new Type[0];
    // The underlying constructor
@@ -75,7 +92,7 @@
     */
    public AnnotatedConstructorImpl(Constructor<T> constructor, AnnotatedType<T> declaringClass)
    {
-      super(buildAnnotationMap(constructor), buildDeclaredAnnotationMap(constructor), constructor);
+      super(AnnotationStore.of(constructor), constructor);
       this.constructor = constructor;
       this.declaringClass = declaringClass;
 
@@ -268,5 +285,20 @@
       toString = "Annotated method " + Names.constructor2String(constructor);
       return toString;
    }
+   
+   public WrappableAnnotatedConstructor<T> wrap(Set<Annotation> annotations)
+   {
+      final WrappableAnnotatedConstructor<T> delegate = this;
+      return new ForwardingWrappableAnnotatedConstructor<T>()
+      {
 
+         @Override
+         protected WrappableAnnotatedConstructor<T> delegate()
+         {
+            return delegate;
+         }
+         
+      };
+   }
+
 }

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -17,14 +17,17 @@
 
 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.util.Names;
 import org.jboss.webbeans.util.Reflections;
 
@@ -37,8 +40,22 @@
  * 
  * @param <T>
  */
-public class AnnotatedFieldImpl<T> extends AbstractAnnotatedMember<T, Field> implements AnnotatedField<T>
+public class AnnotatedFieldImpl<T> extends AbstractAnnotatedMember<T, Field> implements WrappableAnnotatedField<T>
 {
+   
+   static abstract class ForwardingWrappableAnnotatedField<T> extends ForwardingAnnotatedField<T> implements WrappableAnnotatedField<T>
+   {
+      
+      @Override
+      protected abstract WrappableAnnotatedField<T> delegate();
+      
+      public AnnotationStore getAnnotationStore()
+      {
+         return delegate().getAnnotationStore();
+      }
+      
+   }
+   
    // The actual type arguments
    private final Type[] actualTypeArguments;
    // The underlying field
@@ -60,7 +77,7 @@
     */
    public AnnotatedFieldImpl(Field field, AnnotatedType<?> declaringClass)
    {
-      super(buildAnnotationMap(field), buildDeclaredAnnotationMap(field), field);
+      super(AnnotationStore.of(field), field);
       this.field = field;
       field.setAccessible(true);
       this.declaringClass = declaringClass;
@@ -186,5 +203,34 @@
       toString = "Annotated field " + Names.field2String(field);
       return toString;
    }
+   
+   public AnnotatedField<T> wrap(Set<Annotation> annotations)
+   {
+      if (annotations.size() > 0)
+      {
+         final WrappableAnnotatedField<T> delegate = this;
+         final AnnotationStore annotationStore = AnnotationStore.wrap(getAnnotationStore(), annotations, annotations);
+         return new ForwardingWrappableAnnotatedField<T>()
+         {
+            
+            @Override
+            protected WrappableAnnotatedField<T> delegate()
+            {
+               return delegate;
+            }
+            
+            @Override
+            public AnnotationStore getAnnotationStore()
+            {
+               return annotationStore;
+            }
+            
+         };
+      }
+      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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -25,11 +25,13 @@
 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.util.Names;
 import org.jboss.webbeans.util.Reflections;
 
@@ -42,9 +44,22 @@
  * 
  * @param <T>
  */
-public class AnnotatedMethodImpl<T> extends AbstractAnnotatedMember<T, Method> implements AnnotatedMethod<T>
+public class AnnotatedMethodImpl<T> extends AbstractAnnotatedMember<T, Method> implements AnnotatedMethod<T>, WrappableAnnotatedMethod<T>
 {
    
+   abstract static class ForwardingWrappableAnnotatedMethod<T> extends ForwardingAnnotatedMethod<T> implements WrappableAnnotatedMethod<T>
+   {
+      
+      @Override
+      protected abstract WrappableAnnotatedMethod<T> delegate();
+      
+      public AnnotationStore getAnnotationStore()
+      {
+         return delegate().getAnnotationStore();
+      }
+      
+   }
+
    // The actual type arguments
    private final Type[] actualTypeArguments;
    // The underlying method
@@ -64,7 +79,28 @@
 
    // Cached string representation
    private String toString;
+   
+   public static <T> AnnotatedMethodImpl<T> of(Method method, AnnotatedType<?> declaringClass)
+   {
+      return new AnnotatedMethodImpl<T>(method, declaringClass);
+   }
+   
+   public static <T> AnnotatedMethod<T> wrap(final AnnotatedMethod<T> annotatedMethod, final Set<Annotation> extraAnnotations)
+   {
+      return new ForwardingAnnotatedMethod<T>()
+      {
 
+         @Override
+         protected AnnotatedMethod<T> delegate()
+         {
+            return annotatedMethod;
+         }
+         
+        
+         
+      };
+   }
+
    /**
     * Constructor
     * 
@@ -75,9 +111,9 @@
     * @param declaringClass The declaring class abstraction
     */
    @SuppressWarnings("unchecked")
-   public AnnotatedMethodImpl(Method method, AnnotatedType<?> declaringClass)
+   protected AnnotatedMethodImpl(Method method, AnnotatedType<?> declaringClass)
    {
-      super(buildAnnotationMap(method), buildDeclaredAnnotationMap(method), method);
+      super(AnnotationStore.of(method), method);
       this.method = method;
       this.declaringClass = declaringClass;
       if (method.getGenericReturnType() instanceof ParameterizedType)
@@ -321,5 +357,35 @@
       toString = "Annotated method " + Names.method2String(method);
       return toString;
    }
+   
+   public AnnotatedMethod<T> wrap(Set<Annotation> annotations)
+   {
+      if (annotations.size() > 0)
+      {
+         final WrappableAnnotatedMethod<T> delegate = this;
+         final AnnotationStore annotationStore = AnnotationStore.wrap(getAnnotationStore(), annotations, annotations);
+         return new ForwardingWrappableAnnotatedMethod<T>()
+         {
+   
+            @Override
+            protected WrappableAnnotatedMethod<T> delegate()
+            {
+               return delegate;
+            }
+            
+            @Override
+            public AnnotationStore getAnnotationStore()
+            {
+               return annotationStore;
+            }
+            
+         };
+      }
+      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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -19,12 +19,14 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.util.Set;
 
 import javax.webbeans.BindingType;
 import javax.webbeans.manager.Manager;
 
 import org.jboss.webbeans.introspector.AnnotatedMember;
 import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.introspector.ForwardingAnnotatedParameter;
 
 /**
  * Represents a parameter
@@ -35,8 +37,22 @@
  * 
  * @param <T>
  */
-public class AnnotatedParameterImpl<T> extends AbstractAnnotatedItem<T, Object> implements AnnotatedParameter<T>
+public class AnnotatedParameterImpl<T> extends AbstractAnnotatedItem<T, Object> implements WrappableAnnotatedParameter<T>
 {
+   
+   static abstract class ForwardingWrappableAnnotatedParameter<T> extends ForwardingAnnotatedParameter<T> implements WrappableAnnotatedParameter<T>
+   {
+      
+      @Override
+      protected abstract WrappableAnnotatedParameter<T> delegate();
+      
+      public AnnotationStore getAnnotationStore()
+      {
+         return delegate().getAnnotationStore();
+      }
+      
+   }
+   
    // The type
    private final Class<T> type;
    // The actual type arguments
@@ -64,7 +80,7 @@
     */
    public AnnotatedParameterImpl(Annotation[] annotations, Class<T> type, AnnotatedMember<?, ?> declaringMember)
    {
-      super(buildAnnotationMap(annotations));
+      super(AnnotationStore.of(annotations, annotations));
       this.type = type;
       this.declaringMember = declaringMember;
    }
@@ -187,5 +203,21 @@
    {
       return declaringMember;
    }
+   
+   public AnnotatedParameter<T> wrap(Set<Annotation> annotations)
+   {
+      final WrappableAnnotatedParameter<T> delegate = this;
+      
+      return new ForwardingWrappableAnnotatedParameter<T>()
+      {
+        
+         @Override
+         protected WrappableAnnotatedParameter<T> delegate()
+         {
+            return delegate;
+         }
+         
+      };
+   }
 
 }

Added: 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	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotationStore.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,292 @@
+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.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.webbeans.util.Strings;
+
+import com.google.common.collect.ForwardingMap;
+
+public class AnnotationStore
+{
+   /**
+    * 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);
+      }
+   }
+   
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getAnnotationMap()
+    */
+   public Map<Class<? extends Annotation>, Annotation> getAnnotationMap()
+   {
+      return Collections.unmodifiableMap(annotationMap);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getAnnotationSet()
+    */
+   public Set<Annotation> getAnnotationSet()
+   {
+      return Collections.unmodifiableSet(annotationSet);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getMetaAnnotationMap()
+    */
+   public Map<Class<? extends Annotation>, Set<Annotation>> getMetaAnnotationMap()
+   {
+      return Collections.unmodifiableMap(metaAnnotationMap);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getDeclaredAnnotationMap()
+    */
+   public Map<Class<? extends Annotation>, Annotation> getDeclaredAnnotationMap()
+   {
+      return Collections.unmodifiableMap(declaredAnnotationMap);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getDeclaredAnnotationSet()
+    */
+   public Set<Annotation> getDeclaredAnnotationSet()
+   {
+      return Collections.unmodifiableSet(declaredAnnotationSet);
+   }
+   
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.introspector.jlr.AnnotationStore#getDeclaredMetaAnnotationMap()
+    */
+   public Map<Class<? extends Annotation>, Set<Annotation>> getDeclaredMetaAnnotationMap()
+   {
+      return Collections.unmodifiableMap(declaredMetaAnnotationMap);
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedAnnotation.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.webbeans.introspector.AnnotatedAnnotation;
+
+interface WrappableAnnotatedAnnotation<T extends Annotation> extends AnnotatedAnnotation<T>, WrappableAnnotatedType<T>
+{
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedClass.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import org.jboss.webbeans.introspector.AnnotatedClass;
+
+public interface WrappableAnnotatedClass<T> extends AnnotatedClass<T>, WrappableAnnotatedType<T>
+{
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedConstructor.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.reflect.Constructor;
+
+import org.jboss.webbeans.introspector.AnnotatedConstructor;
+
+interface WrappableAnnotatedConstructor<T> extends AnnotatedConstructor<T>, WrappableAnnotatedItem<T, Constructor<T>>
+{
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedField.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.reflect.Field;
+
+import org.jboss.webbeans.introspector.AnnotatedField;
+
+interface WrappableAnnotatedField<T> extends AnnotatedField<T>, WrappableAnnotatedItem<T, Field>
+{
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedItem.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import org.jboss.webbeans.introspector.AnnotatedItem;
+
+interface WrappableAnnotatedItem<T, S> extends AnnotatedItem<T, S>
+{
+   
+   AnnotationStore getAnnotationStore();
+   
+}
\ No newline at end of file


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMember.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.reflect.Member;
+
+import org.jboss.webbeans.introspector.AnnotatedMember;
+
+interface WrappableAnnotatedMember<T, S extends Member> extends AnnotatedMember<T, S>, WrappableAnnotatedItem<T, S>
+{
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedMethod.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import java.lang.reflect.Method;
+
+import org.jboss.webbeans.introspector.AnnotatedMember;
+import org.jboss.webbeans.introspector.AnnotatedMethod;
+
+interface WrappableAnnotatedMethod<T> extends AnnotatedMethod<T>, WrappableAnnotatedItem<T, Method>
+{
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedParameter.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import org.jboss.webbeans.introspector.AnnotatedParameter;
+
+interface WrappableAnnotatedParameter<T> extends AnnotatedParameter<T>, WrappableAnnotatedItem<T, Object>
+{
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/WrappableAnnotatedType.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.introspector.jlr;
+
+import org.jboss.webbeans.introspector.AnnotatedType;
+
+interface WrappableAnnotatedType<T> extends AnnotatedType<T>, WrappableAnnotatedItem<T, Class<T>>
+{
+   
+}
\ No newline at end of file


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

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 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypes.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -22,7 +22,7 @@
 import java.util.Set;
 
 import org.jboss.webbeans.MetaDataCache;
-import org.jboss.webbeans.introspector.jlr.AbstractAnnotatedItem.AnnotationMap;
+import org.jboss.webbeans.introspector.jlr.AnnotationStore.AnnotationMap;
 
 /**
  * Meta model for the merged stereotype for a bean

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ContainersImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ContainersImpl.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ContainersImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -1,7 +1,11 @@
 package org.jboss.webbeans.test.tck;
 
+import java.lang.annotation.Annotation;
+import java.util.List;
+
 import javax.webbeans.manager.Manager;
 
+import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.tck.api.Containers;
 import org.jboss.webbeans.test.mock.MockBootstrap;
 import org.jboss.webbeans.test.mock.MockWebBeanDiscovery;
@@ -9,11 +13,21 @@
 public class ContainersImpl implements Containers
 {
    
-   public Manager deploy(Class<?>... classes)
+   public Manager deploy(List<Class<? extends Annotation>> enabledDeploymentTypes, Class<?>... classes)
    {
       MockBootstrap bootstrap = new MockBootstrap();
       bootstrap.setWebBeanDiscovery(new MockWebBeanDiscovery(classes));
       bootstrap.boot();
-      return bootstrap.getManager();
+      ManagerImpl manager = bootstrap.getManager();
+      if (enabledDeploymentTypes != null)
+      {
+         manager.setEnabledDeploymentTypes(enabledDeploymentTypes);
+      }
+      return manager;
    }
+   
+   public Manager deploy(java.lang.Class<?>... classes) 
+   {
+      return deploy(null, classes);
+   }
 }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ManagersImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ManagersImpl.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/tck/ManagersImpl.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -11,16 +11,20 @@
 
 public class ManagersImpl implements Managers
 {
-
-   public Manager createManager()
+   
+   public Manager createManager(List<Class<? extends Annotation>> enabledDeploymentTypes)
    {
       new MockBootstrap();
+      if (enabledDeploymentTypes != null)
+      {
+         CurrentManager.rootManager().setEnabledDeploymentTypes(enabledDeploymentTypes);
+      }
       return CurrentManager.rootManager();
    }
-
-   public void setEnabledDeploymentTypes(List<Class<? extends Annotation>> enabledDeploymentTypes)
+   
+   public Manager createManager()
    {
-      CurrentManager.rootManager().setEnabledDeploymentTypes(enabledDeploymentTypes);
+      return createManager(null);
    }
 
    public List<Class<? extends Annotation>> getEnabledDeploymentTypes()

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/event/DeferredEventNotificationTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/event/DeferredEventNotificationTest.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/event/DeferredEventNotificationTest.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -67,7 +67,7 @@
       //AnnotatedClass<Tuna> annotatedItem = new SimpleAnnotatedClass<Tuna>(Tuna.class, annotations);
       // TODO This should test a real class
       tuna = createSimpleBean(Tuna.class);
-      om = new AnnotatedMethodImpl<Object>(AnObserver.class.getMethod("observe", new Class[] { Event.class }), AnnotatedClassImpl.of(AnObserver.class));
+      om = AnnotatedMethodImpl.of(AnObserver.class.getMethod("observe", new Class[] { Event.class }), AnnotatedClassImpl.of(AnObserver.class));
 
       AnObserver observerInstance = new AnObserver();
       // TODO Fix this Observer<Event> observer = new MockObserverImpl<Event>(tuna, om, Event.class);

Modified: tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Containers.java
===================================================================
--- tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Containers.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Containers.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -1,5 +1,8 @@
 package org.jboss.webbeans.tck.api;
 
+import java.lang.annotation.Annotation;
+import java.util.List;
+
 import javax.webbeans.manager.Manager;
 
 /**
@@ -34,6 +37,8 @@
     * @param classes the classes to deploy
     * @return the manager created as a result of initializing the container
     */
+   public Manager deploy(List<Class<? extends Annotation>> enabledDeploymentTypes, Class<?>...classes);
+   
    public Manager deploy(Class<?>...classes);
    
 }

Modified: tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Managers.java
===================================================================
--- tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Managers.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/api/src/main/java/org/jboss/webbeans/tck/api/Managers.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -19,22 +19,23 @@
    public static final String PROPERTY_NAME = Managers.class.getName();
    
    /**
+    * Get a new Manager instance
     * 
-    * @param enabledDeploymentTypes
+    * @return the Manager 
     */
-   void setEnabledDeploymentTypes(List<Class<? extends Annotation>> enabledDeploymentTypes);
+   Manager createManager(List<Class<? extends Annotation>> enabledDeploymentTypes);
    
    /**
-    * Returns a list of the enabled deployment types for the current manager
+    * Get a new Manager instance
     * 
-    * @return
+    * @return the Manager 
     */
-   List<Class<? extends Annotation>> getEnabledDeploymentTypes();
+   Manager createManager();
    
    /**
-    * Get a new Manager instance
+    * Returns a list of the enabled deployment types for the current manager
     * 
-    * @return the Manager 
+    * @return
     */
-   Manager createManager();
+   List<Class<? extends Annotation>> getEnabledDeploymentTypes();
 }

Modified: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -68,8 +68,14 @@
    @BeforeMethod
    public final void before()
    {
-      manager = configuration().getManagers().createManager();
-      configuration().getManagers().setEnabledDeploymentTypes(getEnabledDeploymentTypes());
+      if (getEnabledDeploymentTypes().size() > 0)
+      {
+         manager = configuration().getManagers().createManager(getEnabledDeploymentTypes());
+      }
+      else
+      {
+         manager = configuration().getManagers().createManager();
+      }
    }
    
    @AfterMethod
@@ -100,17 +106,24 @@
 
    protected void deployBeans(Class<?>... classes)
    {
-      manager = configuration().getContainers().deploy(classes);
+      if (getEnabledDeploymentTypes().size() > 0)
+      {
+         manager = configuration().getContainers().deploy(getEnabledDeploymentTypes(), classes);
+      }
+      else
+      {
+         manager = configuration().getContainers().deploy(classes);
+      }
    }
    
-   protected List<Class<? extends Annotation>> getStandardDeploymentTypes()
+   protected final List<Class<? extends Annotation>> getStandardDeploymentTypes()
    {
       return new ArrayList<Class<? extends Annotation>>(STANDARD_DEPLOYMENT_TYPES); 
    }
    
    protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
    {
-      return getStandardDeploymentTypes();
+      return Collections.emptyList();
    }
 
    protected byte[] serialize(Object instance) throws IOException

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,25 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.util.Arrays;
+
+import javax.webbeans.DeploymentException;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class BrokenDeploymentTypeTest extends AbstractTest
+{
+   
+   @SuppressWarnings("unchecked")
+   @Test(expectedExceptions=DeploymentException.class) @SpecAssertion(section="2.5.6")
+   public void testStandardMustBeDeclared()
+   {
+      
+      manager = configuration().getContainers().deploy(Arrays.asList(AnotherDeploymentType.class, HornedAnimalDeploymentType.class), Dog.class);
+   }
+   
+   
+}


Property changes on: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BrokenDeploymentTypeTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,35 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.webbeans.Standard;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class CustomDeploymentTypeTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      return Arrays.asList(Standard.class, AnotherDeploymentType.class, 
+            HornedAnimalDeploymentType.class);
+   }
+   
+   @SuppressWarnings("unchecked")
+   @Test @SpecAssertion(section={"2.5.6", "2.5.7"})
+   public void testCustomDeploymentTypes()
+   {
+      assert configuration().getManagers().getEnabledDeploymentTypes().size() == 3;
+      assert configuration().getManagers().getEnabledDeploymentTypes().get(0).equals(Standard.class);
+      assert configuration().getManagers().getEnabledDeploymentTypes().get(1).equals(AnotherDeploymentType.class);
+      assert configuration().getManagers().getEnabledDeploymentTypes().get(2).equals(HornedAnimalDeploymentType.class);
+   }
+   
+}


Property changes on: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/CustomDeploymentTypeTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -1,16 +1,12 @@
 package org.jboss.webbeans.tck.unit.definition.deployment;
 
-import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
-
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.webbeans.DefinitionException;
 import javax.webbeans.DeploymentException;
 import javax.webbeans.Production;
-import javax.webbeans.Standard;
 import javax.webbeans.UnsatisfiedDependencyException;
 import javax.webbeans.manager.Bean;
 
@@ -116,37 +112,15 @@
    @SuppressWarnings("unchecked")
    @Test(groups="beanLifecycle", expectedExceptions=UnsatisfiedDependencyException.class) @SpecAssertion(section="2.5.6")
    public void testBeanWithDisabledDeploymentTypeNotInstantiated()
-   {
-      configuration().getManagers().setEnabledDeploymentTypes(
-            Arrays.asList(Standard.class, AnotherDeploymentType.class, 
-                  HornedAnimalDeploymentType.class));
-      
+   {    
       Bean<RedSnapper> bean = createSimpleBean(RedSnapper.class);
       manager.addBean(bean);
       manager.getInstanceByType(RedSnapper.class);
    }
 
-   @SuppressWarnings("unchecked")
-   @Test @SpecAssertion(section={"2.5.6", "2.5.7"})
-   public void testCustomDeploymentTypes()
-   {
-      configuration().getManagers().setEnabledDeploymentTypes(
-            Arrays.asList(Standard.class, AnotherDeploymentType.class, 
-                  HornedAnimalDeploymentType.class));
-      assert configuration().getManagers().getEnabledDeploymentTypes().size() == 3;
-      assert configuration().getManagers().getEnabledDeploymentTypes().get(0).equals(Standard.class);
-      assert configuration().getManagers().getEnabledDeploymentTypes().get(1).equals(AnotherDeploymentType.class);
-      assert configuration().getManagers().getEnabledDeploymentTypes().get(2).equals(HornedAnimalDeploymentType.class);
-   }
+
    
-   @SuppressWarnings("unchecked")
-   @Test(expectedExceptions=DeploymentException.class) @SpecAssertion(section="2.5.6")
-   public void testStandardMustBeDeclared()
-   {
-      configuration().getManagers().setEnabledDeploymentTypes(
-            Arrays.asList(AnotherDeploymentType.class, HornedAnimalDeploymentType.class));
-   }
-   
+
    @Test(groups={"stub", "webbeansxml"}, expectedExceptions=DeploymentException.class) @SpecAssertion(section="2.5.6")
    public void testMultipleDeployElementsCannotBeDefined()
    {

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface DisabledDeploymentType
+{
+
+}


Property changes on: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DisabledDeploymentType.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java	2009-01-20 20:33:41 UTC (rev 1130)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -4,6 +4,7 @@
 
 @FishStereotype
 @RequestScoped
+ at DisabledDeploymentType
 class RedSnapper implements Animal
 {
    

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 20:33:41 UTC (rev 1130)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java	2009-01-20 21:13:55 UTC (rev 1131)
@@ -2,6 +2,10 @@
 
 import static org.jboss.webbeans.tck.impl.util.Reflections.annotationSetMatches;
 
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.webbeans.AnnotationLiteral;
 import javax.webbeans.RequestScoped;
 
@@ -12,12 +16,22 @@
 public class RealizationTest extends AbstractTest
 {
    
-   @Test(groups="broken") @SpecAssertion(section="4.1")
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = new ArrayList<Class<? extends Annotation>>();
+      deploymentTypes.addAll(getStandardDeploymentTypes());
+      deploymentTypes.add(AnotherDeploymentType.class);
+      deploymentTypes.add(FarmAnimalDeploymentType.class);
+      return deploymentTypes;
+   }
+   
+   @Test @SpecAssertion(section="4.1")
    public void testRealizedBeanWithProducerMethodHasSameScope()
    {
       deployBeans(Cow.class);
-      assert manager.resolveByType(Dung.class).size() == 1;
-      assert manager.resolveByType(Dung.class).iterator().next().getScopeType().equals(RequestScoped.class);
+      assert manager.resolveByType(Dung.class, new AnnotationLiteral<Smelly>(){}).size() == 1;
+      assert manager.resolveByType(Dung.class, new AnnotationLiteral<Smelly>(){}).iterator().next().getScopeType().equals(RequestScoped.class);
    }
    
    @Test(groups="broken") @SpecAssertion(section="4.1")
@@ -46,7 +60,7 @@
       assert annotationSetMatches(manager.resolveByType(Dung.class).iterator().next().getBindings(), Smelly.class, Tame.class);
    }
    
-   @Test(groups="broken") @SpecAssertion(section="4.1")
+   @Test @SpecAssertion(section="4.1")
    public void testRealizedBeanWithProducerMethodHasSameStereotypes()
    {
       deployBeans(LabradorKennel.class);




More information about the weld-commits mailing list