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

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Sat Oct 25 14:38:53 EDT 2008


Author: pete.muir at jboss.org
Date: 2008-10-25 14:38:53 -0400 (Sat, 25 Oct 2008)
New Revision: 148

Added:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/Location.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/NameResolutionLocation.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/NotAScopeException.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/TypesafeResolutionLocation.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ScopeModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InstantiationByNameTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InstantiationByTypeTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/TypeSafeResolutionTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/broken/PlaiceFarm.java
Removed:
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectableTest.java
Modified:
   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/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/SimpleInjectable.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/SimpleAnnotatedItem.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Reflections.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EnterpriseComponentModelTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NameBasedResolutionTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/Plaice.java
Log:
Add instantiation

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-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -2,18 +2,19 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import javax.webbeans.AmbiguousDependencyException;
 import javax.webbeans.DeploymentException;
 import javax.webbeans.Observer;
 import javax.webbeans.Production;
 import javax.webbeans.Standard;
 import javax.webbeans.TypeLiteral;
+import javax.webbeans.UnproxyableDependencyException;
+import javax.webbeans.UnsatisfiedDependencyException;
 import javax.webbeans.manager.Bean;
 import javax.webbeans.manager.Context;
 import javax.webbeans.manager.Decorator;
@@ -21,16 +22,16 @@
 import javax.webbeans.manager.Interceptor;
 import javax.webbeans.manager.Manager;
 
-import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
 import org.jboss.webbeans.ejb.EjbManager;
 import org.jboss.webbeans.event.EventBus;
+import org.jboss.webbeans.exceptions.NameResolutionLocation;
+import org.jboss.webbeans.exceptions.TypesafeResolutionLocation;
 import org.jboss.webbeans.injectable.Injectable;
 import org.jboss.webbeans.injectable.SimpleInjectable;
+import org.jboss.webbeans.util.ClientProxy;
 
 public class ManagerImpl implements Manager
 {
-
-   private static final Annotation[] DEFAULT_BINDING = {new CurrentAnnotationLiteral()};
    
    private List<Class<? extends Annotation>> enabledDeploymentTypes;
    private ModelManager modelManager;
@@ -47,7 +48,7 @@
       this.ejbLookupManager = new EjbManager();
       this.beans = new HashSet<Bean<?>>();
       this.eventBus = new EventBus();
-      resolutionManager = new ResolutionManager(this);
+      this.resolutionManager = new ResolutionManager(this);
    }
 
    private void initEnabledDeploymentTypes(
@@ -108,41 +109,20 @@
       return ejbLookupManager;
    }
 
-   public <T> Set<Bean<T>> resolveByType(Class<T> apiType,
+   public <T> Set<Bean<T>> resolveByType(Class<T> type,
          Annotation... bindingTypes)
    {
-      return resolveByType(apiType, bindingTypes, new Type[0]);
+      return resolveByType(new SimpleInjectable<T>(type, bindingTypes));
    }
 
    public <T> Set<Bean<T>> resolveByType(TypeLiteral<T> apiType,
          Annotation... bindingTypes)
    {
-      if (apiType.getType() instanceof ParameterizedType)
-      {
-         return resolveByType(apiType.getRawType(), bindingTypes, ((ParameterizedType) apiType.getType()).getActualTypeArguments());
-      }
-      else
-      {
-         return resolveByType(apiType.getRawType(), bindingTypes, new Type[0]);
-      }
-      
+      return resolveByType(new SimpleInjectable<T>(apiType, bindingTypes));
    }
    
-   private <T> Set<Bean<T>> resolveByType(Class<T> apiType, Annotation[] bindingTypes, Type[] actualTypeArguements)
+   private <T> Set<Bean<T>> resolveByType(Injectable<T, ?> injectable)
    {
-      if (bindingTypes.length == 0)
-      {
-         bindingTypes = DEFAULT_BINDING;
-      }
-      Injectable<T, ?> injectable = null;
-      if (actualTypeArguements.length > 0)
-      {
-         injectable = new SimpleInjectable<T>(apiType, bindingTypes, actualTypeArguements);
-      }
-      else
-      {
-         injectable = new SimpleInjectable<T>(apiType, bindingTypes);
-      }
       Set<Bean<T>> beans = getResolutionManager().get(injectable);
       if (beans == null)
       {
@@ -211,44 +191,78 @@
 
    public <T> T getInstance(Bean<T> bean)
    {
-      // TODO Auto-generated method stub
-      return null;
+      if (getModelManager().getScopeModel(bean.getScopeType()).isNormal())
+      {
+         // TODO return a client proxy
+         return null;
+      }
+      else
+      {
+         return getContext(bean.getScopeType()).get(bean, true);
+      }
    }
 
    public Object getInstanceByName(String name)
    {
-      // TODO Auto-generated method stub
-      return null;
+      Set<Bean<?>> beans = resolveByName(name);
+      if (beans.size() == 0)
+      {
+         throw new UnsatisfiedDependencyException(new NameResolutionLocation(name) + "Unable to resolve any Web Beans");
+      }
+      else if (beans.size() > 1)
+      {
+         throw new AmbiguousDependencyException(new NameResolutionLocation(name) + "Resolved multiple Web Beans");
+      }
+      else
+      {
+         return beans.iterator().next();
+      }
    }
 
    public <T> T getInstanceByType(Class<T> type, Annotation... bindingTypes)
    {
-      // TODO Auto-generated method stub
-      return null;
+      return getInstanceByType(new SimpleInjectable<T>(type, bindingTypes));
    }
-   
-   public <T> T getInstanceByType(Class<T> type, Set<Annotation> bindingTypes)
+
+   public <T> T getInstanceByType(TypeLiteral<T> type, Annotation... bindingTypes)
    {
-      // TODO Auto-generated method stub
-      return null;
+      return getInstanceByType(new SimpleInjectable<T>(type, bindingTypes));
    }
-
-   public <T> T getInstanceByType(TypeLiteral<T> type,
-         Annotation... bindingTypes)
+   
+   private <T> T getInstanceByType(Injectable<T, ?> injectable)
    {
-      // TODO Auto-generated method stub
-      return null;
+      Set<Bean<T>> beans = resolveByType(injectable);
+      if (beans.size() == 0)
+      {
+         throw new UnsatisfiedDependencyException(new TypesafeResolutionLocation(injectable) + "Unable to resolve any Web Beans");
+      }
+      else if (beans.size() > 1)
+      {
+         throw new AmbiguousDependencyException(new TypesafeResolutionLocation(injectable) + "Resolved multiple Web Beans");
+      }
+      else
+      {
+         Bean<T> bean = beans.iterator().next();
+         if (getModelManager().getScopeModel(bean.getScopeType()).isNormal() && !ClientProxy.isProxyable(injectable.getType()))
+         {
+            throw new UnproxyableDependencyException(new TypesafeResolutionLocation(injectable) + "Unable to proxy");
+         }
+         else
+         {
+            return getInstance(bean);
+         }
+      }
    }
+   
+   
 
-   public <T> Manager removeObserver(Observer<T> observer, Class<T> eventType,
-         Annotation... bindings)
+   public <T> Manager removeObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
    {
       // TODO Auto-generated method stub
       return this;
    }
 
-   public <T> Manager removeObserver(Observer<T> observer,
-         TypeLiteral<T> eventType, Annotation... bindings)
+   public <T> Manager removeObserver(Observer<T> observer, TypeLiteral<T> eventType, Annotation... bindings)
    {
       // TODO Auto-generated method stub
       return this;

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-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ModelManager.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -5,15 +5,34 @@
 import java.util.Map;
 
 import org.jboss.webbeans.model.AbstractComponentModel;
+import org.jboss.webbeans.model.ScopeModel;
 import org.jboss.webbeans.model.StereotypeModel;
+import org.jboss.webbeans.util.MapWrapper;
 
 public class ModelManager
 {
    
-   // TODO Store these in the application context (when it exists)
-   private static Map<Class<? extends Annotation>, StereotypeModel<?>> stereotypes = new HashMap<Class<? extends Annotation>, StereotypeModel<?>>();
-   private static Map<Class<?>, AbstractComponentModel<?, ?>> componentModels = new HashMap<Class<?>, AbstractComponentModel<?,?>>();
+   @SuppressWarnings("unchecked")
+   private class ScopeModelMap extends MapWrapper<Class<? extends Annotation>, ScopeModel<? extends Annotation>>
+   {
+
+      public ScopeModelMap()
+      {
+         super(new HashMap<Class<? extends Annotation>, ScopeModel<? extends Annotation>>());
+      }
+      
+      public <T extends Annotation> ScopeModel<T> get(Class<T> key)
+      {
+         return (ScopeModel<T>) super.get(key);
+      }
+   }
    
+   private Map<Class<? extends Annotation>, StereotypeModel<?>> stereotypes = new HashMap<Class<? extends Annotation>, StereotypeModel<?>>();
+   
+   private Map<Class<?>, AbstractComponentModel<?, ?>> componentModels = new HashMap<Class<?>, AbstractComponentModel<?,?>>();
+   
+   private ScopeModelMap scopes = new ScopeModelMap(); 
+   
 
    public void addStereotype(StereotypeModel<?> stereotype)
    {
@@ -34,5 +53,19 @@
    {
       return componentModels.get(clazz);
    }
+   
+   public <T extends Annotation> ScopeModel<T> getScopeModel(Class<T> scopeType)
+   {
+      if (scopes.containsKey(scopeType))
+      {
+         return scopes.get(scopeType);
+      }
+      else
+      {
+         ScopeModel<T> scopeModel = new ScopeModel<T>(scopeType);
+         scopes.put(scopeType, scopeModel);
+         return scopeModel;
+      }
+   }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java	2008-10-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ResolutionManager.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -45,15 +45,9 @@
    
    private ManagerImpl manager;
    
-   private boolean rebuildRequired = true;
-   
    public ResolutionManager(ManagerImpl manager)
    {
-      this.resolvedInjectionPoints = new InjectableMap();
       this.injectionPoints = new HashSet<Injectable<?,?>>();
-      
-      this.resolvedNames = new HashMap<String, Set<Bean<?>>>();
-      
       this.manager = manager;
    }
    
@@ -69,20 +63,19 @@
    
    public void clear()
    {
-      rebuildRequired = true;
-      resolvedInjectionPoints.clear();
-      resolvedNames.clear();
+      resolvedInjectionPoints = null;
+      resolvedNames = new HashMap<String, Set<Bean<?>>>();
    }
    
-   private void resolveBeans()
+   public void resolveBeans()
    {
-      if (rebuildRequired)
+      if (resolvedInjectionPoints == null)
       {
+         resolvedInjectionPoints = new InjectableMap();
          for (Injectable<?, ?> injectable : injectionPoints)
          {
             registerInjectionPoint(injectable);
          }
-         rebuildRequired = false;
       }
    }
    
@@ -108,29 +101,37 @@
                beans.add(bean);
             }
          }
-         resolvedNames.put(name, retainHighestPrecedenceBeans(beans, manager.getEnabledDeploymentTypes()));
+         beans = retainHighestPrecedenceBeans(beans, manager.getEnabledDeploymentTypes());
+         resolvedNames.put(name, beans);
          return beans;
       }
    }
    
    private static Set<Bean<?>> retainHighestPrecedenceBeans(Set<Bean<?>> beans, List<Class<? extends Annotation>> enabledDeploymentTypes)
    {
-      SortedSet<Class<? extends Annotation>> possibleDeploymentTypes = new TreeSet<Class<? extends Annotation>>(new ListComparator<Class<? extends Annotation>>(enabledDeploymentTypes));
-      for (Bean<?> bean : beans)
+      if (beans.size() > 0)
       {
-         possibleDeploymentTypes.add(bean.getDeploymentType());
-      }
-      possibleDeploymentTypes.retainAll(enabledDeploymentTypes);
-      Class<? extends Annotation> highestPrecedencePossibleDeploymentType = possibleDeploymentTypes.last();
-      Set<Bean<?>> trimmed = new HashSet<Bean<?>>();
-      for (Bean<?> bean : beans)
-      {
-         if (bean.getDeploymentType().equals(highestPrecedencePossibleDeploymentType))
+         SortedSet<Class<? extends Annotation>> possibleDeploymentTypes = new TreeSet<Class<? extends Annotation>>(new ListComparator<Class<? extends Annotation>>(enabledDeploymentTypes));
+         for (Bean<?> bean : beans)
          {
-            trimmed.add(bean);
+            possibleDeploymentTypes.add(bean.getDeploymentType());
          }
+         possibleDeploymentTypes.retainAll(enabledDeploymentTypes);
+         Class<? extends Annotation> highestPrecedencePossibleDeploymentType = possibleDeploymentTypes.last();
+         Set<Bean<?>> trimmed = new HashSet<Bean<?>>();
+         for (Bean<?> bean : beans)
+         {
+            if (bean.getDeploymentType().equals(highestPrecedencePossibleDeploymentType))
+            {
+               trimmed.add(bean);
+            }
+         }
+         return trimmed;
       }
-      return trimmed;
+      else
+      {
+         return beans;
+      }
    }
 
 }

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/Location.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/Location.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/Location.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,74 @@
+package org.jboss.webbeans.exceptions;
+
+public class Location
+{
+   
+   private String type;
+   
+   private String bean;
+   
+   private String element;
+
+   public Location(String type, String bean, String element)
+   {
+      super();
+      this.type = type;
+      this.bean = bean;
+      this.element = element;
+   }
+
+   public String getType()
+   {
+      return type;
+   }
+
+   public void setType(String type)
+   {
+      this.type = type;
+   }
+
+   public String getBean()
+   {
+      return bean;
+   }
+
+   public void setBean(String bean)
+   {
+      this.bean = bean;
+   }
+
+   public String getElement()
+   {
+      return element;
+   }
+
+   public void setElement(String element)
+   {
+      this.element = element;
+   }
+   
+   protected String getMessage()
+   {
+      String location = "";
+      if (getType() != null)
+      {
+         location += "type: " + getType() + "; ";
+      }
+      if (getBean() != null)
+      {
+         location += "bean: " + getBean() + "; ";
+      }
+      if (getElement() != null)
+      {
+         location += "element: " + getElement() + "; ";
+      }
+      return location;
+   }
+   
+   @Override
+   public String toString()
+   {
+      return getMessage();
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/NameResolutionLocation.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/NameResolutionLocation.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/NameResolutionLocation.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,35 @@
+package org.jboss.webbeans.exceptions;
+
+public class NameResolutionLocation extends Location
+{
+   
+   private String target;
+   
+   public NameResolutionLocation(String target)
+   {
+      super("Named Based Resolution", null, null);
+      
+   }
+   
+   public String getTarget()
+   {
+      return target;
+   }
+   
+   public void setTarget(String target)
+   {
+      this.target = target;
+   }
+   
+   @Override
+   protected String getMessage()
+   {
+      String location = super.getMessage();
+      if (getTarget() != null)
+      {
+         location += "target: " + getTarget() + ";"; 
+      }
+      return location;
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/NotAScopeException.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/NotAScopeException.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/NotAScopeException.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,28 @@
+package org.jboss.webbeans.exceptions;
+
+import javax.webbeans.DefinitionException;
+
+public class NotAScopeException extends DefinitionException
+{
+
+   public NotAScopeException()
+   {
+      super();
+   }
+
+   public NotAScopeException(String message, Throwable throwable)
+   {
+      super(message, throwable);
+   }
+
+   public NotAScopeException(String message)
+   {
+      super(message);
+   }
+
+   public NotAScopeException(Throwable throwable)
+   {
+      super(throwable);
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/TypesafeResolutionLocation.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/TypesafeResolutionLocation.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/exceptions/TypesafeResolutionLocation.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,66 @@
+package org.jboss.webbeans.exceptions;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Set;
+
+import org.jboss.webbeans.injectable.Injectable;
+
+public class TypesafeResolutionLocation extends Location
+{
+  
+   private String target;
+   
+   private TypesafeResolutionLocation()
+   {
+      super("Typesafe resolution", null, null);
+   }
+   
+   public TypesafeResolutionLocation(Injectable<?, ?> injectable)
+   {
+      this();
+      this.target = injectable.getAnnotatedItem().toString();
+   }
+
+   public String getTarget()
+   {
+      return target;
+   }
+   
+   public void setTarget(String target)
+   {
+      this.target = target;
+   }
+   
+   @Override
+   protected String getMessage()
+   {
+      String location = super.getMessage();
+      if (getTarget() != null)
+      {
+         location += "target: " + getTarget() + "; "; 
+      }
+      return location;
+   }
+   
+   public static String createMessage(Class<?> type, Type[] actualTypeArguements, Set<Annotation> annotations)
+   {
+      String string = type.toString();
+      if (actualTypeArguements.length > 0)
+      {
+         string += "<";
+         for (int i = 0; i < actualTypeArguements.length; i++)
+         {
+            string += actualTypeArguements[i].toString();
+            if (i < actualTypeArguements.length - 1)
+            {
+               string += ",";
+            }
+         }
+         string += ">";
+      }
+      string += annotations;
+      return string;
+   }
+   
+}


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

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java	2008-10-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -1,6 +1,7 @@
 package org.jboss.webbeans.injectable;
 
 import java.lang.annotation.Annotation;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -8,6 +9,7 @@
 import javax.webbeans.manager.Bean;
 
 import org.jboss.webbeans.ManagerImpl;
+import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
 import org.jboss.webbeans.introspector.AnnotatedItem;
 
 /**
@@ -20,6 +22,9 @@
 public abstract class Injectable<T, S>
 {
    
+   private static final Annotation[] DEFAULT_BINDING_ARRAY = {new CurrentAnnotationLiteral()};
+   private static final Set<Annotation> DEFAULT_BINDING = new HashSet<Annotation>(Arrays.asList(DEFAULT_BINDING_ARRAY));
+   
    private AnnotatedItem<T, S> annotatedItem;
    
    public Injectable(AnnotatedItem<T, S> annotatedItem)
@@ -27,9 +32,31 @@
       this.annotatedItem = annotatedItem;
    }
 
+   public Annotation[] getBindingTypesAsArray()
+   {
+      Annotation[] annotations = annotatedItem.getAnnotationsAsArray(BindingType.class);
+      // TODO This is in the wrong place, where to put it... Probably best to wrap annotated item...
+      if (annotations.length ==0)
+      {
+         return DEFAULT_BINDING_ARRAY; 
+      }
+      else
+      {
+         return annotations;
+      }
+   }
+   
    public Set<Annotation> getBindingTypes()
    {
-      return annotatedItem.getAnnotations(BindingType.class);
+      Set<Annotation> annotations = annotatedItem.getAnnotations(BindingType.class);
+      if (annotations.size() == 0)
+      {
+         return DEFAULT_BINDING;
+      }
+      else
+      {
+         return annotations;
+      }
    }
    
    protected Injectable() {}
@@ -42,7 +69,7 @@
 
    public T getValue(ManagerImpl manager)
    {
-      return manager.getInstanceByType(getType(), getBindingTypes());
+      return manager.getInstanceByType(getType(), getBindingTypesAsArray());
    }
    
    public Class<? extends T> getType()
@@ -76,7 +103,7 @@
       {
          Injectable<?, ?> that = (Injectable<?, ?>) other;
          return this.getAnnotatedItem().isAssignableFrom(that.getAnnotatedItem()) &&
-            that.getAnnotatedItem().getAnnotations(BindingType.class).equals(this.getAnnotatedItem().getAnnotations(BindingType.class));
+            that.getBindingTypes().equals(this.getBindingTypes());
       }
       else
       {

Modified: 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	2008-10-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/SimpleInjectable.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -3,6 +3,8 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
+import javax.webbeans.TypeLiteral;
+
 import org.jboss.webbeans.introspector.SimpleAnnotatedItem;
 
 public class SimpleInjectable<T> extends Injectable<T, Object>
@@ -17,5 +19,10 @@
    {
       super(new SimpleAnnotatedItem<T, Object>(bindingTypes, type, actualTypeArguements));
    }
+   
+   public SimpleInjectable(TypeLiteral<T> apiType, Annotation[] bindingTypes)
+   {
+      super(new SimpleAnnotatedItem<T, Object>(bindingTypes, apiType));
+   }
 
 }

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-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AbstractAnnotatedItem.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -10,14 +10,16 @@
 import java.util.Set;
 import java.util.Map.Entry;
 
+import org.jboss.webbeans.exceptions.TypesafeResolutionLocation;
 import org.jboss.webbeans.util.Reflections;
 
 public abstract class AbstractAnnotatedItem<T, S> implements AnnotatedItem<T, S>
 {
 
    private Map<Class<? extends Annotation>, Annotation> annotationMap;
-   private Map<Class<? extends Annotation>, Set<Annotation>> metaAnnotations;
+   private Map<Class<? extends Annotation>, Set<Annotation>> metaAnnotationMap;
    private Set<Annotation> annotationSet;
+   private Annotation[] annotationArray;
    
    public AbstractAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap)
    {
@@ -59,13 +61,22 @@
 
    public Set<Annotation> getAnnotations(Class<? extends Annotation> metaAnnotationType)
    {
-      if (metaAnnotations == null)
+      if (metaAnnotationMap == null)
       {
-         metaAnnotations = new HashMap<Class<? extends Annotation>, Set<Annotation>>();
+         metaAnnotationMap = new HashMap<Class<? extends Annotation>, Set<Annotation>>();
       }
-      populateMetaAnnotationMap(metaAnnotationType, metaAnnotations, annotationMap);
-      return metaAnnotations.get(metaAnnotationType);
+      populateMetaAnnotationMap(metaAnnotationType, metaAnnotationMap, annotationMap);
+      return metaAnnotationMap.get(metaAnnotationType);
    }
+   
+   public Annotation[] getAnnotationsAsArray(Class<? extends Annotation> metaAnnotationType)
+   {
+      if (annotationArray == null)
+      {
+         annotationArray = getAnnotations(metaAnnotationType).toArray(annotationArray);
+      }
+      return annotationArray;
+   }
 
    public Set<Annotation> getAnnotations()
    {
@@ -148,22 +159,7 @@
    @Override
    public String toString()
    {
-      String string = getType().toString();
-      if (getActualTypeArguements().length > 0)
-      {
-         string += "<";
-         for (int i = 0; i < getActualTypeArguements().length; i++)
-         {
-            string += getActualTypeArguements()[i].toString();
-            if (i < getActualTypeArguements().length - 1)
-            {
-               string += ",";
-            }
-         }
-         string += ">";
-      }
-      string += getAnnotations();
-      return string;
+      return TypesafeResolutionLocation.createMessage(getType(), getActualTypeArguements(), getAnnotations());
    }
 
 }
\ No newline at end of file

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-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/AnnotatedItem.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -31,6 +31,9 @@
     */
    public Set<Annotation> getAnnotations(
          Class<? extends Annotation> metaAnnotationType);
+   
+   public Annotation[] getAnnotationsAsArray(
+         Class<? extends Annotation> metaAnnotationType);
 
    /**
     * Get an annotation for the annotation type specified.

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-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -1,20 +1,21 @@
 package org.jboss.webbeans.introspector;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.Map;
 
+import javax.webbeans.TypeLiteral;
+
 public class SimpleAnnotatedItem<T, S> extends AbstractAnnotatedItem<T, S>
 {
 
    private Type[] actualTypeArguements = new Type[0];
-   
-   
    private Class<? extends T> type;
    
    public SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap)
    {
-      this(annotationMap, null);
+      super(annotationMap);
    }
    
    public SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap, Class<? extends T> type)
@@ -23,6 +24,16 @@
       this.type = type;
    }
    
+   public SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap, TypeLiteral<? extends T> apiType)
+   {
+      super(annotationMap);
+      this.type = apiType.getRawType();
+      if (apiType.getType() instanceof ParameterizedType)
+      {
+         actualTypeArguements = ((ParameterizedType) apiType.getType()).getActualTypeArguments();
+      }
+   }
+   
    public SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap, Class<? extends T> type, Type[] actualTypeArguements)
    {
       this(annotationMap, type);
@@ -31,7 +42,7 @@
    
    public SimpleAnnotatedItem(Annotation[] annotations)
    {
-      this(annotations, null);
+      this(buildAnnotationMap(annotations));
    }
    
    public SimpleAnnotatedItem(Annotation[] annotations, Class<? extends T> type)
@@ -39,6 +50,11 @@
       this(buildAnnotationMap(annotations), type);
    }
    
+   public SimpleAnnotatedItem(Annotation[] annotations, TypeLiteral<? extends T> apiType)
+   {
+      this(buildAnnotationMap(annotations), apiType);
+   }
+   
    public SimpleAnnotatedItem(Annotation[] annotations, Class<? extends T> type, Type[] actualTypeArguements)
    {
       this(buildAnnotationMap(annotations), type, actualTypeArguements);

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-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractClassComponentModel.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -1,10 +1,8 @@
 package org.jboss.webbeans.model;
 
-import java.lang.reflect.Method;
 import java.util.logging.Logger;
 
 import javax.webbeans.BindingType;
-import javax.webbeans.Dependent;
 
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.introspector.AnnotatedType;
@@ -138,30 +136,8 @@
             throw new RuntimeException("Scope " + getScopeType() + " is not an allowed by the stereotype for " + type);
          }
       }
-      if (isDeclaredFinal(type) && !getScopeType().equals(Dependent.class))
-      {
-         throw new RuntimeException("Scope " + getScopeType() + " is not allowed as the class is declared final or has methods declared final for " + type + ". Only @Dependent is allowed for final components");
-      }
    }
    
-   protected static boolean isDeclaredFinal(Class<?> type)
-   {
-      if (Reflections.isFinal(type))
-      {
-         return true;
-      }
-      for (Method method : type.getDeclaredMethods())
-      {
-         if (Reflections.isFinal(method))
-         {
-            return true;
-         }
-      }
-      return false;
-   }
-   
-   
-   
    protected void checkComponentImplementation()
    {
       if (Reflections.isAbstract(getType()))

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ScopeModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ScopeModel.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/ScopeModel.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.jboss.webbeans.model;
+
+import javax.webbeans.ScopeType;
+
+import org.jboss.webbeans.exceptions.NotAScopeException;
+
+/**
+ * 
+ * Model of a scope
+ * 
+ * @author Pete Muir
+ *
+ */
+public class ScopeModel<T>
+{
+   
+   private Class<T> scopeClass;
+   private boolean normal;
+   private boolean passivating;
+   
+   public ScopeModel(Class<T> scope)
+   {
+      if (scope.isAnnotationPresent(ScopeType.class))
+      {
+         ScopeType scopeType = scope.getAnnotation(ScopeType.class);
+         this.scopeClass = scope;
+         this.normal = scopeType.normal();
+         this.passivating = scopeType.passivating();
+      }
+      else
+      {
+         throw new NotAScopeException("Scope " + scope.getName() + " is not annotated with @ScopeType");
+      }
+   }
+   
+   public Class<T> getScopeClass()
+   {
+      return scopeClass;
+   }
+   
+   public boolean isNormal()
+   {
+      return normal;
+   }
+   
+   public boolean isPassivating()
+   {
+      return passivating;
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,33 @@
+package org.jboss.webbeans.util;
+
+
+public class ClientProxy
+{
+   
+   public static boolean isProxyable(Class<?> rawType)
+   {
+      // TODO Add logging
+      
+      if (Reflections.getConstructor(rawType) == null)
+      {
+         return false;
+      }
+      else if (Reflections.isTypeOrAnyMethodFinal(rawType))
+      {
+         return false;
+      }
+      else if (Reflections.isPrimitive(rawType))
+      {
+         return false;
+      }
+      else if (Reflections.isArrayType(rawType))
+      {
+         return false;
+      }
+      else
+      {
+         return true;
+      }
+   }
+   
+}


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

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Reflections.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Reflections.java	2008-10-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Reflections.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -56,6 +56,27 @@
       return Modifier.isFinal(method.getModifiers());
    }
    
+   public static boolean isTypeOrAnyMethodFinal(Class<?> type)
+   {
+      if (isFinal(type))
+      {
+         return true;
+      }
+      for (Method method : type.getDeclaredMethods())
+      {
+         if (isFinal(method))
+         {
+            return true;
+         }
+      }
+      return false;
+   }
+   
+   public static boolean isPrimitive(Class<?> type)
+   {
+      return type.isPrimitive();
+   }
+   
    public static boolean isAbstract(Class<?> clazz)
    {
       return Modifier.isAbstract(clazz.getModifiers());
@@ -67,6 +88,10 @@
       {
          return clazz.getConstructor(parameterTypes);
       }
+      catch (NoSuchMethodException e) 
+      {
+         return null;
+      }
       catch (Exception e)
       {
          throw new RuntimeException("Error accessing constructor (with parameters " + parameterTypes + ") of " + clazz, e);
@@ -187,4 +212,9 @@
          return new Type[0];
       }
    }
+
+   public static boolean isArrayType(Class<?> rawType)
+   {
+      return rawType.isArray();
+   }
 }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EnterpriseComponentModelTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EnterpriseComponentModelTest.java	2008-10-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EnterpriseComponentModelTest.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -7,7 +7,6 @@
 import javax.webbeans.Current;
 import javax.webbeans.Dependent;
 
-import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.introspector.AnnotatedType;
 import org.jboss.webbeans.introspector.SimpleAnnotatedType;
 import org.jboss.webbeans.model.AbstractEnterpriseComponentModel;
@@ -23,26 +22,12 @@
 import org.jboss.webbeans.test.components.Panther;
 import org.jboss.webbeans.test.components.Puma;
 import org.jboss.webbeans.test.components.Tiger;
-import org.jboss.webbeans.test.mock.MockManagerImpl;
 import org.jboss.webbeans.util.Reflections;
-import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 public class EnterpriseComponentModelTest extends AbstractTest
-{
+{  
    
-   private ManagerImpl container;
-   
-   @SuppressWarnings("unchecked")
-   private AnnotatedType emptyAnnotatedItem;
-   
-   @BeforeMethod
-   public void before()
-   {
-      emptyAnnotatedItem = new SimpleAnnotatedType<Object>(null, new HashMap<Class<? extends Annotation>, Annotation>());
-      container = new MockManagerImpl(null);
-   }
-   
    @Test @SpecAssertion(section="2.7.2")
    public void testSingleStereotype()
    {
@@ -53,7 +38,7 @@
    @Test
    public void testStateless()
    {
-      EnterpriseComponentModel<Lion> lion = new EnterpriseComponentModel<Lion>(new SimpleAnnotatedType<Lion>(Lion.class), emptyAnnotatedItem, container);
+      EnterpriseComponentModel<Lion> lion = new EnterpriseComponentModel<Lion>(new SimpleAnnotatedType<Lion>(Lion.class), getEmptyAnnotatedItem(Lion.class), manager);
       assert lion.getScopeType().equals(Dependent.class);
       Reflections.annotationSetMatches(lion.getBindingTypes(), Current.class);
       assert lion.getName().equals("lion");
@@ -66,7 +51,7 @@
       Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
       AnnotatedType annotatedItem = new SimpleAnnotatedType(Giraffe.class, annotations);
       
-      EnterpriseComponentModel<Giraffe> giraffe = new EnterpriseComponentModel<Giraffe>(new SimpleAnnotatedType(Giraffe.class), annotatedItem, container);
+      EnterpriseComponentModel<Giraffe> giraffe = new EnterpriseComponentModel<Giraffe>(new SimpleAnnotatedType(Giraffe.class), annotatedItem, manager);
       assert giraffe.getScopeType().equals(Dependent.class);
       Reflections.annotationSetMatches(giraffe.getBindingTypes(), Current.class);
    }
@@ -77,7 +62,7 @@
       boolean exception = false;
       try
       {
-         new EnterpriseComponentModel<Bear>(new SimpleAnnotatedType<Bear>(Bear.class), getEmptyAnnotatedItem(Bear.class), container);
+         new EnterpriseComponentModel<Bear>(new SimpleAnnotatedType<Bear>(Bear.class), getEmptyAnnotatedItem(Bear.class), manager);
       }
       catch (Exception e) 
       {
@@ -89,7 +74,7 @@
    // TODO Need EJB3.1 @Test
    public void testSingleton()
    {
-      //ComponentMetaModel<Lion> lion = new ComponentMetaModel<Lion>(new ClassAnnotatedItem(Lion.class), emptyAnnotatedItem, container);
+      //ComponentMetaModel<Lion> lion = new ComponentMetaModel<Lion>(new ClassAnnotatedItem(Lion.class), getEmptyAnnotatedItem(), manager);
       //assert lion.getComponentType().equals(ComponentType.ENTERPRISE);
       //assert lion.getScopeType().annotationType().equals(ApplicationScoped.class);
    }
@@ -97,7 +82,7 @@
    // TODO Need EJB3.1 @Test
    public void testSingletonWithRequestScope()
    {
-      //ComponentMetaModel<Lion> lion = new ComponentMetaModel<Lion>(new ClassAnnotatedItem(Lion.class), emptyAnnotatedItem, container);
+      //ComponentMetaModel<Lion> lion = new ComponentMetaModel<Lion>(new ClassAnnotatedItem(Lion.class), getEmptyAnnotatedItem(), manager);
       //assert lion.getComponentType().equals(ComponentType.ENTERPRISE);
       //assert lion.getScopeType().annotationType().equals(ApplicationScoped.class);
    }
@@ -107,7 +92,7 @@
    public void testStateful()
    {
 
-      AbstractEnterpriseComponentModel<Tiger> tiger = new EnterpriseComponentModel<Tiger>(new SimpleAnnotatedType(Tiger.class), emptyAnnotatedItem, container);
+      AbstractEnterpriseComponentModel<Tiger> tiger = new EnterpriseComponentModel<Tiger>(new SimpleAnnotatedType(Tiger.class), getEmptyAnnotatedItem(Tiger.class), manager);
       Reflections.annotationSetMatches(tiger.getBindingTypes(), Synchronous.class);
       assert tiger.getRemoveMethod().getAnnotatedItem().getDelegate().getName().equals("remove");
       assert tiger.getName() == null;
@@ -118,7 +103,7 @@
    public void testMultipleRemoveMethodsWithDestroys()
    {
 
-      AbstractEnterpriseComponentModel<Elephant> elephant = new EnterpriseComponentModel<Elephant>(new SimpleAnnotatedType(Elephant.class), emptyAnnotatedItem, container);
+      AbstractEnterpriseComponentModel<Elephant> elephant = new EnterpriseComponentModel<Elephant>(new SimpleAnnotatedType(Elephant.class), getEmptyAnnotatedItem(Elephant.class), manager);
       assert elephant.getRemoveMethod().getAnnotatedItem().getDelegate().getName().equals("remove2");
    }
    
@@ -129,7 +114,7 @@
       boolean exception = false;
       try
       {
-         new EnterpriseComponentModel<Puma>(new SimpleAnnotatedType(Puma.class), emptyAnnotatedItem, container);
+         new EnterpriseComponentModel<Puma>(new SimpleAnnotatedType(Puma.class), getEmptyAnnotatedItem(Puma.class), manager);
       }
       catch (Exception e) 
       {
@@ -145,7 +130,7 @@
       boolean exception = false;
       try
       {
-         new EnterpriseComponentModel<Cougar>(new SimpleAnnotatedType(Cougar.class), emptyAnnotatedItem, container);
+         new EnterpriseComponentModel<Cougar>(new SimpleAnnotatedType(Cougar.class), getEmptyAnnotatedItem(Cougar.class), manager);
       }
       catch (Exception e) 
       {
@@ -161,7 +146,7 @@
       boolean exception = false;
       try
       {
-         new EnterpriseComponentModel<Cheetah>(new SimpleAnnotatedType(Cheetah.class), emptyAnnotatedItem, container);
+         new EnterpriseComponentModel<Cheetah>(new SimpleAnnotatedType(Cheetah.class), getEmptyAnnotatedItem(Cheetah.class), manager);
       }
       catch (Exception e) 
       {
@@ -175,7 +160,7 @@
    public void testRemoveMethodWithDefaultBinding()
    {
 
-      AbstractEnterpriseComponentModel<Panther> panther = new EnterpriseComponentModel<Panther>(new SimpleAnnotatedType<Panther>(Panther.class), emptyAnnotatedItem, container);
+      AbstractEnterpriseComponentModel<Panther> panther = new EnterpriseComponentModel<Panther>(new SimpleAnnotatedType<Panther>(Panther.class), getEmptyAnnotatedItem(Panther.class), manager);
       
       assert panther.getRemoveMethod().getAnnotatedItem().getDelegate().getName().equals("remove");
       assert panther.getRemoveMethod().getParameters().size() == 1;
@@ -188,7 +173,7 @@
    @Test
    public void testMessageDriven()
    {
-      AbstractEnterpriseComponentModel<Leopard> leopard = new EnterpriseComponentModel<Leopard>(new SimpleAnnotatedType(Leopard.class), emptyAnnotatedItem, container);
+      AbstractEnterpriseComponentModel<Leopard> leopard = new EnterpriseComponentModel<Leopard>(new SimpleAnnotatedType(Leopard.class), getEmptyAnnotatedItem(Leopard.class), manager);
       Reflections.annotationSetMatches(leopard.getBindingTypes(), Current.class);
    }
 

Deleted: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectableTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectableTest.java	2008-10-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectableTest.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -1,210 +0,0 @@
-package org.jboss.webbeans.test;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.webbeans.AnnotationLiteral;
-import javax.webbeans.Current;
-import javax.webbeans.TypeLiteral;
-import javax.webbeans.manager.Bean;
-
-import org.jboss.webbeans.BeanImpl;
-import org.jboss.webbeans.ResolutionManager;
-import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
-import org.jboss.webbeans.injectable.InjectableField;
-import org.jboss.webbeans.introspector.SimpleAnnotatedType;
-import org.jboss.webbeans.model.SimpleComponentModel;
-import org.jboss.webbeans.test.annotations.Whitefish;
-import org.jboss.webbeans.test.bindings.ChunkyAnnotationLiteral;
-import org.jboss.webbeans.test.components.Animal;
-import org.jboss.webbeans.test.components.Cod;
-import org.jboss.webbeans.test.components.Farmer;
-import org.jboss.webbeans.test.components.FishFarm;
-import org.jboss.webbeans.test.components.Haddock;
-import org.jboss.webbeans.test.components.Plaice;
-import org.jboss.webbeans.test.components.Salmon;
-import org.jboss.webbeans.test.components.ScottishFish;
-import org.jboss.webbeans.test.components.ScottishFishFarmer;
-import org.jboss.webbeans.test.components.SeaBass;
-import org.jboss.webbeans.test.components.Sole;
-import org.jboss.webbeans.test.components.Tuna;
-import org.jboss.webbeans.util.Reflections;
-import org.testng.annotations.Test;
-
-public class InjectableTest extends AbstractTest
-{
-
-   @SuppressWarnings("unchecked")
-   @Test
-   public void testInjectableField() throws Exception
-   {
-      InjectableField<Tuna> tuna = new InjectableField<Tuna>(FishFarm.class.getDeclaredField("tuna"));
-      assert tuna.getAnnotatedItem().getType().isAssignableFrom(Tuna.class);
-      assert tuna.getBindingTypes().size() == 1;
-      assert Reflections.annotationSetMatches(tuna.getBindingTypes(), Current.class);
-      assert tuna.getType().isAssignableFrom(Tuna.class);
-   }
-   
-   @Test
-   public void testSingleApiTypeWithCurrent() throws Exception
-   {
-      InjectableField<Tuna> tunaField = new InjectableField<Tuna>(FishFarm.class.getDeclaredField("tuna"));
-      Bean<Tuna> tunaBean = new BeanImpl<Tuna>(new SimpleComponentModel<Tuna>(new SimpleAnnotatedType<Tuna>(Tuna.class), getEmptyAnnotatedItem(Tuna.class), super.manager), manager);
-      Set<Bean<?>> beans = new HashSet<Bean<?>>();
-      beans.add(tunaBean);
-      Set<Bean<?>> possibleTargets = tunaField.getMatchingBeans(beans);
-      assert possibleTargets.size() == 1;
-      assert possibleTargets.contains(tunaBean);
-   }
-   
-   @Test
-   public void testOneBindingType() throws Exception
-   {
-      InjectableField<ScottishFish> whiteScottishFishField = new InjectableField<ScottishFish>(FishFarm.class.getDeclaredField("whiteScottishFish"));
-      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
-      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
-      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
-      Set<Bean<?>> beans = new HashSet<Bean<?>>();
-      beans.add(codBean);
-      beans.add(salmonBean);
-      beans.add(soleBean);
-      Set<Bean<?>> possibleTargets = whiteScottishFishField.getMatchingBeans(beans);
-      assert possibleTargets.size() == 2;
-      assert possibleTargets.contains(codBean);
-      assert possibleTargets.contains(soleBean);
-   }
-   
-   @Test
-   public void testABindingType() throws Exception
-   {
-      InjectableField<Animal> whiteChunkyFishField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("realChunkyWhiteFish"));
-      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
-      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
-      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
-      Set<Bean<?>> beans = new HashSet<Bean<?>>();
-      beans.add(codBean);
-      beans.add(salmonBean);
-      beans.add(soleBean);
-      Set<Bean<?>> possibleTargets = whiteChunkyFishField.getMatchingBeans(beans);
-      assert possibleTargets.size() == 1;
-      assert possibleTargets.contains(codBean);
-   }
-   
-   @Test
-   public void testMultipleApiTypeWithCurrent() throws Exception
-   {
-      InjectableField<Animal> animalField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("animal"));
-      Bean<SeaBass> seaBassBean = new BeanImpl<SeaBass>(new SimpleComponentModel<SeaBass>(new SimpleAnnotatedType<SeaBass>(SeaBass.class), getEmptyAnnotatedItem(SeaBass.class), super.manager), manager);
-      Bean<Haddock> haddockBean = new BeanImpl<Haddock>(new SimpleComponentModel<Haddock>(new SimpleAnnotatedType<Haddock>(Haddock.class), getEmptyAnnotatedItem(Haddock.class), super.manager), manager);
-      Set<Bean<?>> beans = new HashSet<Bean<?>>();
-      beans.add(seaBassBean);
-      beans.add(haddockBean);
-      Set<Bean<?>> possibleTargets = animalField.getMatchingBeans(beans);
-      assert possibleTargets.size() == 2;
-      assert possibleTargets.contains(seaBassBean);
-      assert possibleTargets.contains(haddockBean);
-   }
-   
-   @Test
-   public void testResolveByType() throws Exception
-   {
-      InjectableField<Animal> realChunkyWhiteFishField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("realChunkyWhiteFish"));
-      InjectableField<Animal> animalField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("animal"));
-      InjectableField<ScottishFish> scottishFishField = new InjectableField<ScottishFish>(FishFarm.class.getDeclaredField("whiteScottishFish"));
-      InjectableField<Tuna> tunaField = new InjectableField<Tuna>(FishFarm.class.getDeclaredField("tuna"));
-      
-      Bean<Tuna> tunaBean = new BeanImpl<Tuna>(new SimpleComponentModel<Tuna>(new SimpleAnnotatedType<Tuna>(Tuna.class), getEmptyAnnotatedItem(Tuna.class), super.manager), manager);
-      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
-      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
-      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
-      Bean<SeaBass> seaBassBean = new BeanImpl<SeaBass>(new SimpleComponentModel<SeaBass>(new SimpleAnnotatedType<SeaBass>(SeaBass.class), getEmptyAnnotatedItem(SeaBass.class), super.manager), manager);
-      Bean<Haddock> haddockBean = new BeanImpl<Haddock>(new SimpleComponentModel<Haddock>(new SimpleAnnotatedType<Haddock>(Haddock.class), getEmptyAnnotatedItem(Haddock.class), super.manager), manager);
-      
-      manager.addBean(tunaBean);
-      manager.addBean(codBean);
-      manager.addBean(salmonBean);
-      manager.addBean(soleBean);
-      manager.addBean(haddockBean);
-      manager.addBean(seaBassBean);
-      
-      ResolutionManager resolutionManager = manager.getResolutionManager();
-      resolutionManager.addInjectionPoint(realChunkyWhiteFishField);
-      resolutionManager.addInjectionPoint(animalField);
-      resolutionManager.addInjectionPoint(scottishFishField);
-      resolutionManager.addInjectionPoint(tunaField);
-      
-      assert manager.resolveByType(Tuna.class, new CurrentAnnotationLiteral()).size() == 1;
-      assert manager.resolveByType(Tuna.class, new CurrentAnnotationLiteral()).contains(tunaBean);
-      
-      assert manager.resolveByType(Tuna.class).size() == 1;
-      assert manager.resolveByType(Tuna.class).contains(tunaBean);
-      
-      assert manager.resolveByType(Animal.class, new CurrentAnnotationLiteral()).size() == 3;
-      assert manager.resolveByType(Animal.class, new CurrentAnnotationLiteral()).contains(salmonBean);
-      assert manager.resolveByType(Animal.class, new CurrentAnnotationLiteral()).contains(seaBassBean);
-      assert manager.resolveByType(Animal.class, new CurrentAnnotationLiteral()).contains(haddockBean);
-      
-      assert manager.resolveByType(Animal.class, new ChunkyAnnotationLiteral() {
-
-         public boolean realChunky()
-         {
-            return true;
-         }
-         
-      }, new AnnotationLiteral<Whitefish>() {}).size() == 1;
-      assert manager.resolveByType(Animal.class, new ChunkyAnnotationLiteral() {
-
-         public boolean realChunky()
-         {
-            return true;
-         }
-         
-      }, new AnnotationLiteral<Whitefish>() {}).contains(codBean);
-      
-      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).size() == 2;
-      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).contains(codBean);
-      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).contains(soleBean);
-      
-   }
-   
-   @Test
-   public void testResolveByTypeWithTypeParameter() throws Exception
-   {
-      InjectableField<Farmer<ScottishFish>> scottishFishFarmerField = new InjectableField<Farmer<ScottishFish>>(FishFarm.class.getDeclaredField("scottishFishFarmer"));
-      
-      Bean<ScottishFishFarmer> scottishFishFarmerBean = new BeanImpl<ScottishFishFarmer>(new SimpleComponentModel<ScottishFishFarmer>(new SimpleAnnotatedType<ScottishFishFarmer>(ScottishFishFarmer.class), getEmptyAnnotatedItem(ScottishFishFarmer.class), super.manager), manager);
-      Bean<Farmer> farmerBean = new BeanImpl<Farmer>(new SimpleComponentModel<Farmer>(new SimpleAnnotatedType<Farmer>(Farmer.class), getEmptyAnnotatedItem(Farmer.class), super.manager), manager);
-      
-      manager.addBean(scottishFishFarmerBean);
-      manager.addBean(farmerBean);
-      
-      ResolutionManager resolutionManager = manager.getResolutionManager();
-      resolutionManager.addInjectionPoint(scottishFishFarmerField);
-      
-      assert manager.resolveByType(new TypeLiteral<Farmer<ScottishFish>>(){}).size() == 1;
-      assert manager.resolveByType(new TypeLiteral<Farmer<ScottishFish>>(){}).contains(scottishFishFarmerBean);
-   }
-   
-   @Test
-   public void testOnlyHighestEnabledPreecedenceWebBeansResolved() throws Exception
-   {
-      InjectableField<Animal> whiteFishField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("whiteFish"));
-      
-      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
-      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
-      Bean<Plaice> plaiceBean = new BeanImpl<Plaice>(new SimpleComponentModel<Plaice>(new SimpleAnnotatedType<Plaice>(Plaice.class), getEmptyAnnotatedItem(Plaice.class), super.manager), manager);
-      
-      
-      manager.addBean(plaiceBean);
-      manager.addBean(codBean);
-      manager.addBean(soleBean);
-      
-      ResolutionManager resolutionManager = manager.getResolutionManager();
-      resolutionManager.addInjectionPoint(whiteFishField);
-
-      assert manager.resolveByType(Animal.class, new AnnotationLiteral<Whitefish>() {}).size() == 1;
-      assert manager.resolveByType(Animal.class, new AnnotationLiteral<Whitefish>() {}).contains(plaiceBean);
-      
-   }
-      
-}

Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InstantiationByNameTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InstantiationByNameTest.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InstantiationByNameTest.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,54 @@
+package org.jboss.webbeans.test;
+
+import javax.webbeans.AmbiguousDependencyException;
+import javax.webbeans.UnsatisfiedDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.BeanImpl;
+import org.jboss.webbeans.ResolutionManager;
+import org.jboss.webbeans.injectable.InjectableField;
+import org.jboss.webbeans.introspector.SimpleAnnotatedType;
+import org.jboss.webbeans.model.SimpleComponentModel;
+import org.jboss.webbeans.test.components.Cod;
+import org.jboss.webbeans.test.components.FishFarm;
+import org.jboss.webbeans.test.components.Salmon;
+import org.jboss.webbeans.test.components.ScottishFish;
+import org.jboss.webbeans.test.components.Sole;
+import org.testng.annotations.Test;
+
+public class InstantiationByNameTest extends AbstractTest
+{
+   
+   @Test(expectedExceptions=AmbiguousDependencyException.class)
+   public void testAmbiguousDependencies() throws Exception
+   {
+      InjectableField<ScottishFish> whiteScottishFishField = new InjectableField<ScottishFish>(FishFarm.class.getDeclaredField("whiteScottishFish"));
+      Bean<Cod> plaiceBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
+      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
+      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
+      manager.addBean(plaiceBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      
+      ResolutionManager resolutionManager = manager.getResolutionManager();
+      resolutionManager.addInjectionPoint(whiteScottishFishField);
+      
+      manager.getInstanceByName("whitefish");
+   }
+   
+   @Test(expectedExceptions=UnsatisfiedDependencyException.class)
+   public void testUnsatisfiedDependencies() throws Exception
+   {
+      InjectableField<ScottishFish> whiteScottishFishField = new InjectableField<ScottishFish>(FishFarm.class.getDeclaredField("whiteScottishFish"));
+      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
+      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      
+      ResolutionManager resolutionManager = manager.getResolutionManager();
+      resolutionManager.addInjectionPoint(whiteScottishFishField);
+      
+      manager.getInstanceByName("foo");
+   }
+   
+}


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

Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InstantiationByTypeTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InstantiationByTypeTest.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InstantiationByTypeTest.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,76 @@
+package org.jboss.webbeans.test;
+
+import javax.webbeans.AmbiguousDependencyException;
+import javax.webbeans.AnnotationLiteral;
+import javax.webbeans.UnproxyableDependencyException;
+import javax.webbeans.UnsatisfiedDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.BeanImpl;
+import org.jboss.webbeans.ResolutionManager;
+import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
+import org.jboss.webbeans.injectable.InjectableField;
+import org.jboss.webbeans.introspector.SimpleAnnotatedType;
+import org.jboss.webbeans.model.SimpleComponentModel;
+import org.jboss.webbeans.test.annotations.Whitefish;
+import org.jboss.webbeans.test.components.Cod;
+import org.jboss.webbeans.test.components.FishFarm;
+import org.jboss.webbeans.test.components.Plaice;
+import org.jboss.webbeans.test.components.Salmon;
+import org.jboss.webbeans.test.components.ScottishFish;
+import org.jboss.webbeans.test.components.Sole;
+import org.jboss.webbeans.test.components.Tuna;
+import org.jboss.webbeans.test.components.broken.PlaiceFarm;
+import org.testng.annotations.Test;
+
+public class InstantiationByTypeTest extends AbstractTest
+{
+   
+   @Test(expectedExceptions=AmbiguousDependencyException.class)
+   public void testAmbiguousDependencies() throws Exception
+   {
+      InjectableField<ScottishFish> whiteScottishFishField = new InjectableField<ScottishFish>(FishFarm.class.getDeclaredField("whiteScottishFish"));
+      Bean<Cod> plaiceBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
+      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
+      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
+      manager.addBean(plaiceBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      
+      ResolutionManager resolutionManager = manager.getResolutionManager();
+      resolutionManager.addInjectionPoint(whiteScottishFishField);
+      
+      manager.getInstanceByType(ScottishFish.class, new AnnotationLiteral<Whitefish>(){});
+   }
+   
+   @Test(expectedExceptions=UnsatisfiedDependencyException.class)
+   public void testUnsatisfiedDependencies() throws Exception
+   {
+      InjectableField<ScottishFish> whiteScottishFishField = new InjectableField<ScottishFish>(FishFarm.class.getDeclaredField("whiteScottishFish"));
+      Bean<Cod> plaiceBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
+      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
+      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
+      manager.addBean(plaiceBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      
+      ResolutionManager resolutionManager = manager.getResolutionManager();
+      resolutionManager.addInjectionPoint(whiteScottishFishField);
+      
+      manager.getInstanceByType(Tuna.class, new CurrentAnnotationLiteral());
+   }
+   
+   @Test(expectedExceptions=UnproxyableDependencyException.class)
+   public void testUnproxyableDependencies() throws Exception
+   {
+      InjectableField<Plaice> plaiceField = new InjectableField<Plaice>(PlaiceFarm.class.getDeclaredField("plaice"));
+      Bean<Plaice> plaiceBean = new BeanImpl<Plaice>(new SimpleComponentModel<Plaice>(new SimpleAnnotatedType<Plaice>(Plaice.class), getEmptyAnnotatedItem(Plaice.class), super.manager), manager);
+      manager.addBean(plaiceBean);
+      
+      ResolutionManager resolutionManager = manager.getResolutionManager();
+      resolutionManager.addInjectionPoint(plaiceField);
+      
+      manager.getInstanceByType(Plaice.class, new AnnotationLiteral<Whitefish>(){});
+   }
+   
+}


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

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NameBasedResolutionTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NameBasedResolutionTest.java	2008-10-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NameBasedResolutionTest.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -44,7 +44,7 @@
       
       manager.addBean(plaiceBean);
       
-      assert manager.resolveByName("whitefish").size() == 1; 
+      assert manager.resolveByName("whitefish").size() == 1;
       assert manager.resolveByName("whitefish").contains(plaiceBean);
    }
    

Copied: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/TypeSafeResolutionTest.java (from rev 144, ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/InjectableTest.java)
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/TypeSafeResolutionTest.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/TypeSafeResolutionTest.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,210 @@
+package org.jboss.webbeans.test;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.webbeans.AnnotationLiteral;
+import javax.webbeans.Current;
+import javax.webbeans.TypeLiteral;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.BeanImpl;
+import org.jboss.webbeans.ResolutionManager;
+import org.jboss.webbeans.bindings.CurrentAnnotationLiteral;
+import org.jboss.webbeans.injectable.InjectableField;
+import org.jboss.webbeans.introspector.SimpleAnnotatedType;
+import org.jboss.webbeans.model.SimpleComponentModel;
+import org.jboss.webbeans.test.annotations.Whitefish;
+import org.jboss.webbeans.test.bindings.ChunkyAnnotationLiteral;
+import org.jboss.webbeans.test.components.Animal;
+import org.jboss.webbeans.test.components.Cod;
+import org.jboss.webbeans.test.components.Farmer;
+import org.jboss.webbeans.test.components.FishFarm;
+import org.jboss.webbeans.test.components.Haddock;
+import org.jboss.webbeans.test.components.Plaice;
+import org.jboss.webbeans.test.components.Salmon;
+import org.jboss.webbeans.test.components.ScottishFish;
+import org.jboss.webbeans.test.components.ScottishFishFarmer;
+import org.jboss.webbeans.test.components.SeaBass;
+import org.jboss.webbeans.test.components.Sole;
+import org.jboss.webbeans.test.components.Tuna;
+import org.jboss.webbeans.util.Reflections;
+import org.testng.annotations.Test;
+
+public class TypeSafeResolutionTest extends AbstractTest
+{
+
+   @SuppressWarnings("unchecked")
+   @Test
+   public void testInjectableField() throws Exception
+   {
+      InjectableField<Tuna> tuna = new InjectableField<Tuna>(FishFarm.class.getDeclaredField("tuna"));
+      assert tuna.getAnnotatedItem().getType().isAssignableFrom(Tuna.class);
+      assert tuna.getBindingTypes().size() == 1;
+      assert Reflections.annotationSetMatches(tuna.getBindingTypes(), Current.class);
+      assert tuna.getType().isAssignableFrom(Tuna.class);
+   }
+   
+   @Test
+   public void testSingleApiTypeWithCurrent() throws Exception
+   {
+      InjectableField<Tuna> tunaField = new InjectableField<Tuna>(FishFarm.class.getDeclaredField("tuna"));
+      Bean<Tuna> tunaBean = new BeanImpl<Tuna>(new SimpleComponentModel<Tuna>(new SimpleAnnotatedType<Tuna>(Tuna.class), getEmptyAnnotatedItem(Tuna.class), super.manager), manager);
+      Set<Bean<?>> beans = new HashSet<Bean<?>>();
+      beans.add(tunaBean);
+      Set<Bean<?>> possibleTargets = tunaField.getMatchingBeans(beans);
+      assert possibleTargets.size() == 1;
+      assert possibleTargets.contains(tunaBean);
+   }
+   
+   @Test
+   public void testOneBindingType() throws Exception
+   {
+      InjectableField<ScottishFish> whiteScottishFishField = new InjectableField<ScottishFish>(FishFarm.class.getDeclaredField("whiteScottishFish"));
+      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
+      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
+      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
+      Set<Bean<?>> beans = new HashSet<Bean<?>>();
+      beans.add(codBean);
+      beans.add(salmonBean);
+      beans.add(soleBean);
+      Set<Bean<?>> possibleTargets = whiteScottishFishField.getMatchingBeans(beans);
+      assert possibleTargets.size() == 2;
+      assert possibleTargets.contains(codBean);
+      assert possibleTargets.contains(soleBean);
+   }
+   
+   @Test
+   public void testABindingType() throws Exception
+   {
+      InjectableField<Animal> whiteChunkyFishField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("realChunkyWhiteFish"));
+      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
+      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
+      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
+      Set<Bean<?>> beans = new HashSet<Bean<?>>();
+      beans.add(codBean);
+      beans.add(salmonBean);
+      beans.add(soleBean);
+      Set<Bean<?>> possibleTargets = whiteChunkyFishField.getMatchingBeans(beans);
+      assert possibleTargets.size() == 1;
+      assert possibleTargets.contains(codBean);
+   }
+   
+   @Test
+   public void testMultipleApiTypeWithCurrent() throws Exception
+   {
+      InjectableField<Animal> animalField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("animal"));
+      Bean<SeaBass> seaBassBean = new BeanImpl<SeaBass>(new SimpleComponentModel<SeaBass>(new SimpleAnnotatedType<SeaBass>(SeaBass.class), getEmptyAnnotatedItem(SeaBass.class), super.manager), manager);
+      Bean<Haddock> haddockBean = new BeanImpl<Haddock>(new SimpleComponentModel<Haddock>(new SimpleAnnotatedType<Haddock>(Haddock.class), getEmptyAnnotatedItem(Haddock.class), super.manager), manager);
+      Set<Bean<?>> beans = new HashSet<Bean<?>>();
+      beans.add(seaBassBean);
+      beans.add(haddockBean);
+      Set<Bean<?>> possibleTargets = animalField.getMatchingBeans(beans);
+      assert possibleTargets.size() == 2;
+      assert possibleTargets.contains(seaBassBean);
+      assert possibleTargets.contains(haddockBean);
+   }
+   
+   @Test
+   public void testResolveByType() throws Exception
+   {
+      InjectableField<Animal> realChunkyWhiteFishField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("realChunkyWhiteFish"));
+      InjectableField<Animal> animalField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("animal"));
+      InjectableField<ScottishFish> scottishFishField = new InjectableField<ScottishFish>(FishFarm.class.getDeclaredField("whiteScottishFish"));
+      InjectableField<Tuna> tunaField = new InjectableField<Tuna>(FishFarm.class.getDeclaredField("tuna"));
+      
+      Bean<Tuna> tunaBean = new BeanImpl<Tuna>(new SimpleComponentModel<Tuna>(new SimpleAnnotatedType<Tuna>(Tuna.class), getEmptyAnnotatedItem(Tuna.class), super.manager), manager);
+      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
+      Bean<Salmon> salmonBean = new BeanImpl<Salmon>(new SimpleComponentModel<Salmon>(new SimpleAnnotatedType<Salmon>(Salmon.class), getEmptyAnnotatedItem(Salmon.class), super.manager), manager);
+      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
+      Bean<SeaBass> seaBassBean = new BeanImpl<SeaBass>(new SimpleComponentModel<SeaBass>(new SimpleAnnotatedType<SeaBass>(SeaBass.class), getEmptyAnnotatedItem(SeaBass.class), super.manager), manager);
+      Bean<Haddock> haddockBean = new BeanImpl<Haddock>(new SimpleComponentModel<Haddock>(new SimpleAnnotatedType<Haddock>(Haddock.class), getEmptyAnnotatedItem(Haddock.class), super.manager), manager);
+      
+      manager.addBean(tunaBean);
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      manager.addBean(haddockBean);
+      manager.addBean(seaBassBean);
+      
+      ResolutionManager resolutionManager = manager.getResolutionManager();
+      resolutionManager.addInjectionPoint(realChunkyWhiteFishField);
+      resolutionManager.addInjectionPoint(animalField);
+      resolutionManager.addInjectionPoint(scottishFishField);
+      resolutionManager.addInjectionPoint(tunaField);
+      
+      assert manager.resolveByType(Tuna.class, new CurrentAnnotationLiteral()).size() == 1;
+      assert manager.resolveByType(Tuna.class, new CurrentAnnotationLiteral()).contains(tunaBean);
+      
+      assert manager.resolveByType(Tuna.class).size() == 1;
+      assert manager.resolveByType(Tuna.class).contains(tunaBean);
+      
+      assert manager.resolveByType(Animal.class, new CurrentAnnotationLiteral()).size() == 3;
+      assert manager.resolveByType(Animal.class, new CurrentAnnotationLiteral()).contains(salmonBean);
+      assert manager.resolveByType(Animal.class, new CurrentAnnotationLiteral()).contains(seaBassBean);
+      assert manager.resolveByType(Animal.class, new CurrentAnnotationLiteral()).contains(haddockBean);
+      
+      assert manager.resolveByType(Animal.class, new ChunkyAnnotationLiteral() {
+
+         public boolean realChunky()
+         {
+            return true;
+         }
+         
+      }, new AnnotationLiteral<Whitefish>() {}).size() == 1;
+      assert manager.resolveByType(Animal.class, new ChunkyAnnotationLiteral() {
+
+         public boolean realChunky()
+         {
+            return true;
+         }
+         
+      }, new AnnotationLiteral<Whitefish>() {}).contains(codBean);
+      
+      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).size() == 2;
+      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).contains(codBean);
+      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).contains(soleBean);
+      
+   }
+   
+   @Test
+   public void testResolveByTypeWithTypeParameter() throws Exception
+   {
+      InjectableField<Farmer<ScottishFish>> scottishFishFarmerField = new InjectableField<Farmer<ScottishFish>>(FishFarm.class.getDeclaredField("scottishFishFarmer"));
+      
+      Bean<ScottishFishFarmer> scottishFishFarmerBean = new BeanImpl<ScottishFishFarmer>(new SimpleComponentModel<ScottishFishFarmer>(new SimpleAnnotatedType<ScottishFishFarmer>(ScottishFishFarmer.class), getEmptyAnnotatedItem(ScottishFishFarmer.class), super.manager), manager);
+      Bean<Farmer> farmerBean = new BeanImpl<Farmer>(new SimpleComponentModel<Farmer>(new SimpleAnnotatedType<Farmer>(Farmer.class), getEmptyAnnotatedItem(Farmer.class), super.manager), manager);
+      
+      manager.addBean(scottishFishFarmerBean);
+      manager.addBean(farmerBean);
+      
+      ResolutionManager resolutionManager = manager.getResolutionManager();
+      resolutionManager.addInjectionPoint(scottishFishFarmerField);
+      
+      assert manager.resolveByType(new TypeLiteral<Farmer<ScottishFish>>(){}).size() == 1;
+      assert manager.resolveByType(new TypeLiteral<Farmer<ScottishFish>>(){}).contains(scottishFishFarmerBean);
+   }
+   
+   @Test
+   public void testOnlyHighestEnabledPreecedenceWebBeansResolved() throws Exception
+   {
+      InjectableField<Animal> whiteFishField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("whiteFish"));
+      
+      Bean<Cod> codBean = new BeanImpl<Cod>(new SimpleComponentModel<Cod>(new SimpleAnnotatedType<Cod>(Cod.class), getEmptyAnnotatedItem(Cod.class), super.manager), manager);
+      Bean<Sole> soleBean = new BeanImpl<Sole>(new SimpleComponentModel<Sole>(new SimpleAnnotatedType<Sole>(Sole.class), getEmptyAnnotatedItem(Sole.class), super.manager), manager);
+      Bean<Plaice> plaiceBean = new BeanImpl<Plaice>(new SimpleComponentModel<Plaice>(new SimpleAnnotatedType<Plaice>(Plaice.class), getEmptyAnnotatedItem(Plaice.class), super.manager), manager);
+      
+      
+      manager.addBean(plaiceBean);
+      manager.addBean(codBean);
+      manager.addBean(soleBean);
+      
+      ResolutionManager resolutionManager = manager.getResolutionManager();
+      resolutionManager.addInjectionPoint(whiteFishField);
+
+      assert manager.resolveByType(Animal.class, new AnnotationLiteral<Whitefish>() {}).size() == 1;
+      assert manager.resolveByType(Animal.class, new AnnotationLiteral<Whitefish>() {}).contains(plaiceBean);
+      
+   }
+      
+}


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

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/Plaice.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/Plaice.java	2008-10-25 15:57:11 UTC (rev 147)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/Plaice.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -1,6 +1,7 @@
 package org.jboss.webbeans.test.components;
 
 import javax.webbeans.Named;
+import javax.webbeans.RequestScoped;
 
 import org.jboss.webbeans.test.annotations.AnotherDeploymentType;
 import org.jboss.webbeans.test.annotations.Whitefish;
@@ -8,7 +9,8 @@
 @AnotherDeploymentType
 @Whitefish
 @Named("whitefish")
-public class Plaice implements Animal
+ at RequestScoped
+public final class Plaice implements Animal
 {
 
 }

Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/broken/PlaiceFarm.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/broken/PlaiceFarm.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/broken/PlaiceFarm.java	2008-10-25 18:38:53 UTC (rev 148)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.test.components.broken;
+
+import javax.webbeans.Production;
+
+import org.jboss.webbeans.test.annotations.Whitefish;
+import org.jboss.webbeans.test.components.Plaice;
+
+ at Production
+public class PlaiceFarm
+{
+
+   @SuppressWarnings("unused")
+   @Whitefish
+   private Plaice plaice;
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/broken/PlaiceFarm.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain




More information about the weld-commits mailing list