[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