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

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Sun Oct 19 18:31:45 EDT 2008


Author: pete.muir at jboss.org
Date: 2008-10-19 18:31:44 -0400 (Sun, 19 Oct 2008)
New Revision: 119

Added:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.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/SimpleAnnotatedConstructor.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java
Removed:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java
Modified:
   ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Manager.java
   ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Observer.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/BeanImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableMethod.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleConstructor.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Unit.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.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/AnnotatedMethod.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/SimpleAnnotatedItem.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedMethod.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedType.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EnterpriseComponentModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypesModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerExpressionComponent.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerMethodComponentModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/SimpleComponentModel.java
Log:
Implement most of the resolution algorithms, tests tomorrow

Modified: ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Manager.java
===================================================================
--- ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Manager.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Manager.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -35,9 +35,9 @@
    public <T> T getInstanceByType(TypeLiteral<T> type,
          Annotation... bindingTypes);
 
-   public <T> T resolveByType(Class<T> apiType, Annotation... bindingTypes);
+   public <T> Set<Bean<T>> resolveByType(Class<T> apiType, Annotation... bindingTypes);
 
-   public <T> T resolveByType(TypeLiteral<T> apiType,
+   public <T> Set<Bean<T>> resolveByType(TypeLiteral<T> apiType,
          Annotation... bindingTypes);
 
    public Object getInstanceByName(String name);

Modified: ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Observer.java
===================================================================
--- ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Observer.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-api/src/main/java/javax/webbeans/manager/Observer.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -17,10 +17,7 @@
 
 package javax.webbeans.manager;
 
-import java.lang.annotation.Annotation;
-import java.util.Set;
 
-
 /**
  * 
  * @author Pete Muir
@@ -30,7 +27,6 @@
 {
 
    public Class<T> getEventType();
-   public Set<Annotation> getEventBindingTypes();
    
    public void notify(Manager container, T event);
    

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/BeanImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/BeanImpl.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/BeanImpl.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -19,7 +19,7 @@
    
    private AbstractComponentModel<T, ?> componentMetaModel;
 
-   public BeanImpl(AbstractComponentModel<T, ?> componentMetaModel, Manager manager)
+   public BeanImpl(AbstractComponentModel<T, ?> componentMetaModel, ManagerImpl manager)
    {
       super(manager);
       this.componentMetaModel = componentMetaModel;

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	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -20,6 +20,8 @@
 import org.jboss.webbeans.bindings.StandardAnnotationLiteral;
 import org.jboss.webbeans.ejb.EjbManager;
 import org.jboss.webbeans.event.EventBus;
+import org.jboss.webbeans.injectable.Injectable;
+import org.jboss.webbeans.injectable.SimpleInjectable;
 
 public class ManagerImpl implements Manager
 {
@@ -28,20 +30,24 @@
    private ModelManager modelManager;
    private EjbManager ejbLookupManager;
    private EventBus eventBus;
+   private ResolutionManager resolutionManager;
+   
+   private boolean containerInitialized = false;
 
    
    private ThreadLocal<Map<Class<Annotation>, Context>> contexts = 
       new ThreadLocal<Map<Class<Annotation>, Context>>();
 
-   private Set<Bean<?>> components;
+   private Set<Bean<?>> beans;
    
    public ManagerImpl(List<Annotation> enabledDeploymentTypes)
    {
       initEnabledDeploymentTypes(enabledDeploymentTypes);
       this.modelManager = new ModelManager();
       this.ejbLookupManager = new EjbManager();
-      this.components = new HashSet<Bean<?>>();
+      this.beans = new HashSet<Bean<?>>();
       this.eventBus = new EventBus();
+      resolutionManager = new ResolutionManager(this);
    }
    
    private void initEnabledDeploymentTypes(List<Annotation> enabledDeploymentTypes)
@@ -62,9 +68,13 @@
       }
    }
 
-   public Manager addBean(Bean<?> component)
+   public Manager addBean(Bean<?> bean)
    {
-      components.add(component);
+      beans.add(bean);
+      if (containerInitialized)
+      {
+         // TODO Somehow deal with dynamically reigstered components
+      }
       return this;
    }
 
@@ -130,18 +140,7 @@
       return null;
    }
 
-   public <T> T resolveByType(Class<T> apiType, Annotation... bindingTypes)
-   {
-      // TODO Auto-generated method stub
-      return null;
-   }
-
-   public <T> T resolveByType(TypeLiteral<T> apiType,
-         Annotation... bindingTypes)
-   {
-      // TODO Auto-generated method stub
-      return null;
-   }
+  
    
    public <T> Set<Method> resolveDisposalMethods(Class<T> apiType, Annotation... bindingTypes)
    {
@@ -173,5 +172,27 @@
       // TODO Auto-generated method stub
       return null;
    }
+
+   public <T> Set<Bean<T>> resolveByType(Class<T> apiType,
+         Annotation... bindingTypes)
+   {
+      return getResolutionManager().get(new SimpleInjectable<T>(apiType, bindingTypes));
+   }
+
+   public <T> Set<Bean<T>> resolveByType(TypeLiteral<T> apiType,
+         Annotation... bindingTypes)
+   {
+      return resolveByType(apiType.getRawType(), bindingTypes);
+   }
    
+   public ResolutionManager getResolutionManager()
+   {
+      return resolutionManager;
+   }
+   
+   public Set<Bean<?>> getBeans()
+   {
+      return beans;
+   }
+   
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -30,9 +30,9 @@
       componentModels.put(componentModel.getType(), componentModel);
    }
    
-   public <T> AbstractComponentModel<T, ?> getComponentModel(Class<T> clazz)
+   public AbstractComponentModel<?, ?> getComponentModel(Class<?> clazz)
    {
-      return (AbstractComponentModel<T, ?>) componentModels.get(clazz);
+      return componentModels.get(clazz);
    }
 
 }

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,42 @@
+package org.jboss.webbeans;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.injectable.Injectable;
+
+public class ResolutionManager
+{
+   
+   private Map<Injectable<?, ?>, Set<?>> resolvedInjectionPoints;
+   private ManagerImpl manager;
+   
+   public ResolutionManager(ManagerImpl manager)
+   {
+      resolvedInjectionPoints = new HashMap<Injectable<?, ?>, Set<?>>();
+      this.manager = manager;
+   }
+   
+   public void registerInjectionPoint(Injectable<?, ?> injectable)
+   {
+      resolvedInjectionPoints.put(injectable, injectable.getPossibleTargets(manager.getBeans()));
+   }
+   
+   public void registerInjectionPoints(Set<Injectable<?, ?>> injectables)
+   {
+      for (Injectable<?, ?> injectable : injectables)
+      {
+         registerInjectionPoint(injectable);
+      }
+   }
+   
+   @SuppressWarnings("unchecked")
+   public <T> Set<Bean<T>> get(Injectable<T, ?> key)
+   {
+      return (Set<Bean<T>>) resolvedInjectionPoints.get(key);
+   }
+
+}


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

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -49,7 +49,7 @@
     */
    public void addObserver(Observer<?> o)
    {
-      int key = generateKey(o.getEventType(), o.getEventBindingTypes());
+      int key = 1 /*TODO generateKey(o.getEventType(), o.get)*/;
       Set<Observer<?>> l = registeredObservers.get(key);
       if (l == null)
          l = new HashSet<Observer<?>>();
@@ -101,10 +101,11 @@
     */
    public void removeObserver(Observer<?> o)
    {
-      Set<Observer<?>> l = registeredObservers.get(generateKey(o.getEventType(), o.getEventBindingTypes()));
-      if (l != null) {
-         l.remove(o);
-      }
+      // TODO fix
+    //  Set<Observer<?>> l = registeredObservers.get(generateKey(o.getEventType(), o.getEventBindingTypes()));
+      //if (l != null) {
+        // l.remove(o);
+      //}
    }
    
    /**

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	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -1,17 +1,13 @@
 package org.jboss.webbeans.event;
 
 import java.lang.annotation.Annotation;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 
 import javax.webbeans.manager.Manager;
 import javax.webbeans.manager.Observer;
-import javax.webbeans.Observes;
 
-import org.jboss.webbeans.injectable.Parameter;
+import org.jboss.webbeans.injectable.InjectableMethod;
+import org.jboss.webbeans.injectable.InjectableParameter;
+import org.jboss.webbeans.injectable.InjectableParameterWrapper;
 import org.jboss.webbeans.model.AbstractComponentModel;
 
 /**
@@ -35,8 +31,7 @@
 {
 
    private final AbstractComponentModel<?, ?> componentModel;
-   private final ObserverMethod observerMethod;
-   private final Set<Annotation> eventBindings;
+   private final InjectableMethod<?> observerMethod;
    private final Class<T> eventType;
 
    /**
@@ -48,46 +43,16 @@
     * @param eventType The type of event being observed
     */
    @SuppressWarnings("unchecked")
-   public ObserverImpl(AbstractComponentModel<?, ?> componentModel, ObserverMethod observer, Class<T> eventType)
+   public ObserverImpl(AbstractComponentModel<?, ?> componentModel, InjectableMethod<?> observer, Class<T> eventType)
    {
       this.componentModel = componentModel;
       this.observerMethod = observer;
       this.eventType = eventType;
-      List<Parameter> parms = observer.getParameters();
-      eventBindings = new HashSet<Annotation>();
-      for (Parameter p : parms)
-      {
-         if (p.getType().equals(eventType))
-         {
-            if ((p.getBindingTypes() != null) && (p.getBindingTypes().length > 0))
-            {
-               eventBindings.addAll(Arrays.asList(p.getBindingTypes()));
-               // Remove the @Observes annotation since it is not an event
-               // binding type
-               for (Annotation annotation : eventBindings)
-               {
-                  if (Observes.class.isAssignableFrom(annotation.getClass()))
-                     eventBindings.remove(annotation);
-               }
-               break;
-            }
-         }
-      }
    }
 
    /*
     * (non-Javadoc)
     * 
-    * @see javax.webbeans.Observer#getEventBindingTypes()
-    */
-   public Set<Annotation> getEventBindingTypes()
-   {
-      return Collections.unmodifiableSet(this.eventBindings);
-   }
-
-   /*
-    * (non-Javadoc)
-    * 
     * @see javax.webbeans.Observer#getEventType()
     */
    public Class<T> getEventType()
@@ -101,12 +66,34 @@
     * @see javax.webbeans.Observer#notify(javax.webbeans.Container,
     * java.lang.Object)
     */
-   public void notify(Manager manager, T event)
+   @SuppressWarnings("unchecked")
+   public void notify(Manager manager, final T event)
    {
       // Get the most specialized instance of the component
       Object instance = getInstance(manager);
       if (instance != null)
-         this.observerMethod.invoke(manager, instance, event);
+      {
+         // Let the super class get the parameter values, but substitute the event
+         // object so that we know for certain it is the correct one.
+         for (int i = 0; i < observerMethod.getParameters().size(); i++)
+         {
+            InjectableParameter<?> parameter = observerMethod.getParameters().get(i);
+            if (parameter.getType().isAssignableFrom(event.getClass()))
+            {
+               InjectableParameter<?> newParameter = new InjectableParameterWrapper(parameter)
+               {
+                  @Override
+                  public Object getValue(Manager manager)
+                  {
+                     return event;
+                  }
+               };
+               observerMethod.getParameters().set(i, newParameter);
+            }
+         }
+         this.observerMethod.invoke(manager, instance);
+      }
+         
    }
 
    /**

Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -1,74 +0,0 @@
-package org.jboss.webbeans.event;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import javax.webbeans.manager.Manager;
-
-import org.jboss.webbeans.injectable.InjectableMethod;
-import org.jboss.webbeans.injectable.Parameter;
-
-/**
- * A specialized injectable method where one of the injected parameters is an
- * event object.
- * 
- * @author David Allen
- *
- */
-public class ObserverMethod extends InjectableMethod
-{
-
-   public ObserverMethod(Method method)
-   {
-      super(method);
-   }
-
-   /**
-    * Invokes the method on the given component instance and uses the specified
-    * event object for parameter injection.
-    * 
-    * @param manager The WebBeans manager
-    * @param instance The component instance to invoke the observer method on
-    * @param event The event object being fired
-    */
-   public void invoke(Manager manager, Object instance, Object event)
-   {
-      try
-      {
-         getMethod().invoke(instance, getParameterValues(manager, event));
-      }
-      catch (Exception e) 
-      {
-         throw new RuntimeException("Unable to invoke " + getMethod() + " on " + instance, e);
-      }
-   }
-
-   /**
-    * Creates a list of parameter values to inject and uses the specified event object
-    * to inject the observed event.
-    * 
-    * @param manager The WebBeans manager
-    * @param event The event being fired
-    * @return an array of objects that serve as arguments for the invocation of the method
-    */
-   @SuppressWarnings("unchecked")
-   public Object[] getParameterValues(Manager manager, Object event)
-   {
-      // Let the super class get the parameter values, but substitute the event
-      // object so that we know for certain it is the correct one.
-      Object[] parameterValues = super.getParameterValues(manager);
-      List<Parameter> parms = this.getParameters();
-      int i = 0;
-      for (Parameter p : parms)
-      {
-         if (p.getType().isAssignableFrom(event.getClass()))
-         {
-            parameterValues[i] = event;
-            break;
-         }
-         i++;
-      }
-      return parameterValues;
-   }
-
-}

Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -1,40 +0,0 @@
-package org.jboss.webbeans.injectable;
-
-import java.lang.annotation.Annotation;
-
-import javax.webbeans.manager.Manager;
-
-public abstract class Element<T>
-{
-   
-   private Annotation[] bindingTypes;
-   
-   public Element(Annotation[] bindingTypes)
-   {
-      this.bindingTypes = bindingTypes;
-   }
-   
-   public Element()
-   {
-      this.bindingTypes = new Annotation[0];
-   }
-
-   public Annotation[] getBindingTypes()
-   {
-      return bindingTypes;
-   }
-   
-   @Override
-   public String toString()
-   {
-      return getType() + " with binding types " + getBindingTypes();
-   }
-
-   public T getValue(Manager container)
-   {
-      return container.getInstanceByType(getType(), getBindingTypes());
-   }
-   
-   public abstract Class<? extends T> getType();
-   
-}

Copied: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java (from rev 117, ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Element.java)
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,95 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Manager;
+
+import org.jboss.webbeans.introspector.AnnotatedItem;
+
+/**
+ * Abstraction of java reflection for Web Beans, represent's something that can
+ * be injected
+ * 
+ * @author Pete Muir
+ *
+ */
+public abstract class Injectable<T, S>
+{
+   
+   private AnnotatedItem<T, S> annotatedItem;
+   
+   public Injectable(AnnotatedItem<T, S> annotatedItem)
+   {
+      this.annotatedItem = annotatedItem;
+   }
+
+   public Annotation[] getBindingTypes()
+   {
+      return (Annotation[]) annotatedItem.getAnnotations().toArray();
+   }
+   
+   protected Injectable() {}
+   
+   @Override
+   public String toString()
+   {
+      return getType() + " with binding types " + getBindingTypes();
+   }
+
+   public T getValue(Manager manager)
+   {
+      return manager.getInstanceByType(getType(), getBindingTypes());
+   }
+   
+   public Class<? extends T> getType()
+   {
+      return annotatedItem.getType();
+   }
+   
+   public AnnotatedItem<T, S> getAnnotatedItem()
+   {
+      return annotatedItem;
+   }
+   
+   public Set<Bean<?>> getPossibleTargets(Set<Bean<?>> possibleBeans)
+   {
+      Set<Bean<?>> resolvedBeans = new HashSet<Bean<?>>();
+      for (Bean<?> bean : possibleBeans)
+      {
+         if (bean.getTypes().contains(getType()))
+         {
+            List<Annotation> beanBindingTypes = new ArrayList<Annotation>(bean.getBindingTypes());
+            for (Annotation annotation : annotatedItem.getAnnotations())
+            {
+               if (beanBindingTypes.contains(annotation))
+               {
+                  // TODO inspect annotation parameters
+                  // TODO inspect deployment types
+                  resolvedBeans.add(bean);
+               }
+            }
+         }
+      }
+     return resolvedBeans;
+   }
+   
+   @Override
+   public boolean equals(Object other)
+   {
+      if (other instanceof Injectable)
+      {
+         Injectable<?, ?> that = (Injectable<?, ?>) other;
+         return this.getAnnotatedItem().equals(that.getAnnotatedItem());
+      }
+      else
+      {
+         return false;
+      }
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableField.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.reflect.Field;
+
+import org.jboss.webbeans.introspector.SimpleAnnotatedField;
+
+/**
+ * Abstraction of Java Reflection
+ * 
+ * @author Pete Muir
+ *
+ */
+public class InjectableField<T> extends Injectable<T, Field>
+{
+   
+   @SuppressWarnings("unchecked")
+   public InjectableField(Field field)
+   {
+      super(new SimpleAnnotatedField(field));
+   }
+
+}


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

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableMethod.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableMethod.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -1,25 +1,36 @@
 package org.jboss.webbeans.injectable;
 
+import java.lang.reflect.Method;
+
 import javax.webbeans.manager.Manager;
 
-// TODO Name this class better
-public class InjectableMethod<T> extends Unit<T>
+import org.jboss.webbeans.introspector.AnnotatedItem;
+import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.SimpleAnnotatedMethod;
+
+public class InjectableMethod<T> extends Unit<T, Method>
 {
 
-   private java.lang.reflect.Method method;
+   private AnnotatedMethod<T> method;
    
    public InjectableMethod(java.lang.reflect.Method method)
    {
       super(method.getParameterTypes(), method.getParameterAnnotations());
-      this.method = method;
+      this.method = new SimpleAnnotatedMethod<T>(method);
    }
 
    @SuppressWarnings("unchecked")
    public T invoke(Manager container, Object instance)
    {
+      return invoke(container, instance, getParameterValues(container));
+   }
+   
+   @SuppressWarnings("unchecked")
+   public T invoke(Manager container, Object instance, Object[] parameters)
+   {
       try
       {
-         return (T) method.invoke(instance, getParameterValues(container));
+         return (T) method.getAnnotatedMethod().invoke(instance, parameters);
       }
       catch (Exception e) 
       {
@@ -27,10 +38,10 @@
       }
    }
    
-   public java.lang.reflect.Method getMethod()
+   @Override
+   public AnnotatedItem<T, Method> getAnnotatedItem()
    {
       return method;
    }
    
-   
 }

Copied: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java (from rev 117, ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java)
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameter.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,25 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
+import org.jboss.webbeans.introspector.SimpleAnnotatedItem;
+
+public class InjectableParameter<T> extends Injectable<T, Object>
+{
+   
+   private static Annotation[] currentBinding = {new CurrentAnnotationLiteral()};
+   
+   protected InjectableParameter() {}
+   
+   public InjectableParameter(Annotation[] bindingTypes, Class<? extends T> type)
+   {
+      super(new SimpleAnnotatedItem<T, Object>(bindingTypes, type));
+   }
+
+   public InjectableParameter(Class<? extends T> type)
+   {
+      this(currentBinding, type);
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,43 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Manager;
+
+public class InjectableParameterWrapper<T> extends InjectableParameter<T>
+{
+   
+   private InjectableParameter<T> delegate;
+
+   public InjectableParameterWrapper(InjectableParameter<T> delegate)
+   {
+      this.delegate = delegate;
+   }
+   
+   @Override
+   public Annotation[] getBindingTypes()
+   {
+      return delegate.getBindingTypes();
+   }
+
+   @Override
+   public Set<Bean<?>> getPossibleTargets(Set<Bean<?>> possibleBeans)
+   {
+      return delegate.getPossibleTargets(possibleBeans);
+   }
+
+   @Override
+   public Class<? extends T> getType()
+   {
+      return delegate.getType();
+   }
+
+   @Override
+   public T getValue(Manager manager)
+   {
+      return delegate.getValue(manager);
+   }
+
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,43 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Manager;
+
+public class InjectableWrapper<T, S> extends Injectable<T, S>
+{
+
+   private Injectable<T, S> delegate;
+
+   public InjectableWrapper(Injectable<T, S> delegate)
+   {
+      this.delegate = delegate;
+   }
+
+   @Override
+   public Annotation[] getBindingTypes()
+   {
+      return delegate.getBindingTypes();
+   }
+
+   @Override
+   public Set<Bean<?>> getPossibleTargets(Set<Bean<?>> possibleBeans)
+   {
+      return delegate.getPossibleTargets(possibleBeans);
+   }
+
+   @Override
+   public Class<? extends T> getType()
+   {
+      return delegate.getType();
+   }
+
+   @Override
+   public T getValue(Manager manager)
+   {
+      return delegate.getValue(manager);
+   }
+
+}
\ No newline at end of file


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

Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Parameter.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -1,33 +0,0 @@
-package org.jboss.webbeans.injectable;
-
-import java.lang.annotation.Annotation;
-
-import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
-
-public class Parameter<T> extends Element<T>
-{
-   
-   private static Annotation[] currentBinding = {new CurrentAnnotationLiteral()};
-   
-   private Class<? extends T> type;
-   
-   public Parameter(Annotation[] bindingTypes, Class<? extends T> type)
-   {
-      super(bindingTypes);
-      this.type = type;
-   }
-
-   public Parameter(Class<? extends T> type)
-   {
-      super(currentBinding);
-      this.type = type;
-   }
-
-   public Class<? extends T> getType()
-   {
-      return type;
-   }
-   
-   
-   
-}

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleConstructor.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleConstructor.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -5,41 +5,45 @@
 
 import javax.webbeans.manager.Manager;
 
+import org.jboss.webbeans.introspector.AnnotatedConstructor;
+import org.jboss.webbeans.introspector.AnnotatedItem;
+import org.jboss.webbeans.introspector.SimpleAnnotatedConstructor;
 import org.jboss.webbeans.util.LoggerUtil;
 
-public class SimpleConstructor<T> extends Unit<T> implements ComponentConstructor<T>
+public class SimpleConstructor<T> extends Unit<T, Constructor<T>> implements ComponentConstructor<T>
 {
    
    public static final String LOGGER_NAME = "componentConstructor";
    
    private static Logger log = LoggerUtil.getLogger(LOGGER_NAME);
 
-   private Constructor<T> constructor;
+   private AnnotatedConstructor<T> constructor;
    
    @SuppressWarnings("unchecked")
    public SimpleConstructor(Constructor<T> constructor)
    {
       super(constructor.getParameterTypes(), constructor.getParameterAnnotations());
-      this.constructor = constructor;
+      this.constructor = new SimpleAnnotatedConstructor<T>(constructor);
       log.finest("Initialized metadata for " + constructor + " with injectable parameters " + getParameters());
    }
-   
-   public Constructor<T> getConstructor()
-   {
-      return constructor;
-   }
 
    public T invoke(Manager container)
    {
       try
       {
-         log.finest("Creating new instance of " + constructor.getDeclaringClass() + " with injected parameters " + getParameters());
-         return constructor.newInstance(getParameterValues(container));
+         log.finest("Creating new instance of " + constructor.getType() + " with injected parameters " + getParameters());
+         return constructor.getAnnotatedConstructor().newInstance(getParameterValues(container));
       }
       catch (Exception e) 
       {
-         throw new RuntimeException("Error instantiating " + constructor.getDeclaringClass(), e);
+         throw new RuntimeException("Error instantiating " + constructor.getType(), e);
       }
    }
    
+   @Override
+   public AnnotatedItem<T, Constructor<T>> getAnnotatedItem()
+   {
+      return constructor;
+   }
+   
 }

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.injectable;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.webbeans.introspector.SimpleAnnotatedItem;
+
+public class SimpleInjectable<T> extends Injectable<T, Object>
+{
+   
+   public SimpleInjectable(Class<? extends T> type, Annotation[] bindingTypes)
+   {
+      super(new SimpleAnnotatedItem<T, Object>(bindingTypes, type));
+   }
+
+}


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

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Unit.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Unit.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Unit.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -6,35 +6,37 @@
 
 import javax.webbeans.manager.Manager;
 
-public abstract class Unit<T>
+import org.jboss.webbeans.introspector.AnnotatedItem;
+
+public abstract class Unit<T, S>
 {
 
-   private List<Element<Object>> parameters;
+   private List<InjectableParameter<?>> parameters;
    
    public Unit(Class<?>[] parameterTypes, Annotation[][] parameterAnnotations)
    {
       parameters = initParameters(parameterTypes, parameterAnnotations);
    }
    
-   public List<Element<Object>> getParameters()
+   public List<InjectableParameter<?>> getParameters()
    {
       return parameters;
    }
 
    @SuppressWarnings("unchecked")
-   protected static List<Element<Object>> initParameters(Class<?>[] parameterTypes, Annotation[][] parameterAnnotations)
+   protected static <T> List<InjectableParameter<?>> initParameters(Class<?>[] parameterTypes, Annotation[][] parameterAnnotations)
    {
-      List<Element<Object>> injectedParameters = new ArrayList<Element<Object>>();
+      List<InjectableParameter<?>> injectedParameters = new ArrayList<InjectableParameter<?>>();
       for (int i = 0; i < parameterTypes.length; i++)
       {
          if (parameterAnnotations[i].length > 0)
          {
-            Parameter<Object> parameter = new Parameter(parameterAnnotations[i], parameterTypes[i]);
+            InjectableParameter<Object> parameter = new InjectableParameter(parameterAnnotations[i], parameterTypes[i]);
             injectedParameters.add(i, parameter);
          }
          else
          {
-            Parameter<Object> parameter = new Parameter(parameterTypes[i]);
+            InjectableParameter<Object> parameter = new InjectableParameter(parameterTypes[i]);
             injectedParameters.add(i, parameter);
          }
       }
@@ -51,4 +53,6 @@
       return parameterValues;
    }
 
+   public abstract AnnotatedItem<T, S> getAnnotatedItem();
+   
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -8,7 +8,9 @@
 import java.util.Set;
 import java.util.Map.Entry;
 
-public abstract class AbstractAnnotatedItem<E> implements AnnotatedItem<E>
+import org.jboss.webbeans.injectable.Injectable;
+
+public abstract class AbstractAnnotatedItem<T, S> implements AnnotatedItem<T, S>
 {
 
    private Map<Class<? extends Annotation>, Annotation> annotationMap;
@@ -26,8 +28,13 @@
    
    protected static Map<Class<? extends Annotation>, Annotation> buildAnnotationMap(AnnotatedElement element)
    {
+      return buildAnnotationMap(element.getAnnotations());
+   }
+   
+   protected static Map<Class<? extends Annotation>, Annotation> buildAnnotationMap(Annotation[] annotations)
+   {
       Map<Class<? extends Annotation>, Annotation> annotationMap = new HashMap<Class<? extends Annotation>, Annotation>();
-      for (Annotation annotation : element.getAnnotations())
+      for (Annotation annotation : annotations)
       {
          annotationMap.put(annotation.annotationType(), annotation);
       }
@@ -44,9 +51,9 @@
    }
 
    @SuppressWarnings("unchecked")
-   public <T extends Annotation> T getAnnotation(Class<? extends T> annotationType)
+   public <A extends Annotation> A getAnnotation(Class<? extends A> annotationType)
    {
-      return (T) annotationMap.get(annotationType);
+      return (A) annotationMap.get(annotationType);
    }
 
    public Set<Annotation> getAnnotations(Class<? extends Annotation> metaAnnotationType)
@@ -73,8 +80,10 @@
       return annotationMap.containsKey(annotatedType);
    }
 
-   protected static <T extends Annotation> Map<Class<? extends Annotation>, Set<Annotation>> populateMetaAnnotationMap(
-         Class<T> metaAnnotationType, Map<Class<? extends Annotation>, Set<Annotation>> metaAnnotations, Map<Class<? extends Annotation>, Annotation> annotationMap)
+   protected static <A extends Annotation> Map<Class<? extends Annotation>, Set<Annotation>> populateMetaAnnotationMap(
+         Class<A> metaAnnotationType, Map<Class<? extends Annotation>, 
+         Set<Annotation>> metaAnnotations, 
+         Map<Class<? extends Annotation>, Annotation> annotationMap)
    {
       if (!metaAnnotations.containsKey(metaAnnotationType))
       {
@@ -95,5 +104,16 @@
    {
       return annotationMap;
    }
+   
+   @Override
+   public boolean equals(Object other)
+   {
+      if (other instanceof AnnotatedItem)
+      {
+         AnnotatedItem<?, ?> that = (AnnotatedItem<?, ?>) other;
+         return this.getAnnotations().equals(that.getAnnotations()) && this.getDelegate().equals(that.getDelegate());
+      }
+      return false;
+   }
 
 }
\ No newline at end of file

Added: 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	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedConstructor.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.reflect.Constructor;
+
+/**
+ * AnnotatedType provides a uniform access to the annotations on an annotated
+ * class defined either in Java or XML 
+ * 
+ * @author Pete Muir
+ *
+ */
+public interface AnnotatedConstructor<T> extends AnnotatedItem<T, Constructor<T>>
+{
+   
+   public Constructor<T> getAnnotatedConstructor();
+
+}


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

Added: 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	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedField.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.reflect.Field;
+
+/**
+ * AnnotatedField provides a uniform access to the annotations on an annotated
+ * field 
+ * 
+ * @author Pete Muir
+ *
+ */
+public interface AnnotatedField<T> extends AnnotatedItem<T, Field>
+{
+   
+   public Field getAnnotatedField();
+
+}


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

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	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -11,7 +11,7 @@
  * @author Pete Muir
  *
  */
-public interface AnnotatedItem<E>
+public interface AnnotatedItem<T, S>
 {
 
    /**
@@ -45,6 +45,8 @@
    public boolean isAnnotationPresent(
          Class<? extends Annotation> annotationType);
    
-   public E getDelegate();
+   public S getDelegate();
+   
+   public Class<? extends T> getType();
 
 }
\ No newline at end of file

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	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedMethod.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -9,7 +9,7 @@
  * @author Pete Muir
  *
  */
-public interface AnnotatedMethod extends AnnotatedItem<Method>
+public interface AnnotatedMethod<T> extends AnnotatedItem<T, Method>
 {
    
    public Method getAnnotatedMethod();

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	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedType.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -1,6 +1,9 @@
 package org.jboss.webbeans.introspector;
 
+import java.lang.annotation.Annotation;
+import java.util.Set;
 
+
 /**
  * AnnotatedType provides a uniform access to the annotations on an annotated
  * class defined either in Java or XML 
@@ -8,7 +11,7 @@
  * @author Pete Muir
  *
  */
-public interface AnnotatedType<T> extends AnnotatedItem<Class<T>>
+public interface AnnotatedType<T> extends AnnotatedItem<T, Class<T>>
 {
    
    /**
@@ -17,4 +20,29 @@
     */
    public Class<? extends T> getAnnotatedClass();
    
+   /**
+    * Get all fields on the type
+    * @return
+    */
+   public Set<AnnotatedField<?>> getFields();
+   
+   /**
+    * Get all annotations which are annotated with the given annotation 
+    * type
+    * 
+    * If no annotations are present which are annotated with the given
+    * annotation an empty set is returned
+    */
+   public Set<AnnotatedField<?>> getAnnotatedField(Class<? extends Annotation> annotationType);
+   
+   /**
+    * Get all fields which are annotated with the given meta annotation 
+    * type
+    * 
+    * If no annotations are present which are annotated with the given meta
+    * annotation an empty set is returned
+    */
+   public Set<AnnotatedField<?>> getMetaAnnotatedFields(
+         Class<? extends Annotation> metaAnnotationType);
+   
 }
\ No newline at end of file

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedConstructor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedConstructor.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedConstructor.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,38 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.reflect.Constructor;
+
+public class SimpleAnnotatedConstructor<T> extends AbstractAnnotatedItem<T, Constructor<T>> implements AnnotatedConstructor<T>
+{
+   
+   private Constructor<T> constructor;
+   
+   public SimpleAnnotatedConstructor(Constructor<T> constructor)
+   {
+      super(buildAnnotationMap(constructor));
+      this.constructor = constructor;
+   }
+
+   public Constructor<T> getAnnotatedConstructor()
+   {
+      return constructor;
+   }
+   
+   @Override
+   public String toString()
+   {
+      return constructor + " " + getAnnotatedConstructor().toString();
+   }
+
+   public Constructor<T> getDelegate()
+   {
+      return constructor;
+   }
+   
+   @SuppressWarnings("unchecked")
+   public Class<? extends T> getType()
+   {
+      return constructor.getDeclaringClass();
+   }
+
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedField.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -0,0 +1,38 @@
+package org.jboss.webbeans.introspector;
+
+import java.lang.reflect.Field;
+
+public class SimpleAnnotatedField<T> extends AbstractAnnotatedItem<T, Field> implements AnnotatedField<T>
+{
+   
+   private Field field;
+   
+   public SimpleAnnotatedField(Field field)
+   {
+      super(buildAnnotationMap(field));
+      this.field = field;
+   }
+
+   public Field getAnnotatedField()
+   {
+      return field;
+   }
+   
+   @Override
+   public String toString()
+   {
+      return field + " " + getAnnotatedField().toString();
+   }
+
+   public Field getDelegate()
+   {
+      return field;
+   }
+   
+   @SuppressWarnings("unchecked")
+   public Class<? extends T> getType()
+   {
+      return (Class<? extends T>) field.getType();
+   }
+
+}


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

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -3,17 +3,39 @@
 import java.lang.annotation.Annotation;
 import java.util.Map;
 
-public class SimpleAnnotatedItem<E> extends AbstractAnnotatedItem<E>
+public class SimpleAnnotatedItem<T, S> extends AbstractAnnotatedItem<T, S>
 {
 
+   private Class<? extends T> type;
+   
    public SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap)
    {
+      this(annotationMap, null);
+   }
+   
+   public SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap, Class<? extends Object> type)
+   {
       super(annotationMap);
    }
+   
+   public SimpleAnnotatedItem(Annotation[] annotations)
+   {
+      this(annotations, null);
+   }
+   
+   public SimpleAnnotatedItem(Annotation[] annotations, Class<? extends Object> type)
+   {
+      this(buildAnnotationMap(annotations), type);
+   }
 
-   public E getDelegate()
+   public S getDelegate()
    {
       return null;
    }
+   
+   public Class<? extends T> getType()
+   {
+      return type;
+   }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedMethod.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedMethod.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -2,31 +2,37 @@
 
 import java.lang.reflect.Method;
 
-public class SimpleAnnotatedMethod extends AbstractAnnotatedItem<Method> implements AnnotatedMethod
+public class SimpleAnnotatedMethod<T> extends AbstractAnnotatedItem<T, Method> implements AnnotatedMethod<T>
 {
    
-   private Method annotatedMethod;
+   private Method method;
    
    public SimpleAnnotatedMethod(Method method)
    {
       super(buildAnnotationMap(method));
-      this.annotatedMethod = method;
+      this.method = method;
    }
 
    public Method getAnnotatedMethod()
    {
-      return annotatedMethod;
+      return method;
    }
    
    @Override
    public String toString()
    {
-      return annotatedMethod + " " + getAnnotatedMethod().toString();
+      return method + " " + getAnnotatedMethod().toString();
    }
 
    public Method getDelegate()
    {
-      return annotatedMethod;
+      return method;
    }
+   
+   @SuppressWarnings("unchecked")
+   public Class<? extends T> getType()
+   {
+      return (Class<? extends T>) method.getReturnType();
+   }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedType.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedType.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -1,7 +1,11 @@
 package org.jboss.webbeans.introspector;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Base class for implementing AnnotatedItem. This implementation assumes 
@@ -10,15 +14,18 @@
  * @author pmuir
  *
  */
-public class SimpleAnnotatedType<T> extends AbstractAnnotatedItem<Class<T>> implements AnnotatedType<T>
+public class SimpleAnnotatedType<T> extends AbstractAnnotatedItem<T, Class<T>> implements AnnotatedType<T>
 {
    
-   private Class<T> annotatedClass;
+   private Class<T> clazz;
+   private Set<AnnotatedField<?>> fields;
+   private Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> annotatedFields;
+   private Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> metaAnnotatedFields;
    
    public SimpleAnnotatedType(Class<T> annotatedClass, Map<Class<? extends Annotation>, Annotation> annotationMap)
    {
       super(annotationMap);
-      this.annotatedClass = annotatedClass;
+      this.clazz = annotatedClass;
    }
    
    public SimpleAnnotatedType(Class<T> annotatedClass)
@@ -28,18 +35,105 @@
    
    public Class<? extends T> getAnnotatedClass()
    {
-      return annotatedClass;
+      return clazz;
    }
    
    @Override
    public String toString()
    {
-      return annotatedClass + " " + super.getAnnotationMap().toString();
+      return clazz + " " + super.getAnnotationMap().toString();
    }
    
    public Class<T> getDelegate()
    {
-      return annotatedClass;
+      return clazz;
    }
+   
+   public Set<AnnotatedField<?>> getFields()
+   {
+      if (fields == null)
+      {
+         initFields();
+      }
+      return fields;
+   }
+   
+   private void initFields()
+   {
+      this.fields = new HashSet<AnnotatedField<?>>();
+      for(Field field : clazz.getFields())
+      {
+         fields.add(new SimpleAnnotatedField<Object>(field));
+      }
+   }
 
+   public Set<AnnotatedField<?>> getMetaAnnotatedFields(
+         Class<? extends Annotation> metaAnnotationType)
+   {
+      if (metaAnnotatedFields == null)
+      {
+         metaAnnotatedFields = new HashMap<Class<? extends Annotation>, Set<AnnotatedField<?>>>();
+      }
+      if (annotatedFields == null)
+      {
+         initAnnoatedFields();
+      }
+      populateMetaAnnotatedFieldMap(metaAnnotationType, annotatedFields, metaAnnotatedFields);
+      return metaAnnotatedFields.get(metaAnnotationType);
+   }
+   
+   protected static <T extends Annotation> Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> populateMetaAnnotatedFieldMap(
+         Class<T> metaAnnotationType, 
+         Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> metaAnnotations, 
+         Map<Class<? extends Annotation>, Set<AnnotatedField<?>>> annotationMap)
+   {
+      if (!metaAnnotations.containsKey(metaAnnotationType))
+      {
+         Set<AnnotatedField<?>> s = new HashSet<AnnotatedField<?>>();
+         for (Class<? extends Annotation> annotationType: annotationMap.keySet())
+         {
+            if (annotationType.isAnnotationPresent(metaAnnotationType))
+            {
+               s.addAll(annotationMap.get(annotationType));
+            }
+         }
+         metaAnnotations.put(metaAnnotationType, s);
+      }
+      return metaAnnotations;
+   }
+
+   public Set<AnnotatedField<?>> getAnnotatedField(
+         Class<? extends Annotation> annotationType)
+   {
+      if (annotatedFields == null)
+      {
+         initAnnoatedFields();
+      }
+      return annotatedFields.get(annotationType);
+   }
+
+   private void initAnnoatedFields()
+   {
+      if (fields == null)
+      {
+         initFields();
+      }
+      for (AnnotatedField<?> field : fields)
+      {
+         for (Annotation annotation : field.getAnnotations())
+         {
+            if (!annotatedFields.containsKey(annotation))
+            {
+               annotatedFields.put(annotation.annotationType(), new HashSet<AnnotatedField<?>>());
+            }
+            annotatedFields.get(annotation.annotationType()).add(field);
+         }
+      }
+   }
+
+   public Class<? extends T> getType()
+   {
+      return clazz;
+   }
+
 }
\ No newline at end of file

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -6,6 +6,7 @@
 import java.util.HashSet;
 import java.util.logging.Logger;
 
+import javax.webbeans.BindingType;
 import javax.webbeans.Dependent;
 
 import org.jboss.webbeans.ManagerImpl;
@@ -101,6 +102,13 @@
    }
    
    @Override
+   protected void initInjectionPoints()
+   {
+      super.initInjectionPoints();
+      annotatedItem.getMetaAnnotatedFields(BindingType.class);
+   }
+   
+   @Override
    protected String getDefaultName()
    {
       String name = Strings.decapitalize(getType().getSimpleName()); 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -1,7 +1,6 @@
 package org.jboss.webbeans.model;
 
 import java.lang.annotation.Annotation;
-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -18,7 +17,9 @@
 import org.jboss.webbeans.bindings.DependentAnnotationLiteral;
 import org.jboss.webbeans.bindings.ProductionAnnotationLiteral;
 import org.jboss.webbeans.injectable.ComponentConstructor;
+import org.jboss.webbeans.injectable.Injectable;
 import org.jboss.webbeans.injectable.InjectableMethod;
+import org.jboss.webbeans.injectable.InjectableParameter;
 import org.jboss.webbeans.introspector.AnnotatedItem;
 import org.jboss.webbeans.util.LoggerUtil;
 
@@ -37,6 +38,7 @@
    protected Class<T> type;
    protected InjectableMethod<?> removeMethod;
    private Set<Class> apiTypes;
+   protected Set<Injectable<?, ?>> injectionPoints;
    
    protected void init(ManagerImpl container)
    {
@@ -51,6 +53,17 @@
       initApiTypes();
    }
    
+   protected void initInjectionPoints()
+   {
+      if (removeMethod != null)
+      {
+         for (InjectableParameter<?> injectable : removeMethod.getParameters())
+         {
+            injectionPoints.add(injectable);
+         }
+      }
+   }
+   
    protected abstract void initType();
    
    protected void initApiTypes()
@@ -73,9 +86,9 @@
       return classes;
    }
 
-   protected abstract AnnotatedItem<E> getAnnotatedItem();
+   protected abstract AnnotatedItem<T, E> getAnnotatedItem();
    
-   protected abstract AnnotatedItem<E> getXmlAnnotatedItem();
+   protected abstract AnnotatedItem<T, E> getXmlAnnotatedItem();
 
    protected void initBindingTypes()
    {
@@ -307,5 +320,10 @@
    {
       return removeMethod;
    }
+   
+   public Set<Injectable<?, ?>> getInjectionPoints()
+   {
+      return injectionPoints;
+   }
 
 }
\ No newline at end of file

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EnterpriseComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EnterpriseComponentModel.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EnterpriseComponentModel.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -10,6 +10,7 @@
 import org.jboss.webbeans.injectable.ComponentConstructor;
 import org.jboss.webbeans.injectable.EnterpriseConstructor;
 import org.jboss.webbeans.injectable.InjectableMethod;
+import org.jboss.webbeans.injectable.InjectableParameter;
 import org.jboss.webbeans.introspector.AnnotatedType;
 import org.jboss.webbeans.util.Reflections;
 
@@ -33,8 +34,22 @@
       super.init(container);
       this.constructor = new EnterpriseConstructor<T>(getEjbMetaData());
       initRemoveMethod(container);
+      initInjectionPoints();
    }
    
+   @Override
+   protected void initInjectionPoints()
+   {
+      super.initInjectionPoints();
+      if (removeMethod != null)
+      {
+         for (InjectableParameter<?> injectable : removeMethod.getParameters())
+         {
+            injectionPoints.add(injectable);
+         }
+      }
+   }
+   
    public ComponentConstructor<T> getConstructor()
    {
       return constructor;

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -17,10 +17,10 @@
 public class EventComponentModel<T> extends AbstractComponentModel<T, Object>
 {
    private String location;
-   private AnnotatedItem<Object> annotatedItem;
-   private AnnotatedItem<Object> xmlAnnotatedItem;
+   private AnnotatedItem<T, Object> annotatedItem;
+   private AnnotatedItem<T, Object> xmlAnnotatedItem;
 
-   public EventComponentModel(SimpleAnnotatedItem<Object> annotatedItem, SimpleAnnotatedItem<Object> xmlAnnotatedItem, ManagerImpl manager)
+   public EventComponentModel(SimpleAnnotatedItem<T, Object> annotatedItem, SimpleAnnotatedItem<T, Object> xmlAnnotatedItem, ManagerImpl manager)
    {
       this.annotatedItem = annotatedItem;
       this.xmlAnnotatedItem = xmlAnnotatedItem;
@@ -61,7 +61,7 @@
    }
 
    @Override
-   protected AnnotatedItem<Object> getAnnotatedItem()
+   protected AnnotatedItem<T, Object> getAnnotatedItem()
    {
       return this.annotatedItem;
    }
@@ -74,7 +74,7 @@
    }
 
    @Override
-   protected AnnotatedItem<Object> getXmlAnnotatedItem()
+   protected AnnotatedItem<T, Object> getXmlAnnotatedItem()
    {
       return this.xmlAnnotatedItem;
    }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypesModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypesModel.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/MergedStereotypesModel.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -25,7 +25,7 @@
    private Set<Class<?>> requiredTypes;
    private Set<Class<? extends Annotation>> supportedScopes;
    
-   public MergedStereotypesModel(AnnotatedItem<E> annotatedItem, AnnotatedItem<E> xmlAnnotatedItem, ManagerImpl container)
+   public MergedStereotypesModel(AnnotatedItem<T, E> annotatedItem, AnnotatedItem<T, E> xmlAnnotatedItem, ManagerImpl container)
    {
       possibleDeploymentTypes = new HashMap<Class<? extends Annotation>, Annotation>();
       possibleScopeTypes = new HashSet<Annotation>();

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerExpressionComponent.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerExpressionComponent.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerExpressionComponent.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -15,11 +15,11 @@
 public class ProducerExpressionComponent<T> extends AbstractProducerComponentModel<T>
 {
    
-   private AnnotatedItem<Method> xmlAnnotatedItem;
-   private AnnotatedItem<Method> annotatedItem = new SimpleAnnotatedItem<Method>(new HashMap<Class<? extends Annotation>, Annotation>());
+   private AnnotatedItem<T, Method> xmlAnnotatedItem;
+   private AnnotatedItem<T, Method> annotatedItem = new SimpleAnnotatedItem<T, Method>(new HashMap<Class<? extends Annotation>, Annotation>());
    private String location;
 
-   public ProducerExpressionComponent(AnnotatedItem<Method> xmlAnnotatedMethod, ManagerImpl container)
+   public ProducerExpressionComponent(AnnotatedItem<T, Method> xmlAnnotatedMethod, ManagerImpl container)
    {
       this.xmlAnnotatedItem = xmlAnnotatedMethod;
       init(container);
@@ -41,11 +41,12 @@
    protected void init(ManagerImpl container)
    {
       super.init(container);
+      initInjectionPoints();
    }
    
 
    @Override
-   protected AnnotatedItem<Method> getAnnotatedItem()
+   protected AnnotatedItem<T, Method> getAnnotatedItem()
    {
       return annotatedItem;
    }
@@ -74,7 +75,7 @@
    }
 
    @Override
-   protected AnnotatedItem<Method> getXmlAnnotatedItem()
+   protected AnnotatedItem<T, Method> getXmlAnnotatedItem()
    {
       return xmlAnnotatedItem;
    }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerMethodComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerMethodComponentModel.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ProducerMethodComponentModel.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -13,6 +13,7 @@
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.injectable.ComponentConstructor;
 import org.jboss.webbeans.injectable.InjectableMethod;
+import org.jboss.webbeans.injectable.InjectableParameter;
 import org.jboss.webbeans.injectable.MethodConstructor;
 import org.jboss.webbeans.introspector.AnnotatedItem;
 import org.jboss.webbeans.introspector.AnnotatedMethod;
@@ -22,12 +23,12 @@
 public class ProducerMethodComponentModel<T> extends AbstractProducerComponentModel<T>
 {
    
-   private ComponentConstructor<T> constructor;
+   private MethodConstructor<T> constructor;
    
-   private AnnotatedItem<Method> xmlAnnotatedItem = new SimpleAnnotatedItem<Method>(new HashMap<Class<? extends Annotation>, Annotation>());
-   private AnnotatedMethod annotatedMethod;
+   private AnnotatedItem<T, Method> xmlAnnotatedItem = new SimpleAnnotatedItem<T, Method>(new HashMap<Class<? extends Annotation>, Annotation>());
+   private AnnotatedMethod<T> annotatedMethod;
    
-   private AbstractComponentModel<?, Class<?>> declaringComponent;
+   private AbstractComponentModel<?, ?> declaringComponent;
    
    // Cached values
    private String location;
@@ -41,15 +42,33 @@
    }
    
    @Override
-   protected void init(ManagerImpl container)
+   protected void init(ManagerImpl manager)
    {
-      super.init(container);
+      super.init(manager);
       checkProducerMethod();
       this.constructor = new MethodConstructor<T>(getAnnotatedItem().getDelegate());
-      initRemoveMethod(container);
+      initRemoveMethod(manager);
+      initInjectionPoints();
    }
    
    @Override
+   protected void initInjectionPoints()
+   {
+      super.initInjectionPoints();
+      for (InjectableParameter<?> injectable : constructor.getParameters())
+      {
+         injectionPoints.add(injectable);
+      }
+      if (removeMethod != null)
+      {
+         for (InjectableParameter<?> injectable : removeMethod.getParameters())
+         {
+            injectionPoints.add(injectable);
+         }
+      }
+   }
+   
+   @Override
    protected void initDeploymentType(ManagerImpl container)
    {
       super.initDeploymentType(container);
@@ -65,7 +84,7 @@
 
    protected void initDeclaringComponent(ManagerImpl container)
    {
-      declaringComponent = (AbstractComponentModel<?, Class<?>>) container.getModelManager().getComponentModel(getAnnotatedItem().getDelegate().getDeclaringClass());
+      declaringComponent = container.getModelManager().getComponentModel(getAnnotatedItem().getDelegate().getDeclaringClass());
    }
    
    @Override
@@ -109,7 +128,7 @@
    }
 
    @Override
-   protected AnnotatedItem<Method> getAnnotatedItem()
+   protected AnnotatedMethod<T> getAnnotatedItem()
    {
       return annotatedMethod;
    }
@@ -129,7 +148,7 @@
    }
 
    @Override
-   protected AnnotatedItem<Method> getXmlAnnotatedItem()
+   protected AnnotatedItem<T, Method> getXmlAnnotatedItem()
    {
       return xmlAnnotatedItem;
    }
@@ -180,7 +199,7 @@
       return removeMethod;
    }
    
-   public AbstractComponentModel<?, Class<?>> getDeclaringComponent()
+   public AbstractComponentModel<?, ?> getDeclaringComponent()
    {
       return declaringComponent;
    }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/SimpleComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/SimpleComponentModel.java	2008-10-19 14:07:50 UTC (rev 118)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/SimpleComponentModel.java	2008-10-19 22:31:44 UTC (rev 119)
@@ -8,6 +8,7 @@
 import javax.webbeans.Initializer;
 
 import org.jboss.webbeans.ManagerImpl;
+import org.jboss.webbeans.injectable.InjectableParameter;
 import org.jboss.webbeans.injectable.SimpleConstructor;
 import org.jboss.webbeans.introspector.AnnotatedType;
 import org.jboss.webbeans.util.LoggerUtil;
@@ -41,9 +42,20 @@
       super.init(container);
       initConstructor();
       checkType(getType());
+      initInjectionPoints();
       // TODO Interceptors
    }
    
+   @Override
+   protected void initInjectionPoints()
+   {
+      super.initInjectionPoints();
+      for (InjectableParameter<?> injectable : constructor.getParameters())
+      {
+         injectionPoints.add(injectable);
+      }
+   }
+   
    public static void checkType(Class<?> type)
    {
       if (type.isMemberClass())




More information about the weld-commits mailing list