You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openwebbeans.apache.org by Romain Manni-Bucau <rm...@gmail.com> on 2013/07/11 12:51:56 UTC
Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/sr...
Hi Arne,
this commit broke openejb CDi 1.0 TCKs
basically org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEventTest
is no more passing, any idea?
basically we observes now too much events.
if you want to give a try on openejb just checkout tomee trunk then build
(mvn clean install -pl tck/cdi-embedded -am -Dmaven.test.skip=true) then fo
in tck/cdi-embedded module, update the pom to point to failing.xml testng
config:
<suiteXmlFile>src/test/resources/failing.xml</suiteXmlFile>
and put in this file:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<classes>
<class
name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEventTest"/>
</classes>
</test>
</suite>
then simply run mvn clean install on this module and you'll get the failure
any help is welcomed ;)
*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*
---------- Forwarded message ----------
From: <ar...@apache.org>
Date: 2013/7/11
Subject: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/sr...
To: commits@openwebbeans.apache.org
Author: arne
Date: Wed Jul 10 22:48:58 2013
New Revision: 1502035
URL: http://svn.apache.org/r1502035
Log:
OWB-878: Re-implemented generic handling
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/inject/
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/inject/generic/
- copied from r1502033,
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/generic/
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Foo.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/GenericBeanTest.java
- copied, changed from r1502033,
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/generic/GenericBeanTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/GenericFactory.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/GenericQualifier.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/GenericsTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/util/GenericsUtilTest.java
Removed:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeanTypeSetResolver.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorResolverRules.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/inject/generic/GenericBeanTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/generic/
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/beans/MethodTypeProduces1.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/clazz/ClazzTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/GenericClassTest.java
openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plugin/OpenWebBeansJsfPlugin.java
openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/plugin/OpenWebBeansJsfPlugin.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
Wed Jul 10 22:48:58 2013
@@ -67,7 +67,7 @@ public class AbstractProducerBean<T> ext
@Override
public Class<T> getReturnType()
- {
+ {
return returnType;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
Wed Jul 10 22:48:58 2013
@@ -24,7 +24,6 @@ import java.lang.reflect.Field;
import javax.enterprise.context.spi.CreationalContext;
import org.apache.webbeans.component.spi.ProducerFactory;
-import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
/**
@@ -108,7 +107,7 @@ public class ProducerFieldBean<T> extend
" with passivating scope @%s" +
" must be Serializable";
getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope(),
- ClassUtil.isClassAssignable(Serializable.class,
getReturnType()), errorMessage, producerField.getName(),
+ getReturnType() instanceof Serializable, errorMessage,
producerField.getName(),
getBeanClass().getName(), getScope().getName());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
Wed Jul 10 22:48:58 2013
@@ -25,7 +25,6 @@ import javax.enterprise.context.spi.Crea
import org.apache.webbeans.component.creation.MethodProducerFactory;
import org.apache.webbeans.exception.WebBeansConfigurationException;
-import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
/**
@@ -150,7 +149,7 @@ public class ProducerMethodBean<T> exten
" with passivating scope @%s" +
" must be Serializable";
getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope(),
- ClassUtil.isClassAssignable(Serializable.class,
getReturnType()), errorMessage, creatorMethod.getName(),
getBeanClass().getName(),
+ getReturnType() instanceof Serializable, errorMessage,
creatorMethod.getName(), getBeanClass().getName(),
getScope().getName());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
Wed Jul 10 22:48:58 2013
@@ -29,11 +29,12 @@ import javax.enterprise.inject.spi.Annot
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
+
+import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Constructor;
import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -46,13 +47,12 @@ import org.apache.webbeans.component.Bea
import org.apache.webbeans.component.DecoratorBean;
import org.apache.webbeans.component.WebBeansType;
import org.apache.webbeans.config.OWBLogConst;
-import org.apache.webbeans.config.OwbParametrizedTypeImpl;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.ClassUtil;
-
+import org.apache.webbeans.util.GenericsUtil;
/**
* Bean builder for {@link org.apache.webbeans.component.InterceptorBean}s.
@@ -165,57 +165,15 @@ public class DecoratorBeanBuilder<T>
private void defineDecoratedTypes()
{
- // remove them first to avoid to loop over them
- decoratedTypes.remove(Object.class);
- decoratedTypes.remove(java.io.Serializable.class); /* 8.1 */
-
- Type beanClass = annotatedType.getJavaClass();
- do
- {
- final Class<?> clazz = ClassUtil.getClass(beanClass);
- final Type toRemove;
- if (ClassUtil.isDefinitionContainsTypeVariables(beanClass))
- {
- final OwbParametrizedTypeImpl pt = new
OwbParametrizedTypeImpl(clazz.getDeclaringClass(), clazz);
- final TypeVariable<?>[] tvs = clazz.getTypeParameters();
- for(TypeVariable<?> tv : tvs)
- {
- pt.addTypeArgument(tv);
- }
- toRemove = pt;
- //X TODO generic support setDecoratorGenericType(pt);
- }
- else
- {
- toRemove = beanClass;
- //X TODO generic support
setDecoratorGenericType(beanClass);
- }
-
- final Iterator<Type> iterator = decoratedTypes.iterator();
- while (iterator.hasNext())
- {
- final Type next = iterator.next();
-
- // if raw class is the same and is assignable (generics
handling)
- if (ClassUtil.getClass(next) == clazz &&
ClassUtil.isAssignable(toRemove, next))
- {
- iterator.remove();
- }
- }
-
- beanClass = clazz.getGenericSuperclass();
- } while (beanClass != Object.class);
-
-
+ decoratedTypes.remove(Serializable.class); /* 8.1 */
for (Iterator<Type> i = decoratedTypes.iterator(); i.hasNext(); )
{
Type t = i.next();
- if (t instanceof Class<?> &&
ignoredDecoratorInterfaces.contains(((Class) t).getName()))
+ if (!ClassUtil.getClass(t).isInterface() || (t instanceof
Class<?> && ignoredDecoratorInterfaces.contains(((Class) t).getName())))
{
i.remove();
}
}
-
}
private void defineDelegate(Set<InjectionPoint> injectionPoints)
@@ -258,7 +216,7 @@ public class DecoratorBeanBuilder<T>
}
}
- delegateType = ipFound.getType();
+ delegateType = GenericsUtil.resolveType(ipFound.getType(),
annotatedType.getJavaClass(), ipFound.getMember());
delegateQualifiers = ipFound.getQualifiers();
for (Type decType : decoratedTypes)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
Wed Jul 10 22:48:58 2013
@@ -317,11 +317,11 @@ public abstract class InterceptorBeanBui
{
if (clazz == null)
{
- clazz = annotatedMethod.getDeclaringType().getJavaClass();
+ clazz =
annotatedMethod.getJavaMember().getDeclaringClass();
}
// check for same class -> Exception
- if (alreadyDefined.getDeclaringType().getJavaClass() == clazz)
+ if (alreadyDefined.getJavaMember().getDeclaringClass() ==
clazz)
{
throw new WebBeansConfigurationException("Only one
Interceptor of a certain type is allowed per class, but multiple found in
class "
+
annotatedMethod.getDeclaringType().getJavaClass().getName()
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
Wed Jul 10 22:48:58 2013
@@ -41,7 +41,7 @@ import org.apache.webbeans.exception.Web
import org.apache.webbeans.portable.ProducerMethodProducer;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
-import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
public class MethodProducerFactory<P> implements ProducerFactory<P>
{
@@ -98,7 +98,7 @@ public class MethodProducerFactory<P> im
{
if
(annotatedParameter.isAnnotationPresent(Disposes.class))
{
- if
(!ClassUtil.isAssignable(annotatedParameter.getBaseType(),
producerMethod.getBaseType()))
+ if
(!GenericsUtil.satisfiesDependency(producerMethod.getBaseType(),
annotatedParameter.getBaseType()))
{
continue;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java
Wed Jul 10 22:48:58 2013
@@ -77,7 +77,7 @@ public class ProducerFieldBeansBuilder<T
Set<AnnotatedField<? super T>> annotatedFields =
annotatedType.getFields();
for(AnnotatedField<? super T> annotatedField: annotatedFields)
{
- if(annotatedField.isAnnotationPresent(Produces.class) &&
annotatedField.getDeclaringType().getJavaClass().equals(annotatedType.getJavaClass()))
+ if(annotatedField.isAnnotationPresent(Produces.class) &&
annotatedField.getJavaMember().getDeclaringClass().equals(annotatedType.getJavaClass()))
{
Type genericType = annotatedField.getBaseType();
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
Wed Jul 10 22:48:58 2013
@@ -26,7 +26,7 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
-import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
import org.apache.webbeans.util.WebBeansUtil;
import javax.enterprise.event.Observes;
@@ -77,7 +77,7 @@ public class ProducerMethodBeansBuilder<
{
boolean enterprise =
EnterpriseBeanMarker.class.isInstance(bean);
if(annotatedMethod.isAnnotationPresent(Produces.class) &&
-
(annotatedMethod.getDeclaringType().getJavaClass().equals(annotatedType.getJavaClass())
+
(annotatedMethod.getJavaMember().getDeclaringClass().equals(annotatedType.getJavaClass())
|| (enterprise &&
annotatedType.getJavaClass().isAssignableFrom(annotatedType.getJavaClass()))))
{
checkProducerMethodForDeployment(annotatedMethod);
@@ -126,7 +126,7 @@ public class ProducerMethodBeansBuilder<
boolean found = false;
for (final ProducerMethodBean<?> producer :
producerBeans)
{
- if (ClassUtil.isAssignable(param.getBaseType(),
producer.getCreatorMethod().getGenericReturnType()))
+ if
(GenericsUtil.satisfiesDependency(producer.getCreatorMethod().getGenericReturnType(),
param.getBaseType()))
{
found = true;
break;
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java
Wed Jul 10 22:48:58 2013
@@ -20,9 +20,7 @@ package org.apache.webbeans.config;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
/**
* Custom parametrized type implementation.
@@ -38,30 +36,26 @@ public class OwbParametrizedTypeImpl imp
private final Type rawType;
/**Actual type arguments*/
- private final List<Type> types = new ArrayList<Type>();
+ private final Type[] types;
/**
* New instance.
* @param owner owner
* @param raw raw
*/
- public OwbParametrizedTypeImpl(Type owner, Type raw)
+ public OwbParametrizedTypeImpl(Type owner, Type raw, Type... types)
{
this.owner = owner;
- rawType = raw;
+ this.rawType = raw;
+ this.types = types;
}
@Override
public Type[] getActualTypeArguments()
{
- return types.toArray(new Type[types.size()]);
+ return types.clone();
}
- public void addTypeArgument(Type type)
- {
- types.add(type);
- }
-
@Override
public Type getOwnerType()
{
@@ -82,12 +76,7 @@ public class OwbParametrizedTypeImpl imp
@Override
public int hashCode()
{
- final int prime = 31;
- int result = 1;
- result = prime * result +
Arrays.hashCode(getActualTypeArguments());
- result = prime * result + ((owner == null) ? 0 : owner.hashCode());
- result = prime * result + ((rawType == null) ? 0 :
rawType.hashCode());
- return result;
+ return Arrays.hashCode(types) ^ (owner == null ? 0 :
owner.hashCode()) ^ (rawType == null ? 0 : rawType.hashCode());
}
/* (non-Javadoc)
@@ -96,47 +85,24 @@ public class OwbParametrizedTypeImpl imp
@Override
public boolean equals(Object obj)
{
- if (this == obj)
- {
- return true;
- }
- if (obj == null)
- {
- return false;
- }
- if (getClass() != obj.getClass())
- {
- return false;
- }
- OwbParametrizedTypeImpl other = (OwbParametrizedTypeImpl) obj;
- if (!Arrays.equals(getActualTypeArguments(),
other.getActualTypeArguments()))
- {
- return false;
- }
- if (owner == null)
- {
- if (other.owner != null)
- {
- return false;
- }
- }
- else if (!owner.equals(other.owner))
- {
- return false;
- }
- if (rawType == null)
- {
- if (other.rawType != null)
- {
- return false;
- }
- }
- else if (!rawType.equals(other.rawType))
- {
- return false;
- }
-
- return true;
+ if (this == obj)
+ {
+ return true;
+ }
+ else if (obj instanceof ParameterizedType)
+ {
+ ParameterizedType that = (ParameterizedType) obj;
+ Type thatOwnerType = that.getOwnerType();
+ Type thatRawType = that.getRawType();
+ return (owner == null ? thatOwnerType == null :
owner.equals(thatOwnerType))
+ && (rawType == null ? thatRawType == null :
rawType.equals(thatRawType))
+ && Arrays.equals(types, that.getActualTypeArguments());
+ }
+ else
+ {
+ return false;
+ }
+
}
public String toString()
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
Wed Jul 10 22:48:58 2013
@@ -86,6 +86,7 @@ import org.apache.webbeans.spi.plugins.O
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
import org.apache.webbeans.util.WebBeansUtil;
import org.apache.webbeans.xml.WebBeansXMLConfigurator;
@@ -688,7 +689,7 @@ public class BeanManagerImpl extends Abs
//Check type if bean type is given
if(beanType != null)
{
- if(!isBeanTypeAssignableToGivenType(bean.getTypes(), beanType,
bean instanceof NewBean) && !ClassUtil.isAssignable(bean.getBeanClass(),
beanType))
+ if(!isBeanTypeAssignableToGivenType(bean.getTypes(), beanType,
bean instanceof NewBean) && !GenericsUtil.satisfiesDependency(beanType,
bean.getBeanClass()))
{
throw new IllegalArgumentException("Given bean type : " +
beanType + " is not applicable for the bean instance : " + bean);
}
@@ -747,7 +748,7 @@ public class BeanManagerImpl extends Abs
{
Type beanApiType = itBeanApiTypes.next();
- if(ClassUtil.isAssignable(beanApiType, givenType))
+ if(GenericsUtil.satisfiesDependency(givenType, beanApiType))
{
return true;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
Wed Jul 10 22:48:58 2013
@@ -50,6 +50,7 @@ import org.apache.webbeans.spi.ScannerSe
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
import org.apache.webbeans.util.InjectionExceptionUtil;
import org.apache.webbeans.util.WebBeansUtil;
import static
org.apache.webbeans.util.InjectionExceptionUtil.throwAmbiguousResolutionException;
@@ -500,7 +501,7 @@ public class InjectionResolver
for (Type componentApiType : component.getTypes())
{
- if (ClassUtil.isAssignable(componentApiType,
injectionPointType))
+ if
(GenericsUtil.satisfiesDependency(injectionPointType, componentApiType))
{
resolvedComponents.add(component);
break;
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
Wed Jul 10 22:48:58 2013
@@ -35,6 +35,7 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.GenericsUtil;
public class DecoratorsManager
{
@@ -176,6 +177,7 @@ public class DecoratorsManager
private boolean isDecoratorMatch(Decorator<?> decorator, Set<Type>
apiTypes, Set<Annotation> annotations)
{
+ // 8.3.1
if (!apiTypesMatchDelegateType(decorator, apiTypes))
{
return false;
@@ -218,7 +220,7 @@ public class DecoratorsManager
boolean ok = false;
for (Type apiType : apiTypes)
{
- if
(DecoratorResolverRules.compareType(decorator.getDelegateType(), apiType))
+ if
(GenericsUtil.satisfiesDependency(decorator.getDelegateType(), apiType))
{
ok = true;
break;
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
Wed Jul 10 22:48:58 2013
@@ -324,7 +324,7 @@ public class ObserverMethodImpl<T> imple
annotationManager.getQualifierAnnotations(AnnotationUtil.
asArray(parameter.getAnnotations()));
- InjectionPoint point =
InjectionPointFactory.getPartialInjectionPoint(bean,
parameter.getBaseType(), parameter, bindingTypes);
+ InjectionPoint point =
InjectionPointFactory.getPartialInjectionPoint(bean, parameter,
bindingTypes);
//Get observer parameter instance
@SuppressWarnings("unchecked")
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
Wed Jul 10 22:48:58 2013
@@ -21,7 +21,6 @@ package org.apache.webbeans.inject.impl;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
-import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -131,7 +130,7 @@ public class InjectionPointFactory
}
}
- return new InjectionPointImpl(owner, annotField.getBaseType(),
Arrays.asList(qualifierAnnots), annotField);
+ return new InjectionPointImpl(owner,
Arrays.asList(qualifierAnnots), annotField);
}
public <X> InjectionPoint buildInjectionPoint(Bean<?> owner,
AnnotatedParameter<X> parameter)
@@ -139,7 +138,7 @@ public class InjectionPointFactory
Asserts.assertNotNull(parameter, "parameter parameter can not be
null");
Set<Annotation> anns = parameter.getAnnotations();
Annotation[] qualifierAnnots =
webBeansContext.getAnnotationManager().getQualifierAnnotations(anns.toArray(new
Annotation[anns.size()]));
- return new InjectionPointImpl(owner, parameter.getBaseType(),
Arrays.asList(qualifierAnnots), parameter);
+ return new InjectionPointImpl(owner,
Arrays.asList(qualifierAnnots), parameter);
}
public <X> List<InjectionPoint> buildInjectionPoints(Bean<?> owner,
AnnotatedCallable<X> callable)
@@ -165,9 +164,9 @@ public class InjectionPointFactory
}
}
- public static InjectionPoint getPartialInjectionPoint(Bean<?>
owner,Type type, AnnotatedParameter<?> parameter, Annotation...bindings)
+ public static InjectionPoint getPartialInjectionPoint(Bean<?> owner,
AnnotatedParameter<?> parameter, Annotation...bindings)
{
- return new InjectionPointImpl(owner, type,
Arrays.asList(bindings), parameter);
+ return new InjectionPointImpl(owner, Arrays.asList(bindings),
parameter);
}
private void validateInitializerConstructor(AnnotatedConstructor<?>
constructor)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
Wed Jul 10 22:48:58 2013
@@ -71,15 +71,15 @@ class InjectionPointImpl implements Inje
private boolean delegate;
- InjectionPointImpl(Bean<?> ownerBean, Type type,
Collection<Annotation> qualifiers, AnnotatedField<?> annotatedField)
+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
qualifiers, AnnotatedField<?> annotatedField)
{
- this(ownerBean, type, qualifiers, annotatedField,
+ this(ownerBean, annotatedField.getBaseType(), qualifiers,
annotatedField,
annotatedField.getJavaMember(),
annotatedField.isAnnotationPresent(Delegate.class),
Modifier.isTransient(annotatedField.getJavaMember().getModifiers()));
}
- InjectionPointImpl(Bean<?> ownerBean, Type type,
Collection<Annotation> qualifiers, AnnotatedParameter<?> parameter)
+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
qualifiers, AnnotatedParameter<?> parameter)
{
- this(ownerBean, type, qualifiers, parameter,
parameter.getDeclaringCallable().getJavaMember(),
parameter.isAnnotationPresent(Delegate.class), false);
+ this(ownerBean, parameter.getBaseType(), qualifiers, parameter,
parameter.getDeclaringCallable().getJavaMember(),
parameter.isAnnotationPresent(Delegate.class), false);
}
private InjectionPointImpl(Bean<?> ownerBean, Type type,
Collection<Annotation> qualifiers, Annotated annotated, Member member,
boolean delegate, boolean isTransient)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
Wed Jul 10 22:48:58 2013
@@ -32,6 +32,7 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
/**
* Abstract implementation of the {@link Annotated} contract.
@@ -52,7 +53,7 @@ abstract class AbstractAnnotated impleme
private final WebBeansContext webBeansContext;
/**
- * Createa a new annotated element.
+ * Creates a new annotated element.
*
* @param webBeansContext our WebBeansContext
* @param baseType annotated element type
@@ -142,18 +143,19 @@ abstract class AbstractAnnotated impleme
{
if (typeClosures == null)
{
- initTypeClosures();
+ initTypeClosure();
}
return typeClosures;
}
- private synchronized void initTypeClosures()
+ protected abstract Class<?> getOwningClass();
+ protected abstract Class<?> getDeclaringClass();
+
+ private synchronized void initTypeClosure()
{
if (typeClosures == null)
{
- typeClosures = new HashSet<Type>();
- typeClosures.add(Object.class);
- ClassUtil.setTypeHierarchy(typeClosures, baseType);
+ typeClosures = GenericsUtil.getTypeClosure(baseType,
getOwningClass(), getDeclaringClass());
Set<String> ignoredInterfaces =
webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
for (Iterator<Type> i = typeClosures.iterator(); i.hasNext(); )
{
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java
Wed Jul 10 22:48:58 2013
@@ -42,7 +42,6 @@ abstract class AbstractAnnotatedMember<X
/**Member type*/
protected final Member javaMember;
- @SuppressWarnings("unchecked")
AbstractAnnotatedMember(WebBeansContext webBeansContext, Type
baseType, Member javaMember, AnnotatedType<X> declaringType)
{
super(webBeansContext, baseType);
@@ -83,6 +82,18 @@ abstract class AbstractAnnotatedMember<X
return Modifier.isStatic(javaMember.getModifiers());
}
+ @Override
+ protected Class<?> getOwningClass()
+ {
+ return declaringType.getJavaClass();
+ }
+
+ @Override
+ protected Class<?> getDeclaringClass()
+ {
+ return javaMember.getDeclaringClass();
+ }
+
public String toString()
{
StringBuilder builder = new StringBuilder(super.toString());
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java
Wed Jul 10 22:48:58 2013
@@ -19,6 +19,7 @@
package org.apache.webbeans.portable;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.util.GenericsUtil;
import java.lang.reflect.Constructor;
@@ -43,7 +44,7 @@ public class AnnotatedConstructorImpl<X>
{
super(webBeansContext, javaMember.getDeclaringClass(), javaMember,
declaringType);
setAnnotations(javaMember.getDeclaredAnnotations());
- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
javaMember.getParameterAnnotations());
+
setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.getJavaClass(),
javaMember), javaMember.getParameterAnnotations());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java
Wed Jul 10 22:48:58 2013
@@ -19,6 +19,7 @@
package org.apache.webbeans.portable;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.util.GenericsUtil;
import java.lang.reflect.Field;
@@ -43,7 +44,7 @@ public class AnnotatedFieldImpl<X> exten
*/
AnnotatedFieldImpl(WebBeansContext webBeansContext, Field javaMember,
AnnotatedType<X> declaringType)
{
- super(webBeansContext, javaMember.getGenericType(),
javaMember,declaringType);
+ super(webBeansContext,
GenericsUtil.resolveType(declaringType.getJavaClass(), javaMember),
javaMember,declaringType);
setAnnotations(javaMember.getDeclaredAnnotations());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java
Wed Jul 10 22:48:58 2013
@@ -19,6 +19,7 @@
package org.apache.webbeans.portable;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.util.GenericsUtil;
import java.lang.reflect.Method;
@@ -41,11 +42,11 @@ class AnnotatedMethodImpl<X> extends Abs
* @param declaringType declaring type
* @param javaMember method
*/
- AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
javaMember,AnnotatedType<X> declaringType)
+ AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
javaMember, AnnotatedType<X> declaringType)
{
- super(webBeansContext, javaMember.getGenericReturnType(),
javaMember,declaringType);
+ super(webBeansContext,
GenericsUtil.resolveReturnType(declaringType.getJavaClass(), javaMember),
javaMember,declaringType);
setAnnotations(javaMember.getDeclaredAnnotations());
- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
javaMember.getParameterAnnotations());
+
setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.getJavaClass(),
javaMember), javaMember.getParameterAnnotations());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java
Wed Jul 10 22:48:58 2013
@@ -75,4 +75,16 @@ class AnnotatedParameterImpl<X> extends
return builder.toString();
}
+
+ @Override
+ protected Class<?> getOwningClass()
+ {
+ return declaringCallable.getDeclaringType().getJavaClass();
+ }
+
+ @Override
+ protected Class<?> getDeclaringClass()
+ {
+ return declaringCallable.getJavaMember().getDeclaringClass();
+ }
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
Wed Jul 10 22:48:58 2013
@@ -132,6 +132,18 @@ class AnnotatedTypeImpl<X>
return getState().methods;
}
+ @Override
+ protected Class<?> getOwningClass()
+ {
+ return getJavaClass();
+ }
+
+ @Override
+ protected Class<?> getDeclaringClass()
+ {
+ return getJavaClass();
+ }
+
private State getState()
{
State result = state;
@@ -153,7 +165,6 @@ class AnnotatedTypeImpl<X>
return result;
}
-
private class State
{
@@ -230,12 +241,15 @@ class AnnotatedTypeImpl<X>
if (supertype != null)
{
- fields.addAll(supertype.getFields());
+ for (AnnotatedField<? super X> field:
supertype.getFields())
+ {
+ fields.add(new
AnnotatedFieldImpl<X>(getWebBeansContext(), field.getJavaMember(),
AnnotatedTypeImpl.this));
+ }
for (AnnotatedMethod<? super X> method :
supertype.getMethods())
{
if (!isOverridden(method))
{
- methods.add(method);
+ methods.add(new
AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(),
AnnotatedTypeImpl.this));
}
}
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
Wed Jul 10 22:48:58 2013
@@ -18,14 +18,6 @@
*/
package org.apache.webbeans.util;
-import org.apache.webbeans.config.BeanTypeSetResolver;
-import org.apache.webbeans.exception.WebBeansException;
-import org.apache.webbeans.exception.inject.DefinitionException;
-
-import javax.enterprise.event.Event;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.inject.Provider;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -41,6 +33,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.exception.inject.DefinitionException;
+
/**
* Utility classes with respect to the class operations.
*
@@ -124,21 +121,24 @@ public final class ClassUtil
return clazz.isMemberClass();
}
- public static Class<?> getPrimitiveWrapper(Class<?> clazz)
+ public static boolean isSame(Type type1, Type type2)
{
- Asserts.nullCheckForClass(clazz);
-
- return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
-
+ if ((type1 instanceof Class) && ((Class<?>)type1).isPrimitive())
+ {
+ type1 = PRIMITIVE_TO_WRAPPERS_MAP.get(type1);
+ }
+ if ((type2 instanceof Class) && ((Class<?>)type2).isPrimitive())
+ {
+ type2 = PRIMITIVE_TO_WRAPPERS_MAP.get(type2);
+ }
+ return type1 == type2;
}
- public static Class<?> identityOrGetPrimitiveWrapper(Class<?> clazz)
+ public static Class<?> getPrimitiveWrapper(Class<?> clazz)
{
- if (clazz.isPrimitive())
- {
- return getPrimitiveWrapper(clazz);
- }
- return clazz;
+ Asserts.nullCheckForClass(clazz);
+
+ return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
}
@@ -326,7 +326,6 @@ public final class ClassUtil
return getObjectMethodNames().contains(methodName);
}
-
/**
* Returns true if type is an instance of
<code>ParameterizedType</code>
* else otherwise.
@@ -426,131 +425,6 @@ public final class ClassUtil
}
/**
- * See specification 5.2.3.
- * @param beanType bean type
- * @param requiredType required type
- * @return true if assignable
- */
- public static boolean isAssignable(Type beanType, Type requiredType)
- {
- Asserts.assertNotNull(beanType, "beanType parameter can not be
null");
- Asserts.assertNotNull(requiredType, "requiredType parameter can
not be null");
-
- //Bean and required types are ParametrizedType
- if (beanType instanceof ParameterizedType && requiredType
instanceof ParameterizedType)
- {
- return isAssignableForParametrized((ParameterizedType)
beanType, (ParameterizedType) requiredType);
- }
- //Both type is class type
- else if (beanType instanceof Class && requiredType instanceof
Class)
- {
- Class<?> clzBeanType = (Class<?>)beanType;
- Class<?> clzReqType = (Class<?>)requiredType;
-
- if(clzBeanType.isPrimitive())
- {
- clzBeanType = getPrimitiveWrapper(clzBeanType);
- }
-
- if(clzReqType.isPrimitive())
- {
- clzReqType = getPrimitiveWrapper(clzReqType);
- }
-
- return clzReqType.equals(clzBeanType);
- }
- //Bean type is Parametrized and required type is class type
- else if(beanType instanceof ParameterizedType && requiredType
instanceof Class)
- {
- boolean ok = true;
- ParameterizedType ptBean = (ParameterizedType)beanType;
- Class<?> clazzBeanType =
identityOrGetPrimitiveWrapper((Class<?>)ptBean.getRawType());
- Class<?> clazzReqType =
identityOrGetPrimitiveWrapper((Class<?>)requiredType);
- if(clazzBeanType.equals(clazzReqType))
- {
- Type[] beanTypeArgs = ptBean.getActualTypeArguments();
- for(Type actual : beanTypeArgs)
- {
- if(!ClassUtil.isUnboundedTypeVariable(actual))
- {
- if(actual instanceof Class)
- {
- Class<?> clazz = (Class<?>)actual;
- if(!clazz.equals(Object.class))
- {
- ok = false;
- break;
- }
- }
- else
- {
- ok = false;
- break;
- }
- }
- }
- }
- else
- {
- ok = false;
- }
-
-
- return ok;
- }
- //Bean type is class and required type is parametrized
- else if(beanType instanceof Class && requiredType instanceof
ParameterizedType)
- {
- final Class<?> clazzBeanType = (Class<?>)beanType;
- final ParameterizedType ptReq =
(ParameterizedType)requiredType;
- final Class<?> clazzReqType = (Class<?>)ptReq.getRawType();
- final Type genericSuperClass =
clazzBeanType.getGenericSuperclass();
-
- if (Provider.class.isAssignableFrom(clazzReqType) ||
- Event.class.isAssignableFrom(clazzReqType))
- {
- if (isClassAssignable(clazzReqType, clazzBeanType))
- {
- return true;
- }
- }
- else if (Bean.class.isAssignableFrom(clazzReqType))
- {
- // May be Bean, Interceptor or Decorator and thus must
match directly
- if (clazzReqType.equals(clazzBeanType))
- {
- return true;
- }
- }
- else if (genericSuperClass instanceof ParameterizedType)
- {
- final Type[] params = ((ParameterizedType)
genericSuperClass).getActualTypeArguments();
- final Type[] requiredParams = ((ParameterizedType)
requiredType).getActualTypeArguments();
- if (params.length != requiredParams.length)
- {
- return false;
- }
-
- for (int i = 0; i < params.length; i++)
- {
- if (!isAssignable(params[i], requiredParams[i]))
- {
- return false;
- }
- }
-
- return isClassAssignable(clazzReqType, clazzBeanType);
- }
-
- return false;
- }
- else
- {
- return false;
- }
- }
-
- /**
* Checks that event is applicable
* for the given observer type.
* @param eventType event type
@@ -718,7 +592,13 @@ public final class ClassUtil
ok++;
}
}
-
+ else if (requiredTypeArg instanceof ParameterizedType &&
beanTypeArg instanceof TypeVariable)
+ {
+ if
(checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(beanTypeArg,
requiredTypeArg))
+ {
+ ok++;
+ }
+ }
//Both type is actual type
else if((beanTypeArg instanceof Class) && (requiredTypeArg
instanceof Class))
{
@@ -874,6 +754,7 @@ public final class ClassUtil
Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
+ //TODO respect other bounds
Type tvBound = tvBeanTypeArg.getBounds()[0];
if(tvBound instanceof Class)
@@ -891,6 +772,13 @@ public final class ClassUtil
return true;
}
+
+ public static boolean
checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(Type beanTypeArg,
Type requiredTypeArg)
+ {
+ ParameterizedType requiredType =
(ParameterizedType)requiredTypeArg;
+ //TODO respect parameters of required type
+ return checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg,
requiredType.getRawType());
+ }
public static boolean
checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(Type beanTypeArg, Type
requiredTypeArg)
{
@@ -972,16 +860,6 @@ public final class ClassUtil
}
}
-
- public static Set<Type> setTypeHierarchy(Set<Type> set, Type clazz)
- {
- BeanTypeSetResolver resolver = new BeanTypeSetResolver(clazz);
- resolver.startConfiguration();
- set.addAll(resolver.getHierarchy());
-
- return set;
- }
-
/**
* Return raw class type for given type.
* @param type base type instance
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,625 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.util;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.webbeans.config.OwbParametrizedTypeImpl;
+import org.apache.webbeans.exception.inject.DefinitionException;
+
+/**
+ * Utility classes for generic type operations.
+ */
+public final class GenericsUtil
+{
+ public static boolean satisfiesDependency(Type injectionPointType,
Type beanType)
+ {
+ validate(injectionPointType);
+ if (injectionPointType instanceof TypeVariable ||
injectionPointType instanceof WildcardType || injectionPointType instanceof
GenericArrayType)
+ {
+ throw new DefinitionException("Injection point cannot define
Type Variable " + injectionPointType);
+ }
+ if (beanType instanceof TypeVariable || beanType instanceof
WildcardType || beanType instanceof GenericArrayType)
+ {
+ return isAssignableFrom(injectionPointType, beanType);
+ }
+ else
+ {
+ Type injectionPointRawType = injectionPointType instanceof
ParameterizedType? ((ParameterizedType)injectionPointType).getRawType():
injectionPointType;
+ Type beanRawType = beanType instanceof ParameterizedType?
((ParameterizedType)beanType).getRawType(): beanType;
+
+ return ClassUtil.isSame(injectionPointRawType, beanRawType)?
isAssignableFrom(injectionPointType, beanType): false;
+ }
+ }
+
+ /**
+ * 5.2.3 and 5.2.4
+ */
+ public static boolean isAssignableFrom(Type requiredType, Type
beanType)
+ {
+ if (requiredType instanceof Class)
+ {
+ return isAssignableFrom((Class<?>)requiredType, beanType);
+ }
+ else if (requiredType instanceof ParameterizedType)
+ {
+ return isAssignableFrom((ParameterizedType)requiredType,
beanType);
+ }
+ else if (requiredType instanceof TypeVariable)
+ {
+ return isAssignableFrom((TypeVariable<?>)requiredType,
beanType);
+ }
+ else if (requiredType instanceof GenericArrayType)
+ {
+ return isAssignableFrom((GenericArrayType)requiredType,
beanType);
+ }
+ else if (requiredType instanceof WildcardType)
+ {
+ return isAssignableFrom((WildcardType)requiredType, beanType);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
requiredType.getClass());
+ }
+ }
+
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
Type beanType)
+ {
+ if (beanType instanceof Class)
+ {
+ return isAssignableFrom(injectionPointType,
(Class<?>)beanType);
+ }
+ else if (beanType instanceof TypeVariable)
+ {
+ return isAssignableFrom(injectionPointType,
(TypeVariable<?>)beanType);
+ }
+ else if (beanType instanceof ParameterizedType)
+ {
+ return isAssignableFrom(injectionPointType,
(ParameterizedType)beanType);
+ }
+ else if (beanType instanceof GenericArrayType)
+ {
+ return isAssignableFrom(injectionPointType,
(GenericArrayType)beanType);
+ }
+ else if (beanType instanceof WildcardType)
+ {
+ return isAssignableFrom((Type)injectionPointType,
(WildcardType)beanType);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
injectionPointType.getClass());
+ }
+ }
+
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
Class<?> beanType)
+ {
+ return ClassUtil.isClassAssignable(injectionPointType, beanType);
+ }
+
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
TypeVariable<?> beanType)
+ {
+ for (Type bounds: beanType.getBounds())
+ {
+ if (isAssignableFrom(injectionPointType, bounds))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * CDI Spec. 5.2.4: "A parameterized bean type is considered
assignable to a raw required type
+ * if the raw types are identical and all type parameters of the bean
type are either unbounded type variables or java.lang.Object."
+ */
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
ParameterizedType beanType)
+ {
+ if (beanType.getRawType() != injectionPointType)
+ {
+ return false; //raw types don't match
+ }
+ for (Type typeArgument: beanType.getActualTypeArguments())
+ {
+ if (typeArgument == Object.class)
+ {
+ continue;
+ }
+ if (!(typeArgument instanceof TypeVariable))
+ {
+ return false; //neither object nor type variable
+ }
+ TypeVariable<?> typeVariable = (TypeVariable<?>)typeArgument;
+ for (Type bounds: typeVariable.getBounds())
+ {
+ if (bounds != Object.class)
+ {
+ return false; //bound type variable
+ }
+ }
+ }
+ return true;
+ }
+
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
GenericArrayType beanType)
+ {
+ if (!injectionPointType.isArray())
+ {
+ return false;
+ }
+ return isAssignableFrom(injectionPointType.getComponentType(),
beanType.getGenericComponentType());
+ }
+
+ private static boolean isAssignableFrom(Type injectionPointType,
WildcardType beanType)
+ {
+ for (Type bounds: beanType.getLowerBounds())
+ {
+ if (!isAssignableFrom(bounds, injectionPointType))
+ {
+ return false;
+ }
+ }
+ for (Type bounds: beanType.getUpperBounds())
+ {
+ if (isAssignableFrom(injectionPointType, bounds))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean isAssignableFrom(ParameterizedType
injectionPointType, Type beanType)
+ {
+ if (beanType instanceof Class)
+ {
+ return isAssignableFrom(injectionPointType,
(Class<?>)beanType);
+ }
+ else if (beanType instanceof TypeVariable)
+ {
+ return isAssignableFrom(injectionPointType,
(TypeVariable<?>)beanType);
+ }
+ else if (beanType instanceof ParameterizedType)
+ {
+ return isAssignableFrom(injectionPointType,
(ParameterizedType)beanType);
+ }
+ else if (beanType instanceof WildcardType)
+ {
+ return isAssignableFrom((Type)injectionPointType,
(WildcardType)beanType);
+ }
+ else if (beanType instanceof GenericArrayType)
+ {
+ return false;
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
injectionPointType.getClass());
+ }
+ }
+
+ private static boolean isAssignableFrom(ParameterizedType
injectionPointType, Class<?> beanType)
+ {
+ return isAssignableFrom(injectionPointType.getRawType(), beanType);
+ }
+
+ private static boolean isAssignableFrom(ParameterizedType
injectionPointType, TypeVariable<?> beanType)
+ {
+ for (Type bounds: beanType.getBounds())
+ {
+ if (isAssignableFrom(injectionPointType, bounds))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * CDI Spec. 5.2.4
+ */
+ private static boolean isAssignableFrom(ParameterizedType
injectionPointType, ParameterizedType beanType)
+ {
+ if (injectionPointType.getRawType() != beanType.getRawType())
+ {
+ return false;
+ }
+ Type[] injectionPointTypeArguments =
injectionPointType.getActualTypeArguments();
+ Type[] beanTypeArguments = beanType.getActualTypeArguments();
+ for (int i = 0; i < injectionPointTypeArguments.length; i++)
+ {
+ if (!isAssignableFrom(injectionPointTypeArguments[i],
beanTypeArguments[i]))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static boolean isAssignableFrom(TypeVariable<?>
injectionPointType, Type beanType)
+ {
+ for (Type bounds: injectionPointType.getBounds())
+ {
+ if (!isAssignableFrom(bounds, beanType))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static boolean isAssignableFrom(GenericArrayType
injectionPointType, Type beanType)
+ {
+ throw new UnsupportedOperationException("Not yet implementeds");
+ }
+
+ private static boolean isAssignableFrom(WildcardType
injectionPointType, Type beanType)
+ {
+ for (Type bounds: injectionPointType.getLowerBounds())
+ {
+ if (!isAssignableFrom(beanType, bounds))
+ {
+ return false;
+ }
+ }
+ for (Type bounds: injectionPointType.getUpperBounds())
+ {
+ if (!isAssignableFrom(bounds, beanType))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Resolves the actual type of the specified field for the type
hierarchy specified by the given subclass
+ */
+ public static Type resolveType(Class<?> subclass, Field field)
+ {
+ return resolveType(field.getGenericType(), new
TypeVariableResolver(subclass, field.getDeclaringClass()));
+ }
+
+ /**
+ * Resolves the actual return type of the specified method for the
type hierarchy specified by the given subclass
+ */
+ public static Type resolveReturnType(Class<?> subclass, Method method)
+ {
+ return resolveType(method.getGenericReturnType(), new
TypeVariableResolver(subclass, method.getDeclaringClass()));
+ }
+
+ /**
+ * Resolves the actual parameter types of the specified constructor
for the type hierarchy specified by the given subclass
+ */
+ public static Type[] resolveParameterTypes(Class<?> subclass,
Constructor<?> constructor)
+ {
+ return resolveTypes(constructor.getGenericParameterTypes(), new
TypeVariableResolver(subclass, constructor.getDeclaringClass()));
+ }
+
+ /**
+ * Resolves the actual parameter types of the specified method for the
type hierarchy specified by the given subclass
+ */
+ public static Type[] resolveParameterTypes(Class<?> subclass, Method
method)
+ {
+ return resolveTypes(method.getGenericParameterTypes(), new
TypeVariableResolver(subclass, method.getDeclaringClass()));
+ }
+
+ /**
+ * Resolves the actual type of the specified type for the type
hierarchy specified by the given subclass
+ */
+ public static Type resolveType(Type type, Class<?> subclass, Member
member)
+ {
+ return resolveType(type, new TypeVariableResolver(subclass,
member.getDeclaringClass()));
+ }
+
+ private static Type resolveType(Type type, TypeVariableResolver
resolver)
+ {
+ if (type instanceof Class)
+ {
+ return type;
+ }
+ else if (type instanceof ParameterizedType)
+ {
+ ParameterizedType parameterizedType = (ParameterizedType)type;
+ Type[] resolvedTypes =
resolveTypes(parameterizedType.getActualTypeArguments(), resolver);
+ return new
OwbParametrizedTypeImpl(parameterizedType.getOwnerType(),
parameterizedType.getRawType(), resolvedTypes);
+ }
+ else if (type instanceof TypeVariable)
+ {
+ TypeVariable<?> variable = (TypeVariable<?>)type;
+ return resolver.resolve(variable);
+ }
+ else if (type instanceof WildcardType)
+ {
+ Type[] resolvedTypes = resolveTypes(((WildcardType)
type).getUpperBounds(), resolver);
+ return
resolveType(getMostSpecificType(getRawTypes(resolvedTypes, resolver),
resolvedTypes), resolver);
+ }
+ else if (type instanceof GenericArrayType)
+ {
+ Type componentType =
resolveType(((GenericArrayType)type).getGenericComponentType(), resolver);
+ Class<?> componentClass = getRawType(componentType, resolver);
+ return Array.newInstance(componentClass, 0).getClass();
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
type.getClass().getName());
+ }
+ }
+
+ public static Type[] resolveTypes(Type[] types, TypeVariableResolver
resolution)
+ {
+ Type[] resolvedTypeArguments = new Type[types.length];
+ for (int i = 0; i < types.length; i++)
+ {
+ resolvedTypeArguments[i] = resolveType(types[i], resolution);
+ }
+ return resolvedTypeArguments;
+ }
+
+ public static Set<Type> getTypeClosure(Type type, Class<?>
owningClass, Class<?> declaringClass)
+ {
+ Set<Type> typeClosure = new HashSet<Type>();
+ typeClosure.add(Object.class);
+ fillTypeHierarchy(typeClosure, type, new
TypeVariableResolver(owningClass, declaringClass));
+ return typeClosure;
+ }
+
+ private static void fillTypeHierarchy(Set<Type> set, Type type,
TypeVariableResolver resolver)
+ {
+ if (type == null)
+ {
+ return;
+ }
+ Type resolvedType = GenericsUtil.resolveType(type, resolver);
+ set.add(resolvedType);
+ Class<?> resolvedClass = GenericsUtil.getRawType(resolvedType,
resolver);
+ if (resolvedClass.getSuperclass() != null)
+ {
+ fillTypeHierarchy(set, resolvedClass.getGenericSuperclass(),
resolver.add(resolvedClass));
+ }
+ for (Type interfaceType: resolvedClass.getGenericInterfaces())
+ {
+ fillTypeHierarchy(set, interfaceType,
resolver.add(resolvedClass, interfaceType));
+ }
+ }
+
+ static <T> Class<T> getRawType(Type type, TypeVariableResolver
resolver)
+ {
+ if (type instanceof Class)
+ {
+ return (Class<T>)type;
+ }
+ else if (type instanceof ParameterizedType)
+ {
+ return getRawType(((ParameterizedType) type).getRawType(),
resolver);
+ }
+ else if ((type instanceof TypeVariable) || (type instanceof
WildcardType) || (type instanceof GenericArrayType))
+ {
+ Type resolvedType = resolveType(type, resolver);
+ if (resolvedType instanceof TypeVariable)
+ {
+ TypeVariable<?> variable = (TypeVariable<?>)resolvedType;
+ return
getRawType(resolveType(getRawType(variable.getBounds(), resolver),
resolver), resolver);
+ }
+ else
+ {
+ return getRawType(resolvedType, resolver);
+ }
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
type.getClass().getName());
+ }
+ }
+
+ private static Type getRawType(Type[] types, TypeVariableResolver
resolver)
+ {
+ Class<?>[] rawTypes = getRawTypes(types, resolver);
+ Class<?>[] classTypes = getClassTypes(rawTypes);
+ if (classTypes.length > 0)
+ {
+ return getMostSpecificType(classTypes, types);
+ }
+ else
+ {
+ return getMostSpecificType(rawTypes, types);
+ }
+ }
+
+ private static <T> Class<T>[] getRawTypes(Type[] types,
TypeVariableResolver resolver)
+ {
+ Class<T>[] rawTypes = new Class[types.length];
+ for (int i = 0; i < types.length; i++)
+ {
+ rawTypes[i] = getRawType(types[i], resolver);
+ }
+ return rawTypes;
+ }
+
+ private static Type getMostSpecificType(Class<?>[] types, Type[]
genericTypes)
+ {
+ Class<?> mostSpecificType = types[0];
+ int mostSpecificIndex = 0;
+ for (int i = 0; i < types.length; i++)
+ {
+ if (mostSpecificType.isAssignableFrom(types[i]))
+ {
+ mostSpecificType = types[i];
+ mostSpecificIndex = i;
+ }
+ }
+ return genericTypes[mostSpecificIndex];
+ }
+
+ private static Class<?>[] getClassTypes(Class<?>[] rawTypes)
+ {
+ List<Class<?>> classTypes = new ArrayList<Class<?>>();
+ for (Class<?> rawType : rawTypes)
+ {
+ if (!rawType.isInterface())
+ {
+ classTypes.add(rawType);
+ }
+ }
+ return classTypes.toArray(new Class[classTypes.size()]);
+ }
+
+ private static Type validate(Type type)
+ {
+ if (!(type instanceof Class)
+ && !(type instanceof ParameterizedType)
+ && !(type instanceof TypeVariable)
+ && !(type instanceof GenericArrayType)
+ && !(type instanceof WildcardType))
+ {
+ throw new IllegalArgumentException("Unsupported type " +
type.getClass());
+ }
+ return type;
+ }
+
+ /**
+ * resolves actual types of a TypeVariable for a specific type
hierarchy
+ */
+ private static class TypeVariableResolver
+ {
+ private List<TypeVariableDeclaration> declarations = new
ArrayList<TypeVariableDeclaration>();
+
+ private TypeVariableResolver(List<TypeVariableDeclaration>
implementation)
+ {
+ this.declarations = implementation;
+ }
+
+ public TypeVariableResolver(Class<?> subclass, Class<?>
declaringClass)
+ {
+ declarations.add(new TypeVariableDeclaration(subclass,
subclass.getGenericSuperclass()));
+ while (declaringClass != subclass &&
declaringClass.isAssignableFrom(subclass))
+ {
+ subclass = subclass.getSuperclass();
+ declarations.add(new TypeVariableDeclaration(subclass,
subclass.getGenericSuperclass()));
+ }
+ }
+
+ public Type resolve(TypeVariable<?> variable)
+ {
+ if (declarations.size() < 2)
+ {
+ return getRawType(variable.getBounds(), this);
+ }
+ int hierarchyIndex = declarations.size() - 1;
+ TypeVariableDeclaration typeVariableImplementation =
declarations.get(hierarchyIndex);
+ TypeVariable<?>[] typeParameters =
typeVariableImplementation.getDeclaredTypeParameters();
+ int typeIndex = -1;
+ for (int i = 0; i < typeParameters.length; i++)
+ {
+ if (variable.getName().equals(typeParameters[i].getName()))
+ {
+ typeIndex = i;
+ break;
+ }
+ }
+ if (typeIndex == -1)
+ {
+ // type erasure
+ return Object.class;
+ }
+ TypeVariableDeclaration declaration =
declarations.get(hierarchyIndex - 1);
+ Type genericClass = declaration.getAssignment();
+ if (genericClass instanceof ParameterizedType)
+ {
+ ParameterizedType classType =
(ParameterizedType)genericClass;
+ return
resolveType(classType.getActualTypeArguments()[typeIndex], remove());
+ }
+ else
+ {
+ TypeVariable<?>[] typeVariables =
declaration.getDeclaredTypeParameters();
+ if (typeVariables.length > typeIndex)
+ {
+ return resolveType(typeVariables[typeIndex], remove());
+ }
+ else
+ {
+ return Object.class; //type erasure
+ }
+ }
+ }
+
+ public TypeVariableResolver add(Class<?> type)
+ {
+ return add(type, type.getGenericSuperclass());
+ }
+
+ public TypeVariableResolver add(Class<?> declaringClass, Type
assignment)
+ {
+ List<TypeVariableDeclaration> declarations = new
ArrayList<TypeVariableDeclaration>(this.declarations);
+ declarations.add(new TypeVariableDeclaration(declaringClass,
assignment));
+ return new TypeVariableResolver(declarations);
+ }
+
+ public TypeVariableResolver remove()
+ {
+ List<TypeVariableDeclaration> declarations = new
ArrayList<TypeVariableDeclaration>(this.declarations);
+ declarations.remove(declarations.size() - 1);
+ return new TypeVariableResolver(declarations);
+ }
+ }
+
+ /**
+ * A declaration of type variables along with its assignments
+ */
+ private static class TypeVariableDeclaration
+ {
+ private Class<?> declaringClass;
+ private Type assignment;
+
+ public TypeVariableDeclaration(Class<?> declaringClass, Type
assignment)
+ {
+ this.declaringClass = declaringClass;
+ this.assignment = assignment;
+ }
+
+ public Type getAssignment()
+ {
+ return assignment;
+ }
+
+ public TypeVariable<?>[] getDeclaredTypeParameters()
+ {
+ return declaringClass.getTypeParameters();
+ }
+ }
+
+ private static class TypeErasureException extends Exception
+ {
+ public TypeErasureException()
+ {
+ super("generic type information not available");
+ }
+ }
+}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
Wed Jul 10 22:48:58 2013
@@ -1058,16 +1058,7 @@ public final class WebBeansUtil
{
Type type = injectionPoint.getType();
- Class<?> candidateClazz = null;
- if(type instanceof Class)
- {
- candidateClazz = (Class<?>)type;
- }
- else if(type instanceof ParameterizedType)
- {
- ParameterizedType pt = (ParameterizedType)type;
- candidateClazz = (Class<?>)pt.getRawType();
- }
+ Class<?> candidateClazz = ClassUtil.getClass(type);
if(!candidateClazz.isAssignableFrom(Instance.class))
{
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
Wed Jul 10 22:48:58 2013
@@ -86,5 +86,4 @@ public class GenericDecoratorTest extend
DecoratedBean decoratedBean = getInstance(DecoratedBean.class);
Assert.assertTrue(decoratedBean.isDecoratorCalled());
}
-
}
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.newtests.injection.generics;
+
+import java.util.List;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Typed;
+import javax.inject.Inject;
+
+@Typed
+public class Bar<A, B> {
+
+ @Inject
+ @GenericQualifier
+ private Baz<A> baz;
+
+ @Inject
+ @GenericQualifier
+ private A a;
+
+ @Inject
+ private Baz<List<B>> bBazList;
+ private A[] aArray;
+ private Baz<A> aBazEvent;
+ private A aObserverInjectionPoint;
+
+ @Inject
+ public void setAArray(A[] aArray) {
+ this.aArray = aArray;
+ }
+
+ public void observeBaz(@Observes Baz<A> baz, @GenericQualifier A a) {
+ this.aBazEvent = baz;
+ this.aObserverInjectionPoint = a;
+ }
+
+ public Baz<A> getBaz() {
+ return this.baz;
+ }
+
+ public Baz<List<B>> getBBazList() {
+ return this.bBazList;
+ }
+
+ public A getA() {
+ return this.a;
+ }
+
+ public A[] getAArray() {
+ return this.aArray;
+ }
+
+ public Baz<A> getABazEvent() {
+ return this.aBazEvent;
+ }
+
+ public A getAObserverInjectionPoint() {
+ return this.aObserverInjectionPoint;
+ }
+}
\ No newline at end of file
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.newtests.injection.generics;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+
+public class BarVetoExtension implements Extension {
+
+ public void vetoBar(@Observes ProcessAnnotatedType<?>
annotatedTypeEvent)
+ {
+ if
(annotatedTypeEvent.getAnnotatedType().getJavaClass().equals(Bar.class))
+ {
+ annotatedTypeEvent.veto();
+ }
+ }
+}
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.newtests.injection.generics;
+
+public class Baz<T> {
+
+}
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.newtests.injection.generics;
+
+
+public class BazSubclass extends Baz<String> {
+
+ public BazSubclass(String string)
+ {
+ }
+}
Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
Posted by Romain Manni-Bucau <rm...@gmail.com>.
Awesome, thank you Arne.
Le 14 juil. 2013 00:20, "Arne Limburg" <ar...@openknowledge.de> a
écrit :
> OK,
>
> I enabled the interceptors tck.
> Fortunately we already pass it ;)
>
> Am 13.07.13 22:25 schrieb "Arne Limburg" unter
> <ar...@openknowledge.de>:
>
> >I fixed that one, too.
> >
> >But I wonder why this part of the tck does not run within the OWB build.
> >Does anyone know why, or how to enable it?
> >
> >Cheers,
> >Arne
> >
> >Am 12.07.13 11:06 schrieb "Romain Manni-Bucau" unter
> ><rm...@gmail.com>:
> >
> >>we still have 2 issues on tomee:
> >>
> >>org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrde
> >>r
> >>Test
> >>and
> >>org.jboss.jsr299.tck.interceptors.tests.lifecycleCallback.order.Invocatio
> >>n
> >>OrderTest
> >>
> >>Romain Manni-Bucau
> >>Twitter: @rmannibucau
> >>Blog: http://rmannibucau.wordpress.com/
> >>LinkedIn: http://fr.linkedin.com/in/rmannibucau
> >>Github: https://github.com/rmannibucau
> >>
> >>
> >>
> >>2013/7/11 Mark Struberg <st...@yahoo.de>
> >>>
> >>>
> >>>
> >>> txs Arne, no need to excuse!
> >>>
> >>> "Wo gehobelt wird fallen Späne"
> >>>
> >>>
> >>> LieGrue,
> >>> strub
> >>>
> >>>
> >>>
> >>>
> >>> _______________________________
> >>> From: Arne Limburg <ar...@openknowledge.de>
> >>> To: "dev@openwebbeans.apache.og" <de...@openwebbeans.apache.org>
> >>> Sent: Thursday, 11 July 2013, 22:50
> >>> Subject: Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
> >>webbeans-impl/src/main/java/org/apache/webbeans/component/>webbeans-impl/
> >>src/main/java/org/apache/webbeans/component/creation/
> >>webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
> >>>
> >>>
> >>> Sorry guys,
> >>>
> >>> I extended a test of OWB to reproduce the problem and fixed it.
> >>> Should work fine now.
> >>> Plz let me know if anything does not work.
> >>>
> >>> Cheers,
> >>> Arne
> >>>
> >>>
> >>> Am 11.07.13 15:57 schrieb "Mark Struberg" unter <st...@yahoo.de>:
> >>>
> >>> >yikes, this also stales my development team :/
> >>> >
> >>> >Arne, I will rollback this commit and start a new deployment.
> >>> >
> >>> >LieGrue,
> >>> >strub
> >>> >
> >>> >
> >>> >
> >>> >
> >>> >________________________________
> >>> > From: Romain Manni-Bucau <rm...@gmail.com>
> >>> >To: openwebbeans-dev <de...@openwebbeas.apache.org>
> >>> >Sent: Thursday, 11 July 2013, 12:51
> >>> >Subject: Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
> >>> >webbeans-impl/src/main/java/org/apache/webbeans/component/
> >>> >webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
> >>> >webbeans-impl/src/main/java/org/apache/webbeans/config/
> >>> >webbeans-impl/sr...
> >>> >
> >>> >
> >>> >Hi Arne,
> >>> >
> >>> >this commit broke openejb CDi 1.0 TCKs
> >>> >
> >>> >basically
> >>>
> >>>org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEven
> >>>t
> >>>T
> >>> >est
> >>> >is no more passing, any idea?
> >>> >
> >>> >basically we observes now too much events.
> >>> >
> >>> >if you want to give a try on openejb just checkout tomee trunk then
> >>>build
> >>> >(mvn clean install -pl tck/cdi-embedded -am -Dmaven.test.skip=true)
> >>>then
> >>> >fo
> >>> >in tck/cdi-embedded module, update the pom to point to failing.xml
> >>testng
> >>> >config:
> >>> >
> >>> ><suiteXmlFile>src/tes/resources/failing.xml</suiteXmlFile>
> >>> >
> >>> >and put in this file:
> >>> >
> >>> ><?xml version="1.0" encoding="UTF-8"?>
> >>> ><suite name="CDI TCK" verbose="0">
> >>> > <test name="CDI TCK">
> >>> > <classes>
> >>> > <class
> >>>
> >>>name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.Contain
> >>>e
> >>>r
> >>> >EventTest"/>
> >>> > </classes>
> >>> > </test>
> >>> ></suite>
> >>> >
> >>> >then simply run mvn clean install on this module and you'll get the
> >>> >failure
> >>> >
> >>> >
> >>> >any help is welcomed ;)
> >>> >
> >>> >*Romain Manni-Bucau*
> >>> >*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> >>> >*Blog:>>>
> >>>>**http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/
> >
> >>> >*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> >>> >*Github: https://github.com/rmannibucau*
> >>> >
> >>> >
> >>> >
> >>> >---------- Forwarded message ----------
> >>> >From: <ar...@apache.org>
> >>> >Date: 2013/7/11
> >>> >Subject: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
> >>> >webbeans-impl/src/main/java/org/apache/webbeans/component/
> >>> >webbens-impl/src/main/java/org/apache/webbeans/component/creation/
> >>> >webbeans-impl/src/main/java/org/apache/webbeans/config/
> >>> >webbeans-impl/sr...
> >>> >To: commits@openwebbeans.apache.org
> >>> >
> >>> >
> >>> >Autor: arne
> >>> >Date: Wed Jul 10 22:48:58 2013
> >>> >New Revision: 1502035>>> >
> >>> >URL: http://svn.apache.org/r1502035
> >>> >Log:
> >>> >OWB-878: Re-implemented generic handling
> >>> >
> >>> >Added:
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>G
> >>>e
> >>> >nericsUtil.java
> >>> >
> >>>
> >>>opnwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
> >>>t
> >>> >s/inject/
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/inject/generic/
> >>> > - copied from r1502033,
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
> >>>u
> >>>n
> >>> >ittests/inject/generic/
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >> >s/injection/generics/
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/injection/generics/Bar.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/injection/generics/BarVetoExtension.java
> >> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/injection/generics/Baz.java
> >>> >
> >>>
> >>>>openwebbeans/trunk/webbens-impl/src/test/java/org/apache/webbeans/newte
> >>>>s
> >>>>t
> >>> >s/injection/generics/BazSubclass.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/injection/generics/Foo.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/injection/generics/GenericBeanTest.java
> >>> > - copied, changed from r1502033,
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
> >>>u
> >>>n
> >>> >ittests/inject/generic/GenericBeanTest.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/injection/generics/GenericFactory.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/injection/generics/GenericQualifier.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/injection/generics/GenericsTest.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/util/
> >>>G
> >>>e
> >>> >nericsUtilTest.java
> >>> >Removed:
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/confi
> >>>g
> >>>/
> >>> >BeanTypeSetResolver.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbans-impl/src/main/java/org/apache/webbeans/decora
> >>>t
> >>> >or/DecoratorResolverRules.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/inject/generic/GenericBeanTest.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
> >>>u
> >>>n
> >>> >ittests/inject/generic/
> >> >Modified:
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/AbstractProducerBean.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/ProducerFieldBean.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n>>>e
> >>> >nt/ProducerMethodBean.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/DecoratorBeanBuilder.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/InterceptorBeanBuilder.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>e
> >>> >nt/creation/MethodProducerFactry.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeanscompon
> >>>e
> >>> >nt/creation/ProducerFieldBeansBuilder.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/ProducerMethodBeansBuilder.jaa
> >>> >
> >>>
> >>>openwebeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config
> >>>/
> >>> >OwbParametrizedTypeImpl.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
> >>>i
> >>>n
> >>> >er/BeanManagerImpl.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
> >>>i
> >>>n
> >>> >er/InjectionResolver.java
> >>> >
> >>>
> >>>openwebbans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decor
> >>>a
> >>>t
> >>> >or/DecoratorsManager.java
> >>> >
> >>>
> >>>>openwebbeans/trunk/wbbeans-impl/src/main/java/org/apache/webbeans/event
> >>>>/
> >>>>O
> >>> >bserverMethodImpl.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
> >>>t
> >>>/
> >>> >implInjectionPointFactory.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
> >>>t
> >>>/
> >>> >impl/InjectionPointImpl.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AbstractAnnotated.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AbstractAnnotatedMember.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedConstructorImpl.java
> >>> >
> >>>
> >>>>openwebbeans/trunk/ebbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>>b
> >>>>l
> >>> >e/AnnotatedFildImpl.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedMethodImpl.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedParameterImpl.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedTypeImpl.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/mai/java/org/apache/webbeans/util/C
> >>>l
> >>> >assUtil.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>W
> >>>e
> >>> >bBeansUtil.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/decorators/tests/GenericDecoratorTest.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/promethods/beans/MethodTypeProduces1.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
> >>>u
> >>>n
> >>> >ittests/clazzClazzTest.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
> >>>u
> >>>n
> >>> >ittests/inject/parametrized/GenericClassTest.java
> >>> >
> >>>
> >>>openwbbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/pl
> >>>u
> >>>g
> >>> >in/OpenWebBeansJsfPlugin.java
> >>> >
> >>>
> >>>openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf1
> >>>2
> >>>/
> >>> >pluginOpenWebBeansJsfPlugin.java
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/AbstractProducerBean.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/component/AbstractProducerBean.java?rev=1502035&r1
> >>>=
> >>>1
> >>> >502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/AbstractProducerBean.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/rc/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/AbstractProducerBean.java
> >>> >Wed Jul 10 2:48:58 2013
> >>> >@@ -67,7 +67,7 @@ public class AbstractProducerBean<T> ext
> >>> >
> >>> > @Override
> >>> > public Class<T> getReturnType()
> >>> >- {
> >>> >+ {
> >>> > return returnType;
> >>> > }
> >>> >
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/ProducerFieldBean.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/component/ProducerFieldBean.java?rev=1502035&r1=15
> >>>0
> >>>2
> >>> >034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/ProducerFieldBean.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/ProducerFieldBean.java
> >>> >Wed Jul 10 2248:58 2013
> >>> >@@ -24,7 +24,6 @@ import java.lang.reflect.Field;
> >>> >import javax.enterprise.context.spi.CreationalContext;
> >>> >
> >>> >import org.apache.webbeans.component.spi.ProducerFactory;
> >>> >-mport org.apache.webbeans.util.ClassUtil;
> >>> >import org.apache.webbeans.util.WebBeansUtil;
> >>> >
> >>> >/**
> >>> >@@ -108,7 +107,7 @@ public class ProducerFieldBean<T> extend
> >>> > " with passivating scope @%s" +
> >>> > " must be Serializable";
> >>> >
> >>>
> >>>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getSco
> >>>p
> >>>e
> >>> >(),
> >>> >- ClassUtil.isClassAssignable(Serializable.class,
> >>> >getReturnType()), errorMessage, producerField.getName(),
> >>> >+ getReturnType() instanceof Serializable,
> >>>errorMessage,
> >>> >producerField.getName(),
> >>> > getBeanClass().getName(), getScope().getName());
> >>> > }
> >>> >
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/ProducerMethodBean.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/component/ProducerMethodBean.java?rev=1502035&r1=1
> >>>5
> >>>0
> >>> >2034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/ProducerMethodBean.java
> >> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/ProducerMethodBean.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -25,7 +25,6 @@ import javax.enterprise.context.spi.Crea
> >>> >
> >>> >import org.apache.webbeans.component.creation.MethodProducerFactory;
> >>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >>> >-import org.apache.webbeans.util.ClassUtil;
> >>> >import org.apache.webbeans.util.WebBeansUtil;
> >>> >
> >>> >/**
> >>> >@@ -150,7 +149,7 @@ public class ProducerMethodBean<T> exten
> >>> > " with passivating scope @%s" +
> >>> > " must be Serializable";
> >>> >
> >>>
> >>>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getSco
> >>>p
> >>>e
> >>> >(),
> >>> >- ClassUtil.isClassAssignable(Serializable.class,
> >>> >getReturnType()), errorMessage, creatorMethod.getName(),
> >>> >getBeanClass().getName(),
> >>> >+ getReturnType() instanceof Serializable,
> >>>errorMessage,
> >>> >creatorMethod.getName(), getBeanClass().getName(),
> >>> > getScope().getName());
> >>> >
> >>> > }
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/DecoratorBeanBuilder.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=1
> >>>5
> >>>0
> >>> >2035&r1=1502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/DecoratorBeanBuilder.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbean-impl/src/main/java/org/apache/webbeans/compon
> >>>e
> >>> >nt/creation/DecoratorBeanBuilder.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -29,11 +29,12 @@ import javax.enterprise.inject.spi.Annot
> >>> >import javax.enterprise.inject.spi.AnnotatedType;
> >>> >import javax.enterprise.inject.spi.InjectionPoint;
> >>> >import javax.inject.Injec;
> >>> >+
> >>> >+import java.io.Serializable;
> >>> >import java.lang.annotation.Annotation;
> >>> >import java.lang.reflect.AnnotatedElement;
> >>> >import java.lang.reflect.Constructor;
> >>> >import java.lang.reflect.Type;
> >>> >-import java.lang.reflect.TypeVariable;
> >>> >import java.util.ArrayList;
> >>> >import java.util.HashSet;
> >>> >import java.util.Iterator;
> >>> >@@ -46,13 +47,12 @@ import org.apache.webbeans.coponent.Bea
> >>> >import org.apache.wbbeans.component.DecoratorBean;
> >>> >import org.apache.webbeans.component.WebBeansType;
> >>> >import org.apache.webbeans.config.OWBLogConst;
> >>> >-import org.apache.webbeans.config.OwbParametrizedTypeImpl;
> >>> >import org.apache.webbeans.config.WebBeansContext;
> >>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >>> >import org.apache.webbeans.logger.WebBeansLoggerFacade;
> >>> >import org.apache.webbeans.util.Asserts;
> >>> >import org.apache.webbeans.util.ClassUtil;
> >>> >-
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >
> >>> >/**
> >>> > * Bean builder for {@link
> >>> >org.apache.webbeans.component.InterceptorBean}s.
> >>> >@@ -165,57 +165,15 @@ public class DecoratorBeanBuilder<T>
> >>> >
> >>> > private void defineDecoratedTypes()
> >>> > {
> >>> >- // remove them first to avoid to loop over them
> >>> >- decoratedTypes.remove(Object.class);
> >>> >- decoratedTypes.remove(java.io.Serializable.class); /* 8.1 */
> >>> >-
> >>> >- Type beanClass = annotatedType.getJavaClass();
> >>> >- do
> >>> >- {
> >>> >- final Class<?> clazz = ClassUtil.getClass(beanClass;
> >>> >- final Type toRemove;
> >>> >- if
> >>>(ClassUtil.isDefinitionContainsTypeVariables(beanClass))
> >>> >- {
> >>> >- final OwbParametrizedTypeImpl pt = new
> >>> >OwbParametrizedTypeImpl(clazz.getDeclaringClass(), clazz);
> >>> >- final TypeVariable<?>[] tvs =
> >>>clazz.getTypeParameters();
> >>> >- for(TypeVariable<?> tv : tvs)
> >>>>- {
> >>> >- pt.addTypeArgument(tv);
> >>> >- }
> >>> >- toRemove = pt;
> >>> >- //X TODO generic support setDecoratorGenericType(pt);
> >>> >- }
> >>> >- else
> >>> >- {
> >>> >- toRemove = beanClass;
> >>> >- //X TODO generic suport
> >>> >setDecoratorGenericType(beanClass);
> >>> >- }
> >>> >-
> >>> >- final Iterator<Type iterator =
> >>>decoratedTypes.iterator();
> >>> >- while (iterator.hasNext())
> >>> >- {
> >>> >- final Type next = iterato.next();
> >>> >-
> >>> >- // if raw class is the same and is assignable
> >>>(geneics
> >>> >handling)
> >>> >- if (ClassUtil.getClass(next) == clazz &&
> >>> >ClassUtil.isAssignable(toRemove, next))
> >>> >- {
> >>> >- iterator.remove();
> >>> >- }
> >>> >- }
> >>> >-
> >>> >- beanClass = clazz.getGenericSuperclass();
> >>> >- } while (beanClass != Object.class);
> >>> >-
> >>> >-
> >>> >+ decoratedTypes.remove(Serializable.class); /* 8.1 */
> >>> > for (Iterator<Type> i = decoratedTypes.iterator();
> >>>i.hasNext();
> >>)
> >>> > {
> >>> > Type t = i.next();
> >>> >- if (t instanceof Class<?> &&
> >>> >ignoredDecoratorInterfaces.contains(((Class) t).getName()))
> >>> >+ if (!ClassUtil.getClass(t).isInterface() || (t instanceof
> >>> >Class<?> && ignoredDecoratorInterfaces.contains(((Class)
> >>>t).getName())))
> >>> > {
> >>> > i.remove();
> >>> > }
> >>> }
> >>> >-
> >>> > }
> >>> >
> >>> > private void defineDelegate(Set<InjectionPoint> injectionPoints)
> >>> >@@ -258,7 +216,7 @@ public class DecoratorBeanBuilder<T>
> >>> > }
> >>> > }
> >>> >
> >>> >- delgateType = ipFound.getType();
> >>> >+ delegateType = GenericsUtil.resolveType(ipFound.getType(),
> >>> >annotatedType.getJavaClass(), ipFound.getMember());
> >>> > delegateQualifiers = ipFound.getQualifiers();
> >>> >
> >>> > for (Type decType : decoratedTypes)
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/InterceptorBeanBuilder.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev
> >>>=
> >>>1
> >>> >502035&r1=1502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/InterceptorBeanBuilder.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/InterceptorBeanBuilder.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -31,11 +317,11 @@ public abstract class InterceptorBeanBui
> >>> > {
> >>> > if (clazz == null)
> >>> > {
> >>> >- clazz =
> >>> >annotatedMethod.getDeclaringType().getJavaClass();
> >>> >+ clazz =
> >>> >annotatedMethod.getJavaMember().getDeclaringClass();
> >>> > }
> >>> >
> >>> > // check for same class -> Exception
> >>> >- if (alreadyDefined.getDeclaringType().getJavaClass() ==
> >>> >clazz)
> >>> >+ if (alreadyDefined.getJavaMember().getDeclaringClass() ==
> >>> >clazz)
> >>> > {
> >>> > throw new WebBeansConfigurationException("Only one
> >>> >Interceptor of a certain type is allowed per class, but multiple found
> >>>in
> >>> >class "
> >>> > +
> >>> >annotatedMethod.getDeclaringType().getJavaClass().getName()
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/MethodProducerFactory.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/aache/webbeans/component/creation/MethodProducerFactory.java?rev=
> >>>1
> >>>5
> >>> >02035&r1=1502034&r2=1502035&view=diff
> >>>
> >>>=======================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/copo
> >>>n
> >>>e
> >>> >nt/creation/MethodProducerFactory.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/MethodProducerFactory.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -41,7 +41,7 @@ import org.apache.webbeans.exception.Web
> >>> >import org.apache.webbeans.portable.ProducerMethodProducer;
> >>> >import org.apache.webbeans.util.AnnotationUtil;
> >>> >import org.apache.webbeans.util.Asserts;
> >>> >-import org.apache.webbeans.util.ClassUtil;
> >>> >+import org.apahe.webbeans.util.GenericsUtil;
> >>> >
> >>> >public class MethodProducerFactory<P> implements ProducerFactory<P>
> >>> >{
> >>> >@@ -98,7 +98,7 @@ public class MethodProducerFactory<P> im
> >>> > {
> >>> > if
> >>> >(annotatedParameter.isAnnotationPresent(Disposes.class))
> >>> > {
> >>> >- if
> >>> >(!ClassUtil.isAssignable(annotatedParameter.getBaseType(),
> >>> >producerMethod.getBaseType()))
> >>> >+ if
> >>> >(!GenericsUtil.satisfiesDependency(producerMethod.getBaseType(),
> >>> >annotatedParameter.getBaseType()))
> >>> > {
> >>> > continue;
> >>> > }
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/ProducerFieldBeansBuilder.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java?
> >>>r
> >>>e
> >>> >v=1502035&r1=1502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/ProducerFieldBeansBuilder.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/ProducerFieldBeansBuilder.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -77,7 +77,7 @@ public class ProducerFieldBeansBuilder<T
> >>> > Set<AnnotatedField<? super T>> annotatedFields =
> >>> >annotatedType.getFields();
> >>> > for(AnnotatedField<? super T> annotatedField:
> >>>annotatedFields)
> >>> > {
> >>> >- if(annotatedField.isAnnotationPresent(Produces.class) &&
> >>>
> >>>annotatedField.getDeclaringType().getJavaClass().equals(annotatedType.ge
> >>>t
> >>>J
> >>> >avaClass()))
> >>> >+ if(annotatedField.isAnnotationPresent(Produces.class) &&
> >>>
> >>>annotatedField.getJavaMember().getDeclaringClass().equals(annotatedType.
> >>>g
> >>>e
> >>> >tJavaClass()))
> >>> > {
> >>> > Type genericType = annotatedField.getBaseType();
> >>> >
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/ProducerMethodBeansBuilder.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
> >>>?
> >>>r
> >>> >ev=1502035&r1=1502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/ProducerMethodBeansBuilder.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
> >>>n
> >>>e
> >>> >nt/creation/ProducerMethodBeansBuilder.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -26,7 +26,7 @@ import org.apache.webbeans.config.WebBea
> >>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >>> >import org.apache.webbeans.util.AnnotationUtil;
> >>> >import org.apache.webbeans.util.Asserts;
> >>> >-import org.apache.webbeans.util.ClassUtil;
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >import org.apache.webbeans.util.WebBeansUtil;
> >>> >
> >>> >import javax.enterprise.event.Observes;
> >>> >@@ -77,7 +77,7 @@ public class ProducerMethodBeansBuilder<
> >>> > {
> >>> > boolean enterprise =
> >>> >EnterpriseBeanMarker.class.isInstance(bean);
> >>> > if(annotatedMethod.isAnnotationPresent(Produces.class) &&
> >>> >-
> >>>
> >>>(annotatedMethod.getDeclaringType().getJavaClass().equals(annotatedType.
> >>>g
> >>>e
> >>> >tJavaClass())
> >>> >+
> >>>
> >>>(annotatedMethod.getJavaMember().getDeclaringClass().equals(annotatedTyp
> >>>e
> >>>.
> >>> >getJavaClass())
> >>> > || (enterprise &&
> >>>
> >>>annotatedType.getJavaClass().isAssignableFrom(annotatedType.getJavaClass
> >>>(
> >>>)
> >>> >))))
> >>> > {
> >>> > checkProducerMethodForDeployment(annotatedMethod)
> >>> >@@ -126,7 +126,7 @@ public class ProducerMethodBeansBuilder<
> >>> > boolean found = false;
> >>> > for (final ProducerMethodBean<?> producer :
> >>> >producerBeans)
> >>> > {
> >>> >- if
> >>>(ClassUtil.isAssignable(param.getBaseType(),
> >>> >producer.getCreatorMethod().getGenericReturnType()))
> >>> >+ if
> >>>
> >>>(GenericsUtil.satisfiesDependency(producer.getCreatorMethod().getGeneric
> >>>R
> >>>e
> >>> >turnType(),
> >>> >param.getBaseType()))
> >>> > {
> >>> > found = true;
> >>> > break;
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/confi
> >>>g
> >>>/
> >>> >OwbParametrizedTypeImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/config/OwbParametrizedTypeImpl.java?rev=1502035&r1
> >>>=
> >>>1
> >>> >502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/confi
> >>>g
> >>>/
> >>> >OwbParametrizedTypeImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/confi
> >>>g
> >>>/
> >>> >OwbParametrizedTypeImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -20,9 +20,7 @@ package org.apache.webbeans.config;
> >>> >
> >>> >import java.lang.reflect.ParameterizedType;
> >>> >import java.lang.reflect.Type;
> >>> >-import java.util.ArrayList;
> >>> >import java.util.Arrays;
> >>> >-import java.util.List;
> >>> >
> >>> >/**
> >>> > * Custom parametrized type implementation.
> >>> >@@ -38,30 +36,26 @@ public class OwbParametrizedTypeImpl imp
> >>> > private final Type rawType;
> >>> >
> >>> > /**Actual type arguments*/
> >>> >- private final List<Type> types = new ArrayList<Type>();
> >>> >+ private final Type[] types;
> >>> >
> >>> > /**
> >>> > * New instance.
> >>> > * @param owner owner
> >>> > * @param raw raw
> >>> > */
> >>> >- public OwbParametrizedTypeImpl(Type owner, Type raw)
> >>> >+ public OwbParametrizedTypeImpl(Type owner, Type raw, Type...
> >>>types)
> >>> > {
> >>> > this.owner = owner;
> >>> >- rawType = raw;
> >>> >+ this.rawType = raw;
> >>> >+ this.types = types;
> >>> > }
> >>> >
> >>> > @Override
> >>> > public Type[] getActualTypeArguments()
> >>> > {
> >>> >- return types.toArray(new Type[types.size()]);
> >>> >+ reurn types.clone();
> >>> > }
> >>> >
> >>> >- public void addTypeArgument(Type type)
> >>> >- {
> >>> >- types.add(type);
> >>> >- }
> >>> >-
> >>> > @Override
> >>> > public Type getOwnerType()
> >>> > {
> >>> >@@ -82,12 +76,7 @@ public class OwbParametrizedTypeImpl imp
> >>> > @Override
> >>> > public int hashCode()
> >>> > {
> >>> >- final int prime = 31;
> >>> >- int result = 1;
> >>> >- result = prime * result +
> >>> >Arrays.hashCode(getActualTypeArguments());
> >>> >- result = prime * result + ((owner == null) ? 0 :
> >>> >owner.hashCode());
> >>> >- result = prime * result + ((rawType == null) ? 0 :
> >>> >rawType.hashCode());
> >>> >- return result;
> >>> >+ return Arrays.hashCode(types) ^ (owner == null ? 0 :
> >>> >owner.hashCode()) ^ (rawType == null ? 0 : rawType.hashCode());
> >>> > }
> >>> >
> >>> > /* (non-Javadoc)
> >>> >@@ -96,47 +85,24 @@ public class OwbParametrizedTypeImpl imp
> >>> > @Override
> >>> > public boolean equals(Object obj)
> >>> > {
> >>> >- if (this == obj)
> >>> >- {
> >>> >- return true;
> >>> >- }
> >>> >- if (obj == null)
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >- if (getClass() != obj.getClass())
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >- OwbParametrizedTypeImpl oher = (OwbParametrizedTypeImpl) obj;
> >>> >- if (!Arrays.equals(getActualTypeArguments(),
> >>> >other.getActualTypeArguments()))
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >- if (owner == null)
> >>> >- {
> >>> >- if (other.owner != null)
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >- }
> >>> >- else if (!owner.equals(other.owner))
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >- if (rawType == null)
> >>> >- {
> >>> >- if (other.rawType != null)
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >- }
> >>> >- else if (!rawType.equals(other.rawType))
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >-
> >>> >- return true;
> >>> >+ if (this == obj)
> >>> >+ {
> >>> >+ return true;
> >>> >+ }
> >>> >+ else if (obj instanceof ParameterizedType)
> >>> >+ {
> >>> >+ ParameterizedType that = (ParameterizedType) obj;
> >>> >+ Type thatOwnerType = that.getOwnerType();
> >>> >+ Type thatRawType = that.getRawType();
> >>> >+ return (owner == null ? thatOwnerType == null :
> >>> >owner.equals(thatOwnerType))
> >>> >+ && (rawType == null ? thatRawType == null :
> >>> >rawType.equals(thatRawType))
> >>> >+ && Arrays.equals(types,
> >>that.getActualTypeArguments());
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+
> >>> > }
> >>> >
> >>> > public String toString()
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
> >>>i
> >>>n
> >>> >er/BeanManagerImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/container/BeanManagerImpl.java?rev=1502035&r1=1502
> >>>0
> >>>3
> >>> >4&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
> >>>i
> >>>n
> >>> >er/BeanManagerImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
> >>>i
> >>>n
> >>> >er/BeanManagerImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -86,6 +86,7 @@ import org.apache.webbeans.spi.plugins.O
> >>> >import org.apache.webbeans.util.AnnotationUtil;
> >>> >import org.apache.webbeans.util.Asserts;
> >>> >import org.apache.webbeans.util.ClassUtil;
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >imort org.apache.webbeans.util.WebBeansUtil;
> >>> >import org.apache.webbeans.xml.WebBeansXMLConfigurator;
> >>> >
> >>> >@@ -688,7 +689,7 @@ public class BeanManagerImpl extends Abs
> >>> > //Check type if bean type is given
> >>> > if(beanType != null)
> >>> > {
> >>> >- if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
> >>> >beanType,
> >>> >bean instanceof NewBean) &&
> >>>!ClassUtil.isAssignable(bean.getBeanClass(),
> >>> >beanType))
> >>> >+ if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
> >>> >beanType,
> >>> >bean instanceof NewBean) &&
> >>>!GenericsUtil.satisfiesDependency(beanType,
> >>> >bean.getBeanClass()))
> >>> > {
> >>> > throw new IllegalArgumentException("Given bean type
> >>>:
> >>>"
> >>+
> >>> >beanType + " is not applicable for the bean instance : " + bean);
> >>> > }
> >>> >@@ -747,7 +748,7 @@ public class BeanManagerImpl extends Abs
> >>> > {
> >>> > Type beanApiType = itBeanApiTypes.next();
> >>> >
> >>> >- if(ClassUtil.isAssignable(beanApiType, givenType))
> >>> >+ if(GenericsUtil.satisfiesDependency(givenType,
> >>>beanApiType))
> >>> > {
> >>> > return true;
> >>> > }
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
> >>>i
> >>>n
> >>> >er/InjectionResolver.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/container/InjectionResolver.java?rev=1502035&r1=15
> >>>0
> >>>2
> >>> >034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
> >>>i
> >>>n
> >>> >er/InjectionResolver.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
> >>>i
> >>>n
> >>> >er/InjectionResolver.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -50,6 +50,7 @@ import org.apache.webbeans.spi.ScannerSe
> >>> >import org.apache.webbeans.util.AnnotationUtil;
> >>> >import org.apache.webbeans.util.Asserts;
> >>> >import org.apache.webbeans.util.ClassUtil;
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >import org.apache.webbeans.util.InjectionExceptionUtil;
> >>> >import org.apache.webbeans.util.WebBeansUtil;
> >>> >import static
> >>>
> >>>org.apache.webbeans.util.InjectionExceptionUtil.throwAmbiguousResolution
> >>>E
> >>>x
> >>> >ception;
> >>> >@@ -500,7 +501,7 @@ public class InjectionResolver
> >>> > for (Type componentApiType : component.getTypes())
> >>> > {
> >>> >
> >>> >- if (ClassUtil.isAssignable(componentApiType,
> >>> >injectionPointType))
> >>> >+ if
> >>> >(GenericsUtil.satisfiesDependency(injectionPointType,
> >>>componentApiType))
> >>> > {
> >>> > resolvedComponents.add(component);
> >>> > break;
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decor
> >>>a
> >>>t
> >>> >or/DecoratorsManager.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/decorator/DecoratorsManager.java?rev=1502035&r1=15
> >>>0
> >>>2
> >>> >034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decor
> >>>a
> >>>t
> >>> >or/DecoratorsManager.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decor
> >>>a
> >>>t
> >>> >or/DecoratorsManager.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -35,6 +35,7 @@ import org.apache.webbeans.config.WebBea
> >>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >>> >import org.apache.webbeans.util.AnnotationUtil;
> >>> >import org.apache.webbeans.util.Asserts;
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >
> >>> >public class DecoratorsManager
> >>> >{
> >>> >@@ -176,6 +177,7 @@ public class DecoratorsManager
> >>> >
> >>> > private boolean isDecoratorMatch(Decorator<?> decorator,
> >>>Set<Type>
> >>> >apiTypes, Set<Annotation> annotations)
> >>> > {
> >>> >+ // 8.3.1
> >>> > if (!apiTypesMatchDelegateType(decorator, apiTypes))
> >>> > {
> >>> > return false;
> >>> >@@ -218,7 +220,7 @@ public class DecoratorsManager
> >>> > boolean ok = false;
> >>> > for (Type apiType : apiTypes)
> >>> > {
> >>> >- if
> >>> >(DecoratorResolverRules.compareType(decorator.getDelegateType(),
> >>apiType))
> >>> >+ if
> >>> >(GenericsUtil.satisfiesDependency(decorator.getDelegateType(),
> >>>apiType))
> >>> > {
> >>> > ok = true;
> >>> > break;
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event
> >>>/
> >>>O
> >>> >bserverMethodImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1502035&r1=15020
> >>>3
> >>>4
> >>> >&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event
> >>>/
> >>>O
> >>> >bserverMethodImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event
> >>>/
> >>>O
> >>> >bserverMethodImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -324,7 +324,7 @@ public class ObserverMethodImpl<T> imple
> >>> >
> >>> >annotationManager.getQualifierAnnotations(AnnotationUtil.
> >>> > asArray(parameter.getAnnotations()));
> >>> >
> >>> >- InjectionPoint point =
> >>> >InjectionPointFactory.getPartialInjectionPoint(bean,
> >>> >parameter.getBaseType(), parameter, bindingTypes);
> >>> >+ InjectionPoint point =
> >>> >InjectionPointFactory.getPartialInjectionPoint(bean, parameter,
> >>> >bindingTypes);
> >>> >
> >>> > //Get observer parameter instance
> >>> > @SuppressWarnings("unchecked")
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
> >>>t
> >>>/
> >>> >impl/InjectionPointFactory.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1502035
> >>>&
> >>>r
> >>> >1=1502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
> >>>t
> >>>/
> >>> >impl/InjectionPointFactory.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
> >>>t
> >>>/
> >>> >impl/InjectionPointFactory.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -21,7 +21,6 @@ package org.apache.webbeans.inject.impl;
> >>> >import java.lang.annotation.Annotation;
> >>> >import java.lang.reflect.Method;
> >>> >import java.lang.reflect.Modifier;
> >>> >-import java.lang.reflect.Type;
> >>> >import java.lang.reflect.TypeVariable;
> >>> >import java.util.ArrayList;
> >>> >import java.util.Arrays;
> >>> >@@ -131,7 +130,7 @@ public class InjectionPointFactory
> >>> > }
> >>> > }
> >>> >
> >>> >- return new InjectionPointImpl(owner,
> >>>annotField.getBaseType(),
> >>> >Arrays.asList(qualifierAnnots), annotField);
> >>> >+ return new InjectionPointImpl(owner,
> >>> >Arrays.asList(qualifierAnnots), annotField);
> >>> > }
> >>> >
> >>> > public <X> InjectionPoint buildInjectionPoint(Bean<?> owner,
> >>> >AnnotatedParameter<X> parameter)
> >>> >@@ -139,7 +138,7 @@ public class InjectionPointFactory
> >>> > Asserts.assertNotNull(parameter, "parameter parameter can
> >>>not
> >>>be
> >>> >null");
> >>> > Set<Annotation> anns = parameter.getAnnotations();
> >>> > Annotation[] qualifierAnnots =
> >>>
> >>>webBeansContext.getAnnotationManager().getQualifierAnnotations(anns.toAr
> >>>r
> >>>a
> >>> >y(new
> >>> >Annotation[anns.size()]));
> >>> >- return new InjectionPointImpl(owner, parameter.getBaseType(),
> >>> >Arrays.asList(qualifierAnnots), parameter);
> >>> >+ return new InjectionPointImpl(owner,
> >>> >Arrays.asList(qualifierAnnots), parameter);
> >>> > }
> >>> >
> >>> > public <X> List<InjectionPoint> buildInjectionPoints(Bean<?>
> >>>owner,
> >>> >AnnotatedCallable<X> callable)
> >>> >@@ -165,9 +164,9 @@ public class InjectionPointFactory
> >>> > }
> >>> > }
> >>> >
> >>> >- public static InjectionPoint getPartialInjectionPoint(Bean<?>
> >>> >owner,Type type, AnnotatedParameter<?> parameter,
> >>>Annotation...bindings)
> >>> >+ public static InjectionPoint getPartialInjectionPoint(Bean<?>
> >>>owner,
> >>> >AnnotatedParameter<?> parameter, Annotation...bindings)
> >>> > {
> >>> >- return new InjectionPointImpl(owner, type,
> >>> >Arrays.asList(bindings), parameter);
> >>> >+ return new InjectionPointImpl(owner, Arrays.asList(bindings),
> >>> >parameter);
> >>> > }
> >>> >
> >>> > private void
> >>>validateInitializerConstructor(AnnotatedConstructor<?>
> >>> >constructor)
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
> >>>t
> >>>/
> >>> >impl/InjectionPointImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1502035&r1
> >>>=
> >>>1
> >>> >502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
> >>>t
> >>>/
> >>> >impl/InjectionPointImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
> >>>t
> >>>/
> >>> >impl/InjectionPointImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -71,15 +71,15 @@ class InjectionPointImpl implements Inje
> >>> >
> >>> > private boolean delegate;
> >>> >
> >>> >- InjectionPointImpl(Bean<?> ownerBean, Type type,
> >>> >Collection<Annotation> qualifiers, AnnotatedField<?> annotatedField)
> >>> >+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
> >>> >qualifiers, AnnotatedField<?> annotatedField)
> >>> > {
> >>> >- this(ownerBean, type, qualifiers, annotatedField,
> >>> >+ this(ownerBean, annotatedField.getBaseType(), qualifiers,
> >>> >annotatedField,
> >>> > annotatedField.getJavaMember(),
> >>> >annotatedField.isAnnotationPresent(Delegate.class),
> >>> >Modifier.isTransient(annotatedField.getJavaMember().getModifiers()));
> >>> > }
> >>> >
> >>> >- InjectionPointImpl(Bean<?> ownerBean, Type type,
> >>> >Collection<Annotation> qualifiers, AnnotatedParameter<?> parameter)
> >>> >+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
> >>> >qualifiers, AnnotatedParameter<?> parameter)
> >>> > {
> >>> >- this(ownerBean, type, qualifiers, parameter,
> >>> >parameter.getDeclaringCallable().getJavaMember(),
> >>> >parameter.isAnnotationPresent(Delegate.class), false);
> >>> >+ this(ownerBean, parameter.getBaseType(), qualifiers,
> >>>parameter,
> >>> >parameter.getDeclaringCallable().getJavaMember(),
> >>> >parameter.isAnnotationPresent(Delegate.class), false);
> >>> > }
> >>> >
> >>> > private InjectionPointImpl(Bean<?> ownerBean, Type type,
> >>> >Collection<Annotation> qualifiers, Annotated annotated, Member member,
> >>> >boolean delegate, boolean isTransient)
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AbstractAnnotated.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1502035&r1=150
> >>>2
> >>>0
> >>> >34&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AbstractAnnotated.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AbstractAnnotated.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -32,6 +32,7 @@ import org.apache.webbeans.config.WebBea
> >>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >>> >import org.apache.webbeans.util.AnnotationUtil;
> >>> >import org.apache.webbeans.util.ClassUtil;
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >
> >>> >/**
> >>> > * Abstract implementation of the {@link Annotated} contract.
> >>> >@@ -52,7 +53,7 @@ abstract class AbstractAnnotated impleme
> >>> > private final WebBeansContext webBeansContext;
> >>> >
> >>> > /**
> >>> >- * Createa a new annotated element.
> >>> >+ * Creates a new annotated element.
> >>> > *
> >>> > * @param webBeansContext our WebBeansContext
> >>> > * @param baseType annotated element type
> >>> >@@ -142,18 +143,19 @@ abstract class AbstractAnnotated impleme
> >>> > {
> >>> > if (typeClosures == null)
> >>> > {
> >>> >- initTypeClosures();
> >>> >+ initTypeClosure();
> >>> > }
> >>> > return typeClosures;
> >>> > }
> >>> >
> >>> >- private synchronized void initTypeClosures()
> >>> >+ protected abstract Class<?> getOwningClass();
> >>> >+ protected abstract Class<?> getDeclaringClass();
> >>> >+
> >>> >+ private synchronized void initTypeClosure()
> >>> > {
> >>> > if (typeClosures == null)
> >>> > {
> >>> >- typeClosures = new HashSet<Type>();
> >>> >- typeClosures.add(Object.class);
> >>> >- ClassUtil.setTypeHierarchy(typeClosures, baseType);
> >>> >+ typeClosures = GenericsUtil.getTypeClosure(baseType,
> >>> >getOwningClass(), getDeclaringClass());
> >>> > Set<String> ignoredInterfaces =
> >>> >webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
> >>> > for (Iterator<Type> i = typeClosures.iterator();
> >>> >i.hasNext(); )
> >>> > {
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AbstractAnnotatedMember.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/portable/AbstractAnnotatedMember.java?rev=1502035&
> >>>r
> >>>1
> >>> >=1502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AbstractAnnotatedMember.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AbstractAnnotatedMember.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -42,7 +42,6 @@ abstract class AbstractAnnotatedMember<X
> >>> > /**Member type*/
> >>> > protected final Member javaMember;
> >>> >
> >>> >- @SuppressWarnings("unchecked")
> >>> > AbstractAnnotatedMember(WebBeansContext webBeansContext, Type
> >>> >baseType, Member javaMember, AnnotatedType<X> declaringType)
> >>> > {
> >>> > super(webBeansContext, baseType);
> >>> >@@ -83,6 +82,18 @@ abstract class AbstractAnnotatedMember<X
> >>> > return Modifier.isStatic(javaMember.getModifiers());
> >>> > }
> >>> >
> >>> >+ @Override
> >>> >+ protected Class<?> getOwningClass()
> >>> >+ {
> >>> >+ return declaringType.getJavaClass();
> >>> >+ }
> >>> >+
> >>> >+ @Override
> >>> >+ protected Class<?> getDeclaringClass()
> >>> >+ {
> >>> >+ return javaMember.getDeclaringClass();
> >>> >+ }
> >>> >+
> >>> > public String toString()
> >>> > {
> >>> > StringBuilder builder = new StringBuilder(super.toString());
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedConstructorImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/portable/AnnotatedConstructorImpl.java?rev=1502035
> >>>&
> >>>r
> >>> >1=1502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedConstructorImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedConstructorImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -19,6 +19,7 @@
> >>> >package org.apache.webbeans.portable;
> >>> >
> >>> >import org.apache.webbeans.config.WebBeansContext;
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >
> >>> >import java.lang.reflect.Constructor;
> >>> >
> >>> >@@ -43,7 +44,7 @@ public class AnnotatedConstructorImpl<X>
> >>> > {
> >>> > super(webBeansContext, javaMember.getDeclaringClass(),
> >>> >javaMember,
> >>> >declaringType);
> >>> > setAnnotations(javaMember.getDeclaredAnnotations());
> >>> >- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
> >>> >javaMember.getParameterAnnotations());
> >>> >+
> >>>
> >>>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.
> >>>g
> >>>e
> >>> >tJavaClass(),
> >>> >javaMember), javaMember.getParameterAnnotations());
> >>> > }
> >>> >
> >>> >
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedFieldImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/portable/AnnotatedFieldImpl.java?rev=1502035&r1=15
> >>>0
> >>>2
> >>> >034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedFieldImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedFieldImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -19,6 +19,7 @@
> >>> >package org.apache.webbeans.portable;
> >>> >
> >>> >import org.apache.webbeans.config.WebBeansContext;
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >
> >>> >import java.lang.reflect.Field;
> >>> >
> >>> >@@ -43,7 +44,7 @@ public class AnnotatedFieldImpl<X> exten
> >>> > */
> >>> > AnnotatedFieldImpl(WebBeansContext webBeansContext, Field
> >>javaMember,
> >>> >AnnotatedType<X> declaringType)
> >>> > {
> >>> >- super(webBeansContext, javaMember.getGenericType(),
> >>> >javaMember,declaringType);
> >>> >+ super(webBeansContext,
> >>> >GenericsUtil.resolveType(declaringType.getJavaClass(), javaMember),
> >>> >javaMember,declaringType);
> >>> >
> >>> > setAnnotations(javaMember.getDeclaredAnnotations());
> >>> > }
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedMethodImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/portable/AnnotatedMethodImpl.java?rev=1502035&r1=1
> >>>5
> >>>0
> >>> >2034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedMethodImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedMethodImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -19,6 +19,7 @@
> >>> >package org.apache.webbeans.portable;
> >>> >
> >>> >import org.apache.webbeans.config.WebBeansContext;
> >>> >+import org.apache.webbeans.util.GenericsUtil;
> >>> >
> >>> >import java.lang.reflect.Method;
> >>> >
> >>> >@@ -41,11 +42,11 @@ class AnnotatedMethodImpl<X> extends Abs
> >>> > * @param declaringType declaring type
> >>> > * @param javaMember method
> >>> > */
> >>> >- AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
> >>> >javaMember,AnnotatedType<X> declaringType)
> >>> >+ AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
> >>> >javaMember, AnnotatedType<X> declaringType)
> >>> > {
> >>> >- super(webBeansContext, javaMember.getGenericReturnType(),
> >>> >javaMember,declaringType);
> >>> >+ super(webBeansContext,
> >>> >GenericsUtil.resolveReturnType(declaringType.getJavaClass(),
> >>>javaMember),
> >>> >javaMember,declaringType);
> >>> > setAnnotations(javaMember.getDeclaredAnnotations());
> >>> >- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
> >>> >javaMember.getParameterAnnotations());
> >>> >+
> >>>
> >>>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.
> >>>g
> >>>e
> >>> >tJavaClass(),
> >>> >javaMember), javaMember.getParameterAnnotations());
> >>> > }
> >>> >
> >>> >
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedParameterImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/portable/AnnotatedParameterImpl.java?rev=1502035&r
> >>>1
> >>>=
> >>> >1502034&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedParameterImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedParameterImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -75,4 +75,16 @@ class AnnotatedParameterImpl<X> extends
> >>> >
> >>> > return builder.toString();
> >>> > }
> >>> >+
> >>> >+ @Override
> >>> >+ protected Class<?> getOwningClass()
> >>> >+ {
> >>> >+ return declaringCallable.getDeclaringType().getJavaClass();
> >>> >+ }
> >>> >+
> >>> >+ @Override
> >>> >+ protected Class<?> getDeclaringClass()
> >>> >+ {
> >>> >+ return declaringCallable.getJavaMember().getDeclaringClass();
> >>> >+ }
> >>> >}
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedTypeImpl.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1502035&r1=150
> >>>2
> >>>0
> >>> >34&r2=1502035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedTypeImpl.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
> >>>b
> >>>l
> >>> >e/AnnotatedTypeImpl.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -132,6 +132,18 @@ class AnnotatedTypeImpl<X>
> >>> > return getState().methods;
> >>> > }
> >>> >
> >>> >+ @Override
> >>> >+ protected Class<?> getOwningClass()
> >>> >+ {
> >>> >+ return getJavaClass();
> >>> >+ }
> >>> >+
> >>> >+ @Override
> >>> >+ protected Class<?> getDeclaringClass()
> >>> >+ {
> >>> >+ return getJavaClass();
> >>> >+ }
> >>> >+
> >>> > private State getState()
> >>> > {
> >>> > State result = state;
> >>> >@@ -153,7 +165,6 @@ class AnnotatedTypeImpl<X>
> >>> > return result;
> >>> > }
> >>> >
> >>> >-
> >>> > private class State
> >>> > {
> >>> >
> >>> >@@ -230,12 +241,15 @@ class AnnotatedTypeImpl<X>
> >>> >
> >>> > if (supertype != null)
> >>> > {
> >>> >- fields.addAll(supertype.getFields());
> >>> >+ for (AnnotatedField<? super X> field:
> >>> >supertype.getFields())
> >>> >+ {
> >>> >+ fields.add(new
> >>> >AnnotatedFieldImpl<X>(getWebBeansContext(), field.getJavaMember(),
> >>> >AnnotatedTypeImpl.this));
> >>> >+ }
> >>> > for (AnnotatedMethod<? super X> method :
> >>> >supertype.getMethods())
> >>> > {
> >>> > if (!isOverridden(method))
> >>> > {
> >>> >- methods.add(method);
> >>> >+ methods.add(new
> >>> >AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(),
> >>> >AnnotatedTypeImpl.this));
> >>> > }
> >>> > }
> >>> > }
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>C
> >>>l
> >>> >assUtil.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/util/ClassUtil.java?rev=1502035&r1=1502034&r2=1502
> >>>0
> >>>3
> >>> >5&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>C
> >>>l
> >>> >assUtil.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>C
> >>>l
> >>> >assUtil.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -18,14 +18,6 @@
> >>> > */
> >>> >package org.apache.webbeans.util;
> >>> >
> >>> >-import org.apache.webbeans.config.BeanTypeSetResolver;
> >>> >-import org.apache.webbeans.exception.WebBeansException;
> >>> >-import org.apache.webbeans.exception.inject.DefinitionException;
> >>> >-
> >>> >-import javax.enterprise.event.Event;
> >>> >-import javax.enterprise.inject.spi.Bean;
> >>> >-import javax.enterprise.inject.spi.InjectionPoint;
> >>> >-import javax.inject.Provider;
> >>> >import java.lang.reflect.GenericArrayType;
> >>> >import java.lang.reflect.Method;
> >>> >import java.lang.reflect.Modifier;
> >>> >@@ -41,6 +33,11 @@ import java.util.List;
> >>> >import java.util.Map;
> >>> >import java.util.Set;
> >>> >
> >>> >+import javax.enterprise.inject.spi.InjectionPoint;
> >>> >+
> >>> >+import org.apache.webbeans.exception.WebBeansException;
> >>> >+import org.apache.webbeans.exception.inject.DefinitionException;
> >>> >+
> >>> >/**
> >>> > * Utility classes with respect to the class operations.
> >>> > *
> >>> >@@ -124,21 +121,24 @@ public final class ClassUtil
> >>> > return clazz.isMemberClass();
> >>> > }
> >>> >
> >>> >- public static Class<?> getPrimitiveWrapper(Class<?> clazz)
> >>> >+ public static boolean isSame(Type type1, Type type2)
> >>> > {
> >>> >- Asserts.nullCheckForClass(clazz);
> >>> >-
> >>> >- return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
> >>> >-
> >>> >+ if ((type1 instanceof Class) &&
> >>>((Class<?>)type1).isPrimitive())
> >>> >+ {
> >>> >+ type1 = PRIMITIVE_TO_WRAPPERS_MAP.get(type1);
> >>> >+ }
> >>> >+ if ((type2 instanceof Class) &&
> >>>((Class<?>)type2).isPrimitive())
> >>> >+ {
> >>> >+ type2 = PRIMITIVE_TO_WRAPPERS_MAP.get(type2);
> >>> >+ }
> >>> >+ return type1 == type2;
> >>> > }
> >>> >
> >>> >- public static Class<?> identityOrGetPrimitiveWrapper(Class<?>
> >>>clazz)
> >>> >+ public static Class<?> getPrimitiveWrapper(Class<?> clazz)
> >>> > {
> >>> >- if (clazz.isPrimitive())
> >>> >- {
> >>> >- return getPrimitiveWrapper(clazz);
> >>> >- }
> >>> >- return clazz;
> >>> >+ Asserts.nullCheckForClass(clazz);
> >>> >+
> >>> >+ return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
> >>> >
> >>> > }
> >>> >
> >>> >@@ -326,7 +326,6 @@ public final class ClassUtil
> >>> > return getObjectMethodNames().contains(methodName);
> >>> > }
> >>> >
> >>> >-
> >>> > /**
> >>> > * Returns true if type is an instance of
> >>> ><code>ParameterizedType</code>
> >>> > * else otherwise.
> >>> >@@ -426,131 +425,6 @@ public final class ClassUtil
> >>> > }
> >>> >
> >>> > /**
> >>> >- * See specification 5.2.3.
> >>> >- * @param beanType bean type
> >>> >- * @param requiredType required type
> >>> >- * @return true if assignable
> >>> >- */
> >>> >- public static boolean isAssignable(Type beanType, Type
> >>>requiredType)
> >>> >- {
> >>> >- Asserts.assertNotNull(beanType, "beanType parameter can not
> >>>be
> >>> >null");
> >>> >- Asserts.assertNotNull(requiredType, "requiredType parameter
> >>>can
> >>> >not be null");
> >>> >-
> >>> >- //Bean and required types are ParametrizedType
> >>> >- if (beanType instanceof ParameterizedType && requiredType
> >>> >instanceof ParameterizedType)
> >>> >- {
> >>> >- return isAssignableForParametrized((ParameterizedType)
> >>> >beanType, (ParameterizedType) requiredType);
> >>> >- }
> >>> >- //Both type is class type
> >>> >- else if (beanType instanceof Class && requiredType instanceof
> >>> >Class)
> >>> >- {
> >>> >- Class<?> clzBeanType = (Class<?>)beanType;
> >>> >- Class<?> clzReqType = (Class<?>)requiredType;
> >>> >-
> >>> >- if(clzBeanType.isPrimitive())
> >>> >- {
> >>> >- clzBeanType = getPrimitiveWrapper(clzBeanType);
> >>> >- }
> >>> >-
> >>> >- if(clzReqType.isPrimitive())
> >>> >- {
> >>> >- clzReqType = getPrimitiveWrapper(clzReqType);
> >>> >- }
> >>> >-
> >>> >- return clzReqType.equals(clzBeanType);
> >>> >- }
> >>> >- //Bean type is Parametrized and required type is class type
> >>> >- else if(beanType instanceof ParameterizedType && requiredType
> >>> >instanceof Class)
> >>> >- {
> >>> >- boolean ok = true;
> >>> >- ParameterizedType ptBean = (ParameterizedType)beanType;
> >>> >- Class<?> clazzBeanType =
> >>> >identityOrGetPrimitiveWrapper((Class<?>)ptBean.getRawType());
> >>> >- Class<?> clazzReqType =
> >>> >identityOrGetPrimitiveWrapper((Class<?>)requiredType);
> >>> >- if(clazzBeanType.equals(clazzReqType))
> >>> >- {
> >>> >- Type[] beanTypeArgs =
> >>>ptBean.getActualTypeArguments();
> >>> >- for(Type actual : beanTypeArgs)
> >>> >- {
> >>> >- if(!ClassUtil.isUnboundedTypeVariable(actual))
> >>> >- {
> >>> >- if(actual instanceof Class)
> >>> >- {
> >>> >- Class<?> clazz = (Class<?>)actual;
> >>> >- if(!clazz.equals(Object.class))
> >>> >- {
> >>> >- ok = false;
> >>> >- break;
> >>> >- }
> >>> >- }
> >>> >- else
> >>> >- {
> >>> >- ok = false;
> >>> >- break;
> >>> >- }
> >>> >- }
> >>> >- }
> >>> >- }
> >>> >- else
> >>> >- {
> >>> >- ok = false;
> >>> >- }
> >>> >-
> >>> >-
> >>> >- return ok;
> >>> >- }
> >>> >- //Bean type is class and required type is parametrized
> >>> >- else if(beanType instanceof Class && requiredType instanceof
> >>> >ParameterizedType)
> >>> >- {
> >>> >- final Class<?> clazzBeanType = (Class<?>)beanType;
> >>> >- final ParameterizedType ptReq =
> >>> >(ParameterizedType)requiredType;
> >>> >- final Class<?> clazzReqType =
> >>>(Class<?>)ptReq.getRawType();
> >>> >- final Type genericSuperClass =
> >>> >clazzBeanType.getGenericSuperclass();
> >>> >-
> >>> >- if (Provider.class.isAssignableFrom(clazzReqType) ||
> >>> >- Event.class.isAssignableFrom(clazzReqType))
> >>> >- {
> >>> >- if (isClassAssignable(clazzReqType, clazzBeanType))
> >>> >- {
> >>> >- return true;
> >>> >- }
> >>> >- }
> >>> >- else if (Bean.class.isAssignableFrom(clazzReqType))
> >>> >- {
> >>> >- // May be Bean, Interceptor or Decorator and thus
> >>>must
> >>> >match directly
> >>> >- if (clazzReqType.equals(clazzBeanType))
> >>> >- {
> >>> >- return true;
> >>> >- }
> >>> >- }
> >>> >- else if (genericSuperClass instanceof ParameterizedType)
> >>> >- {
> >>> >- final Type[] params = ((ParameterizedType)
> >>> >genericSuperClass).getActualTypeArguments();
> >>> >- final Type[] requiredParams = ((ParameterizedType)
> >>> >requiredType).getActualTypeArguments();
> >>> >- if (params.length != requiredParams.length)
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >-
> >>> >- for (int i = 0; i < params.length; i++)
> >>> >- {
> >>> >- if (!isAssignable(params[i], requiredParams[i]))
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >- }
> >>> >-
> >>> >- return isClassAssignable(clazzReqType,
> >>>clazzBeanType);
> >>> >- }
> >>> >-
> >>> >- return false;
> >>> >- }
> >>> >- else
> >>> >- {
> >>> >- return false;
> >>> >- }
> >>> >- }
> >>> >-
> >>> >- /**
> >>> > * Checks that event is applicable
> >>> > * for the given observer type.
> >>> > * @param eventType event type
> >>> >@@ -718,7 +592,13 @@ public final class ClassUtil
> >>> > ok++;
> >>> > }
> >>> > }
> >>> >-
> >>> >+ else if (requiredTypeArg instanceof ParameterizedType &&
> >>> >beanTypeArg instanceof TypeVariable)
> >>> >+ {
> >>> >+ if
> >>> >(checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(beanTypeArg,
> >>> >requiredTypeArg))
> >>> >+ {
> >>> >+ ok++;
> >>> >+ }
> >>> >+ }
> >>> > //Both type is actual type
> >>> > else if((beanTypeArg instanceof Class) &&
> >>>(requiredTypeArg
> >>> >instanceof Class))
> >>> > {
> >>> >@@ -874,6 +754,7 @@ public final class ClassUtil
> >>> > Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
> >>> >
> >>> > TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
> >>> >+ //TODO respect other bounds
> >>> > Type tvBound = tvBeanTypeArg.getBounds()[0];
> >>> >
> >>> > if(tvBound instanceof Class)
> >>> >@@ -891,6 +772,13 @@ public final class ClassUtil
> >>> >
> >>> > return true;
> >>> > }
> >>> >+
> >>> >+ public static boolean
> >>> >checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(Type
> >>>beanTypeArg,
> >>> >Type requiredTypeArg)
> >>> >+ {
> >>> >+ ParameterizedType requiredType =
> >>> >(ParameterizedType)requiredTypeArg;
> >>> >+ //TODO respect parameters of required type
> >>> >+ return
> >>checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg,
> >>> >requiredType.getRawType());
> >>> >+ }
> >>> >
> >>> > public static boolean
> >>> >checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(Type beanTypeArg,
> >>>Type
> >>> >requiredTypeArg)
> >>> > {
> >>> >@@ -972,16 +860,6 @@ public final class ClassUtil
> >>> > }
> >>> > }
> >>> >
> >>> >-
> >>> >- public static Set<Type> setTypeHierarchy(Set<Type> set, Type
> >>>clazz)
> >>> >- {
> >>> >- BeanTypeSetResolver resolver = new
> >>>BeanTypeSetResolver(clazz);
> >>> >- resolver.startConfiguration();
> >>> >- set.addAll(resolver.getHierarchy());
> >>> >-
> >>> >- return set;
> >>> >- }
> >>> >-
> >>> > /**
> >>> > * Return raw class type for given type.
> >>> > * @param type base type instance
> >>> >
> >>> >Added:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>G
> >>>e
> >>> >nericsUtil.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>> >a/org/apache/webbeans/util/GenericsUtil.java?rev=1502035&view=auto
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>G
> >>>e
> >>> >nericsUtil.java
> >>> >(added)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>G
> >>>e
> >>> >nericsUtil.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -0,0 +1,625 @@
> >>> >+/*
> >>> >+ * Licensed to the Apache Software Foundation (ASF) under one
> >>> >+ * or more contributor license agreements. See the NOTICE file
> >>> >+ * distributed with this work for additional information
> >>> >+ * regarding copyright ownership. The ASF licenses this file
> >>> >+ * to you 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.apache.webbeans.util;
> >>> >+
> >>> >+import java.lang.reflect.Array;
> >>> >+import java.lang.reflect.Constructor;
> >>> >+import java.lang.reflect.Field;
> >>> >+import java.lang.reflect.GenericArrayType;
> >>> >+import java.lang.reflect.Member;
> >>> >+import java.lang.reflect.Method;
> >>> >+import java.lang.reflect.ParameterizedType;
> >>> >+import java.lang.reflect.Type;
> >>> >+import java.lang.reflect.TypeVariable;
> >>> >+import java.lang.reflect.WildcardType;
> >>> >+import java.util.ArrayList;
> >>> >+import java.util.HashSet;
> >>> >+import java.util.List;
> >>> >+import java.util.Set;
> >>> >+
> >>> >+import org.apache.webbeans.config.OwbParametrizedTypeImpl;
> >>> >+import org.apache.webbeans.exception.inject.DefinitionException;
> >>> >+
> >>> >+/**
> >>> >+ * Utility classes for generic type operations.
> >>> >+ */
> >>> >+public final class GenericsUtil
> >>> >+{
> >>> >+ public static boolean satisfiesDependency(Type
> >>>injectionPointType,
> >>> >Type beanType)
> >>> >+ {
> >>> >+ validate(injectionPointType);
> >>> >+ if (injectionPointType instanceof TypeVariable ||
> >>> >injectionPointType instanceof WildcardType || injectionPointType
> >>> >instanceof
> >>> >GenericArrayType)
> >>> >+ {
> >>> >+ throw new DefinitionException("Injection point cannot
> >>>define
> >>> >Type Variable " + injectionPointType);
> >>> >+ }
> >>> >+ if (beanType instanceof TypeVariable || beanType instanceof
> >>> >WildcardType || beanType instanceof GenericArrayType)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType, beanType);
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ Type injectionPointRawType = injectionPointType
> >>>instanceof
> >>> >ParameterizedType?
> >>>((ParameterizedType)injectionPointType).getRawType():
> >>> >injectionPointType;
> >>> >+ Type beanRawType = beanType instanceof ParameterizedType?
> >>> >((ParameterizedType)beanType).getRawType(): beanType;
> >>> >+
> >>> >+ return ClassUtil.isSame(injectionPointRawType,
> >>>beanRawType)?
> >>> >isAssignableFrom(injectionPointType, beanType): false;
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * 5.2.3 and 5.2.4
> >>> >+ */
> >>> >+ public static boolean isAssignableFrom(Type requiredType, Type
> >>> >beanType)
> >>> >+ {
> >>> >+ if (requiredType instanceof Class)
> >>> >+ {
> >>> >+ return isAssignableFrom((Class<?>)requiredType,
> >>>beanType);
> >>> >+ }
> >>> >+ else if (requiredType instanceof ParameterizedType)
> >>> >+ {
> >>> >+ return isAssignableFrom((ParameterizedType)requiredType,
> >>> >beanType);
> >>> >+ }
> >>> >+ else if (requiredType instanceof TypeVariable)
> >>> >+ {
> >>> >+ return isAssignableFrom((TypeVariable<?>)requiredType,
> >>> >beanType);
> >>> >+ }
> >>> >+ else if (requiredType instanceof GenericArrayType)
> >>> >+ {
> >>> >+ return isAssignableFrom((GenericArrayType)requiredType,
> >>> >beanType);
> >>> >+ }
> >>> >+ else if (requiredType instanceof WildcardType)
> >>> >+ {
> >>> >+ return isAssignableFrom((WildcardType)requiredType,
> >>> >beanType);
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ throw new IllegalArgumentException("Unsupported type " +
> >>> >requiredType.getClass());
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(Class<?>
> >>>injectionPointType,
> >>> >Type beanType)
> >>> >+ {
> >>> >+ if (beanType instanceof Class)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType,
> >>> >(Class<?>)beanType);
> >>> >+ }
> >>> >+ else if (beanType instanceof TypeVariable)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType,
> >>> >(TypeVariable<?>)beanType);
> >>> >+ }
> >>> >+ else if (beanType instanceof ParameterizedType)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType,
> >>> >(ParameterizedType)beanType);
> >>> >+ }
> >>> >+ else if (beanType instanceof GenericArrayType)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType,
> >>> >(GenericArrayType)beanType);
> >>> >+ }
> >>> >+ else if (beanType instanceof WildcardType)
> >>> >+ {
> >>> >+ return isAssignableFrom((Type)injectionPointType,
> >>> >(WildcardType)beanType);
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ throw new IllegalArgumentException("Unsupported type " +
> >>> >injectionPointType.getClass());
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(Class<?>
> >>>injectionPointType,
> >>> >Class<?> beanType)
> >>> >+ {
> >>> >+ return ClassUtil.isClassAssignable(injectionPointType,
> >>beanType);
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(Class<?>
> >>>injectionPointType,
> >>> >TypeVariable<?> beanType)
> >>> >+ {
> >>> >+ for (Type bounds: beanType.getBounds())
> >>> >+ {
> >>> >+ if (isAssignableFrom(injectionPointType, bounds))
> >>> >+ {
> >>> >+ return true;
> >>> >+ }
> >>> >+ }
> >>> >+ return false;
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * CDI Spec. 5.2.4: "A parameterized bean type is considered
> >>> >assignable to a raw required type
> >>> >+ * if the raw types are identical and all type parameters of the
> >>bean
> >>> >type are either unbounded type variables or java.lang.Object."
> >>> >+ */
> >>> >+ private static boolean isAssignableFrom(Class<?>
> >>>injectionPointType,
> >>> >ParameterizedType beanType)
> >>> >+ {
> >>> >+ if (beanType.getRawType() != injectionPointType)
> >>> >+ {
> >>> >+ return false; //raw types don't match
> >>> >+ }
> >>> >+ for (Type typeArgument: beanType.getActualTypeArguments())
> >>> >+ {
> >>> >+ if (typeArgument == Object.class)
> >>> >+ {
> >>> >+ continue;
> >>> >+ }
> >>> >+ if (!(typeArgument instanceof TypeVariable))
> >>> >+ {
> >>> >+ return false; //neither object nor type variable
> >>> >+ }
> >>> >+ TypeVariable<?> typeVariable =
> >>(TypeVariable<?>)typeArgument;
> >>> >+ for (Type bounds: typeVariable.getBounds())
> >>> >+ {
> >>> >+ if (bounds != Object.class)
> >>> >+ {
> >>> >+ return false; //bound type variable
> >>> >+ }
> >>> >+ }
> >>> >+ }
> >>> >+ return true;
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(Class<?>
> >>>injectionPointType,
> >>> >GenericArrayType beanType)
> >>> >+ {
> >>> >+ if (!injectionPointType.isArray())
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+ return
> >>>isAssignableFrom(injectionPointType.getComponentType(),
> >>> >beanType.getGenericComponentType());
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(Type injectionPointType,
> >>> >WildcardType beanType)
> >>> >+ {
> >>> >+ for (Type bounds: beanType.getLowerBounds())
> >>> >+ {
> >>> >+ if (!isAssignableFrom(bounds, injectionPointType))
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+ }
> >>> >+ for (Type bounds: beanType.getUpperBounds())
> >>> >+ {
> >>> >+ if (isAssignableFrom(injectionPointType, bounds))
> >>> >+ {
> >>> >+ return true;
> >>> >+ }
> >>> >+ }
> >>> >+ return false;
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(ParameterizedType
> >>> >injectionPointType, Type beanType)
> >>> >+ {
> >>> >+ if (beanType instanceof Class)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType,
> >>> >(Class<?>)beanType);
> >>> >+ }
> >>> >+ else if (beanType instanceof TypeVariable)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType,
> >>> >(TypeVariable<?>)beanType);
> >>> >+ }
> >>> >+ else if (beanType instanceof ParameterizedType)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType,
> >>> >(ParameterizedType)beanType);
> >>> >+ }
> >>> >+ else if (beanType instanceof WildcardType)
> >>> >+ {
> >>> >+ return isAssignableFrom((Type)injectionPointType,
> >>> >(WildcardType)beanType);
> >>> >+ }
> >>> >+ else if (beanType instanceof GenericArrayType)
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ throw new IllegalArgumentException("Unsupported type " +
> >>> >injectionPointType.getClass());
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(ParameterizedType
> >>> >injectionPointType, Class<?> beanType)
> >>> >+ {
> >>> >+ return isAssignableFrom(injectionPointType.getRawType(),
> >>> >beanType);
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(ParameterizedType
> >>> >injectionPointType, TypeVariable<?> beanType)
> >>> >+ {
> >>> >+ for (Type bounds: beanType.getBounds())
> >>> >+ {
> >>> >+ if (isAssignableFrom(injectionPointType, bounds))
> >>> >+ {
> >>> >+ return true;
> >>> >+ }
> >>> >+ }
> >>> >+ return false;
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * CDI Spec. 5.2.4
> >>> >+ */
> >>> >+ private static boolean isAssignableFrom(ParameterizedType
> >>> >injectionPointType, ParameterizedType beanType)
> >>> >+ {
> >>> >+ if (injectionPointType.getRawType() != beanType.getRawType())
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+ Type[] injectionPointTypeArguments =
> >>> >injectionPointType.getActualTypeArguments();
> >>> >+ Type[] beanTypeArguments = beanType.getActualTypeArguments();
> >>> >+ for (int i = 0; i < injectionPointTypeArguments.length; i++)
> >>> >+ {
> >>> >+ if (!isAssignableFrom(injectionPointTypeArguments[i],
> >>> >beanTypeArguments[i]))
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+ }
> >>> >+ return true;
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(TypeVariable<?>
> >>> >injectionPointType, Type beanType)
> >>> >+ {
> >>> >+ for (Type bounds: injectionPointType.getBounds())
> >>> >+ {
> >>> >+ if (!isAssignableFrom(bounds, beanType))
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+ }
> >>> >+ return true;
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(GenericArrayType
> >>> >injectionPointType, Type beanType)
> >>> >+ {
> >>> >+ throw new UnsupportedOperationException("Not yet
> >>>implementeds");
> >>> >+ }
> >>> >+
> >>> >+ private static boolean isAssignableFrom(WildcardType
> >>> >injectionPointType, Type beanType)
> >>> >+ {
> >>> >+ for (Type bounds: injectionPointType.getLowerBounds())
> >>> >+ {
> >>> >+ if (!isAssignableFrom(beanType, bounds))
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+ }
> >>> >+ for (Type bounds: injectionPointType.getUpperBounds())
> >>> >+ {
> >>> >+ if (!isAssignableFrom(bounds, beanType))
> >>> >+ {
> >>> >+ return false;
> >>> >+ }
> >>> >+ }
> >>> >+ return true;
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * Resolves the actual type of the specified field for the type
> >>> >hierarchy specified by the given subclass
> >>> >+ */
> >>> >+ public static Type resolveType(Class<?> subclass, Field field)
> >>> >+ {
> >>> >+ return resolveType(field.getGenericType(), new
> >>> >TypeVariableResolver(subclass, field.getDeclaringClass()));
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * Resolves the actual return type of the specified method for
> >>>the
> >>> >type hierarchy specified by the given subclass
> >>> >+ */
> >>> >+ public static Type resolveReturnType(Class<?> subclass, Method
> >>> >method)
> >>> >+ {
> >>> >+ return resolveType(method.getGenericReturnType(), new
> >>> >TypeVariableResolver(subclass, method.getDeclaringClass()));
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * Resolves the actual parameter types of the specified
> >>>constructor
> >>> >for the type hierarchy specified by the given subclass
> >>> >+ */
> >>> >+ public static Type[] resolveParameterTypes(Class<?> subclass,
> >>> >Constructor<?> constructor)
> >>> >+ {
> >>> >+ return resolveTypes(constructor.getGenericParameterTypes(),
> >>>new
> >>> >TypeVariableResolver(subclass, constructor.getDeclaringClass()));
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * Resolves the actual parameter types of the specified method
> >>>for
> >>> >the
> >>> >type hierarchy specified by the given subclass
> >>> >+ */
> >>> >+ public static Type[] resolveParameterTypes(Class<?> subclass,
> >>>Method
> >>> >method)
> >>> >+ {
> >>> >+ return resolveTypes(method.getGenericParameterTypes(), new
> >>> >TypeVariableResolver(subclass, method.getDeclaringClass()));
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * Resolves the actual type of the specified type for the type
> >>> >hierarchy specified by the given subclass
> >>> >+ */
> >>> >+ public static Type resolveType(Type type, Class<?> subclass,
> >>>Member
> >>> >member)
> >>> >+ {
> >>> >+ return resolveType(type, new TypeVariableResolver(subclass,
> >>> >member.getDeclaringClass()));
> >>> >+ }
> >>> >+
> >>> >+ private static Type resolveType(Type type, TypeVariableResolver
> >>> >resolver)
> >>> >+ {
> >>> >+ if (type instanceof Class)
> >>> >+ {
> >>> >+ return type;
> >>> >+ }
> >>> >+ else if (type instanceof ParameterizedType)
> >>> >+ {
> >>> >+ ParameterizedType parameterizedType =
> >>> >(ParameterizedType)type;
> >>> >+ Type[] resolvedTypes =
> >>> >resolveTypes(parameterizedType.getActualTypeArguments(), resolver);
> >>> >+ return new
> >>> >OwbParametrizedTypeImpl(parameterizedType.getOwnerType(),
> >>> >parameterizedType.getRawType(), resolvedTypes);
> >>> >+ }
> >>> >+ else if (type instanceof TypeVariable)
> >>> >+ {
> >>> >+ TypeVariable<?> variable = (TypeVariable<?>)type;
> >>> >+ return resolver.resolve(variable);
> >>> >+ }
> >>> >+ else if (type instanceof WildcardType)
> >>> >+ {
> >>> >+ Type[] resolvedTypes = resolveTypes(((WildcardType)
> >>> >type).getUpperBounds(), resolver);
> >>> >+ return
> >>> >resolveType(getMostSpecificType(getRawTypes(resolvedTypes, resolver),
> >>> >resolvedTypes), resolver);
> >>> >+ }
> >>> >+ else if (type instanceof GenericArrayType)
> >>> >+ {
> >>> >+ Type componentType =
> >>> >resolveType(((GenericArrayType)type).getGenericComponentType(),
> >>resolver);
> >>> >+ Class<?> componentClass = getRawType(componentType,
> >>> >resolver);
> >>> >+ return Array.newInstance(componentClass, 0).getClass();
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ throw new IllegalArgumentException("Unsupported type " +
> >>> >type.getClass().getName());
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ public static Type[] resolveTypes(Type[] types,
> >>>TypeVariableResolver
> >>> >resolution)
> >>> >+ {
> >>> >+ Type[] resolvedTypeArguments = new Type[types.length];
> >>> >+ for (int i = 0; i < types.length; i++)
> >>> >+ {
> >>> >+ resolvedTypeArguments[i] = resolveType(types[i],
> >>resolution);
> >>> >+ }
> >>> >+ return resolvedTypeArguments;
> >>> >+ }
> >>> >+
> >>> >+ public static Set<Type> getTypeClosure(Type type, Class<?>
> >>> >owningClass, Class<?> declaringClass)
> >>> >+ {
> >>> >+ Set<Type> typeClosure = new HashSet<Type>();
> >>> >+ typeClosure.add(Object.class);
> >>> >+ fillTypeHierarchy(typeClosure, type, new
> >>> >TypeVariableResolver(owningClass, declaringClass));
> >>> >+ return typeClosure;
> >>> >+ }
> >>> >+
> >>> >+ private static void fillTypeHierarchy(Set<Type> set, Type type,
> >>> >TypeVariableResolver resolver)
> >>> >+ {
> >>> >+ if (type == null)
> >>> >+ {
> >>> >+ return;
> >>> >+ }
> >>> >+ Type resolvedType = GenericsUtil.resolveType(type, resolver);
> >>> >+ set.add(resolvedType);
> >>> >+ Class<?> resolvedClass =
> >>>GenericsUtil.getRawType(resolvedType,
> >>> >resolver);
> >>> >+ if (resolvedClass.getSuperclass() != null)
> >>> >+ {
> >>> >+ fillTypeHierarchy(set,
> >>>resolvedClass.getGenericSuperclass(),
> >>> >resolver.add(resolvedClass));
> >>> >+ }
> >>> >+ for (Type interfaceType:
> >>>resolvedClass.getGenericInterfaces())
> >>> >+ {
> >>> >+ fillTypeHierarchy(set, interfaceType,
> >>> >resolver.add(resolvedClass, interfaceType));
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ static <T> Class<T> getRawType(Type type, TypeVariableResolver
> >>> >resolver)
> >>> >+ {
> >>> >+ if (type instanceof Class)
> >>> >+ {
> >>> >+ return (Class<T>)type;
> >>> >+ }
> >>> >+ else if (type instanceof ParameterizedType)
> >>> >+ {
> >>> >+ return getRawType(((ParameterizedType)
> >>>type).getRawType(),
> >>> >resolver);
> >>> >+ }
> >>> >+ else if ((type instanceof TypeVariable) || (type instanceof
> >>> >WildcardType) || (type instanceof GenericArrayType))
> >>> >+ {
> >>> >+ Type resolvedType = resolveType(type, resolver);
> >>> >+ if (resolvedType instanceof TypeVariable)
> >>> >+ {
> >>> >+ TypeVariable<?> variable =
> >>(TypeVariable<?>)resolvedType;
> >>> >+ return
> >>> >getRawType(resolveType(getRawType(variable.getBounds(), resolver),
> >>> >resolver), resolver);
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ return getRawType(resolvedType, resolver);
> >>> >+ }
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ throw new IllegalArgumentException("Unsupported type " +
> >>> >type.getClass().getName());
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ private static Type getRawType(Type[] types, TypeVariableResolver
> >>> >resolver)
> >>> >+ {
> >>> >+ Class<?>[] rawTypes = getRawTypes(types, resolver);
> >>> >+ Class<?>[] classTypes = getClassTypes(rawTypes);
> >>> >+ if (classTypes.length > 0)
> >>> >+ {
> >>> >+ return getMostSpecificType(classTypes, types);
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ return getMostSpecificType(rawTypes, types);
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ private static <T> Class<T>[] getRawTypes(Type[] types,
> >>> >TypeVariableResolver resolver)
> >>> >+ {
> >>> >+ Class<T>[] rawTypes = new Class[types.length];
> >>> >+ for (int i = 0; i < types.length; i++)
> >>> >+ {
> >>> >+ rawTypes[i] = getRawType(types[i], resolver);
> >>> >+ }
> >>> >+ return rawTypes;
> >>> >+ }
> >>> >+
> >>> >+ private static Type getMostSpecificType(Class<?>[] types, Type[]
> >>> >genericTypes)
> >>> >+ {
> >>> >+ Class<?> mostSpecificType = types[0];
> >>> >+ int mostSpecificIndex = 0;
> >>> >+ for (int i = 0; i < types.length; i++)
> >>> >+ {
> >>> >+ if (mostSpecificType.isAssignableFrom(types[i]))
> >>> >+ {
> >>> >+ mostSpecificType = types[i];
> >>> >+ mostSpecificIndex = i;
> >>> >+ }
> >>> >+ }
> >>> >+ return genericTypes[mostSpecificIndex];
> >>> >+ }
> >>> >+
> >>> >+ private static Class<?>[] getClassTypes(Class<?>[] rawTypes)
> >>> >+ {
> >>> >+ List<Class<?>> classTypes = new ArrayList<Class<?>>();
> >>> >+ for (Class<?> rawType : rawTypes)
> >>> >+ {
> >>> >+ if (!rawType.isInterface())
> >>> >+ {
> >>> >+ classTypes.add(rawType);
> >>> >+ }
> >>> >+ }
> >>> >+ return classTypes.toArray(new Class[classTypes.size()]);
> >>> >+ }
> >>> >+
> >>> >+ private static Type validate(Type type)
> >>> >+ {
> >>> >+ if (!(type instanceof Class)
> >>> >+ && !(type instanceof ParameterizedType)
> >>> >+ && !(type instanceof TypeVariable)
> >>> >+ && !(type instanceof GenericArrayType)
> >>> >+ && !(type instanceof WildcardType))
> >>> >+ {
> >>> >+ throw new IllegalArgumentException("Unsupported type " +
> >>> >type.getClass());
> >>> >+ }
> >>> >+ return type;
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * resolves actual types of a TypeVariable for a specific type
> >>> >hierarchy
> >>> >+ */
> >>> >+ private static class TypeVariableResolver
> >>> >+ {
> >>> >+ private List<TypeVariableDeclaration> declarations = new
> >>> >ArrayList<TypeVariableDeclaration>();
> >>> >+
> >>> >+ private TypeVariableResolver(List<TypeVariableDeclaration>
> >>> >implementation)
> >>> >+ {
> >>> >+ this.declarations = implementation;
> >>> >+ }
> >>> >+
> >>> >+ public TypeVariableResolver(Class<?> subclass, Class<?>
> >>> >declaringClass)
> >>> >+ {
> >>> >+ declarations.add(new TypeVariableDeclaration(subclass,
> >>> >subclass.getGenericSuperclass()));
> >>> >+ while (declaringClass != subclass &&
> >>> >declaringClass.isAssignableFrom(subclass))
> >>> >+ {
> >>> >+ subclass = subclass.getSuperclass();
> >>> >+ declarations.add(new
> >>>TypeVariableDeclaration(subclass,
> >>> >subclass.getGenericSuperclass()));
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ public Type resolve(TypeVariable<?> variable)
> >>> >+ {
> >>> >+ if (declarations.size() < 2)
> >>> >+ {
> >>> >+ return getRawType(variable.getBounds(), this);
> >>> >+ }
> >>> >+ int hierarchyIndex = declarations.size() - 1;
> >>> >+ TypeVariableDeclaration typeVariableImplementation =
> >>> >declarations.get(hierarchyIndex);
> >>> >+ TypeVariable<?>[] typeParameters =
> >>> >typeVariableImplementation.getDeclaredTypeParameters();
> >>> >+ int typeIndex = -1;
> >>> >+ for (int i = 0; i < typeParameters.length; i++)
> >>> >+ {
> >>> >+ if
> >>> >(variable.getName().equals(typeParameters[i].getName()))
> >>> >+ {
> >>> >+ typeIndex = i;
> >>> >+ break;
> >>> >+ }
> >>> >+ }
> >>> >+ if (typeIndex == -1)
> >>> >+ {
> >>> >+ // type erasure
> >>> >+ return Object.class;
> >>> >+ }
> >>> >+ TypeVariableDeclaration declaration =
> >>> >declarations.get(hierarchyIndex - 1);
> >>> >+ Type genericClass = declaration.getAssignment();
> >>> >+ if (genericClass instanceof ParameterizedType)
> >>> >+ {
> >>> >+ ParameterizedType classType =
> >>> >(ParameterizedType)genericClass;
> >>> >+ return
> >>> >resolveType(classType.getActualTypeArguments()[typeIndex], remove());
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ TypeVariable<?>[] typeVariables =
> >>> >declaration.getDeclaredTypeParameters();
> >>> >+ if (typeVariables.length > typeIndex)
> >>> >+ {
> >>> >+ return resolveType(typeVariables[typeIndex],
> >>> >remove());
> >>> >+ }
> >>> >+ else
> >>> >+ {
> >>> >+ return Object.class; //type erasure
> >>> >+ }
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ public TypeVariableResolver add(Class<?> type)
> >>> >+ {
> >>> >+ return add(type, type.getGenericSuperclass());
> >>> >+ }
> >>> >+
> >>> >+ public TypeVariableResolver add(Class<?> declaringClass, Type
> >>> >assignment)
> >>> >+ {
> >>> >+ List<TypeVariableDeclaration> declarations = new
> >>> >ArrayList<TypeVariableDeclaration>(this.declarations);
> >>> >+ declarations.add(new
> >>>TypeVariableDeclaration(declaringClass,
> >>> >assignment));
> >>> >+ return new TypeVariableResolver(declarations);
> >>> >+ }
> >>> >+
> >>> >+ public TypeVariableResolver remove()
> >>> >+ {
> >>> >+ List<TypeVariableDeclaration> declarations = new
> >>> >ArrayList<TypeVariableDeclaration>(this.declarations);
> >>> >+ declarations.remove(declarations.size() - 1);
> >>> >+ return new TypeVariableResolver(declarations);
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ /**
> >>> >+ * A declaration of type variables along with its assignments
> >>> >+ */
> >>> >+ private static class TypeVariableDeclaration
> >>> >+ {
> >>> >+ private Class<?> declaringClass;
> >>> >+ private Type assignment;
> >>> >+
> >>> >+ public TypeVariableDeclaration(Class<?> declaringClass, Type
> >>> >assignment)
> >>> >+ {
> >>> >+ this.declaringClass = declaringClass;
> >>> >+ this.assignment = assignment;
> >>> >+ }
> >>> >+
> >>> >+ public Type getAssignment()
> >>> >+ {
> >>> >+ return assignment;
> >>> >+ }
> >>> >+
> >>> >+ public TypeVariable<?>[] getDeclaredTypeParameters()
> >>> >+ {
> >>> >+ return declaringClass.getTypeParameters();
> >>> >+ }
> >>> >+ }
> >>> >+
> >>> >+ private static class TypeErasureException extends Exception
> >>> >+ {
> >>> >+ public TypeErasureException()
> >>> >+ {
> >>> >+ super("generic type information not available");
> >>> >+ }
> >>> >+ }
> >>> >+}
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>W
> >>>e
> >>> >bBeansUtil.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/util/WebBeansUtil.java?rev=1502035&r1=1502034&r2=1
> >>>5
> >>>0
> >>> >2035&view=diff
> >>>
> >>>========================================================================
> >>>=
> >>>=
> >>> >====
> >>> >---
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>W
> >>>e
> >>> >bBeansUtil.java
> >>> >(original)
> >>> >+++
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
> >>>W
> >>>e
> >>> >bBeansUtil.java
> >>> >Wed Jul 10 22:48:58 2013
> >>> >@@ -1058,16 +1058,7 @@ public final class WebBeansUtil
> >>> > {
> >>> > Type type = injectionPoint.getType();
> >>> >
> >>> >- Class<?> candidateClazz = null;
> >>> >- if(type instanceof Class)
> >>> >- {
> >>> >- candidateClazz = (Class<?>)type;
> >>> >- }
> >>> >- else if(type instanceof ParameterizedType)
> >>> >- {
> >>> >- ParameterizedType pt = (ParameterizedType)type;
> >>> >- candidateClazz = (Class<?>)pt.getRawType();
> >>> >- }
> >>> >+ Class<?> candidateClazz = ClassUtil.getClass(type);
> >>> >
> >>> > if(!candidateClazz.isAssignableFrom(Instance.class))
> >>> > {
> >>> >
> >>> >Modified:
> >>>
> >>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
> >>>s
> >>>t
> >>> >s/decorators/tests/GenericDecoratorTest.java
> >>> >URL:
> >>> >
> >>
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/ja
> >>v
> >>>
> >>>a/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.jav
> >>>a
> >>>?...
Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
Posted by Arne Limburg <ar...@openknowledge.de>.
OK,
I enabled the interceptors tck.
Fortunately we already pass it ;)
Am 13.07.13 22:25 schrieb "Arne Limburg" unter
<ar...@openknowledge.de>:
>I fixed that one, too.
>
>But I wonder why this part of the tck does not run within the OWB build.
>Does anyone know why, or how to enable it?
>
>Cheers,
>Arne
>
>Am 12.07.13 11:06 schrieb "Romain Manni-Bucau" unter
><rm...@gmail.com>:
>
>>we still have 2 issues on tomee:
>>
>>org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrde
>>r
>>Test
>>and
>>org.jboss.jsr299.tck.interceptors.tests.lifecycleCallback.order.Invocatio
>>n
>>OrderTest
>>
>>Romain Manni-Bucau
>>Twitter: @rmannibucau
>>Blog: http://rmannibucau.wordpress.com/
>>LinkedIn: http://fr.linkedin.com/in/rmannibucau
>>Github: https://github.com/rmannibucau
>>
>>
>>
>>2013/7/11 Mark Struberg <st...@yahoo.de>
>>>
>>>
>>>
>>> txs Arne, no need to excuse!
>>>
>>> "Wo gehobelt wird fallen Späne"
>>>
>>>
>>> LieGrue,
>>> strub
>>>
>>>
>>>
>>>
>>> _______________________________
>>> From: Arne Limburg <ar...@openknowledge.de>
>>> To: "dev@openwebbeans.apache.og" <de...@openwebbeans.apache.org>
>>> Sent: Thursday, 11 July 2013, 22:50
>>> Subject: Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>>webbeans-impl/src/main/java/org/apache/webbeans/component/>webbeans-impl/
>>src/main/java/org/apache/webbeans/component/creation/
>>webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
>>>
>>>
>>> Sorry guys,
>>>
>>> I extended a test of OWB to reproduce the problem and fixed it.
>>> Should work fine now.
>>> Plz let me know if anything does not work.
>>>
>>> Cheers,
>>> Arne
>>>
>>>
>>> Am 11.07.13 15:57 schrieb "Mark Struberg" unter <st...@yahoo.de>:
>>>
>>> >yikes, this also stales my development team :/
>>> >
>>> >Arne, I will rollback this commit and start a new deployment.
>>> >
>>> >LieGrue,
>>> >strub
>>> >
>>> >
>>> >
>>> >
>>> >________________________________
>>> > From: Romain Manni-Bucau <rm...@gmail.com>
>>> >To: openwebbeans-dev <de...@openwebbeas.apache.org>
>>> >Sent: Thursday, 11 July 2013, 12:51
>>> >Subject: Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>>> >webbeans-impl/src/main/java/org/apache/webbeans/component/
>>> >webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
>>> >webbeans-impl/src/main/java/org/apache/webbeans/config/
>>> >webbeans-impl/sr...
>>> >
>>> >
>>> >Hi Arne,
>>> >
>>> >this commit broke openejb CDi 1.0 TCKs
>>> >
>>> >basically
>>>
>>>org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEven
>>>t
>>>T
>>> >est
>>> >is no more passing, any idea?
>>> >
>>> >basically we observes now too much events.
>>> >
>>> >if you want to give a try on openejb just checkout tomee trunk then
>>>build
>>> >(mvn clean install -pl tck/cdi-embedded -am -Dmaven.test.skip=true)
>>>then
>>> >fo
>>> >in tck/cdi-embedded module, update the pom to point to failing.xml
>>testng
>>> >config:
>>> >
>>> ><suiteXmlFile>src/tes/resources/failing.xml</suiteXmlFile>
>>> >
>>> >and put in this file:
>>> >
>>> ><?xml version="1.0" encoding="UTF-8"?>
>>> ><suite name="CDI TCK" verbose="0">
>>> > <test name="CDI TCK">
>>> > <classes>
>>> > <class
>>>
>>>name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.Contain
>>>e
>>>r
>>> >EventTest"/>
>>> > </classes>
>>> > </test>
>>> ></suite>
>>> >
>>> >then simply run mvn clean install on this module and you'll get the
>>> >failure
>>> >
>>> >
>>> >any help is welcomed ;)
>>> >
>>> >*Romain Manni-Bucau*
>>> >*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
>>> >*Blog:>>>
>>>>**http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
>>> >*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
>>> >*Github: https://github.com/rmannibucau*
>>> >
>>> >
>>> >
>>> >---------- Forwarded message ----------
>>> >From: <ar...@apache.org>
>>> >Date: 2013/7/11
>>> >Subject: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>>> >webbeans-impl/src/main/java/org/apache/webbeans/component/
>>> >webbens-impl/src/main/java/org/apache/webbeans/component/creation/
>>> >webbeans-impl/src/main/java/org/apache/webbeans/config/
>>> >webbeans-impl/sr...
>>> >To: commits@openwebbeans.apache.org
>>> >
>>> >
>>> >Autor: arne
>>> >Date: Wed Jul 10 22:48:58 2013
>>> >New Revision: 1502035>>> >
>>> >URL: http://svn.apache.org/r1502035
>>> >Log:
>>> >OWB-878: Re-implemented generic handling
>>> >
>>> >Added:
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>G
>>>e
>>> >nericsUtil.java
>>> >
>>>
>>>opnwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>>t
>>> >s/inject/
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/inject/generic/
>>> > - copied from r1502033,
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
>>>u
>>>n
>>> >ittests/inject/generic/
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>> >s/injection/generics/
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Bar.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/BarVetoExtension.java
>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Baz.java
>>> >
>>>
>>>>openwebbeans/trunk/webbens-impl/src/test/java/org/apache/webbeans/newte
>>>>s
>>>>t
>>> >s/injection/generics/BazSubclass.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Foo.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/GenericBeanTest.java
>>> > - copied, changed from r1502033,
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
>>>u
>>>n
>>> >ittests/inject/generic/GenericBeanTest.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/GenericFactory.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/GenericQualifier.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/GenericsTest.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/util/
>>>G
>>>e
>>> >nericsUtilTest.java
>>> >Removed:
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/confi
>>>g
>>>/
>>> >BeanTypeSetResolver.java
>>> >
>>>
>>>openwebbeans/trunk/webbans-impl/src/main/java/org/apache/webbeans/decora
>>>t
>>> >or/DecoratorResolverRules.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/inject/generic/GenericBeanTest.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
>>>u
>>>n
>>> >ittests/inject/generic/
>> >Modified:
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/AbstractProducerBean.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/ProducerFieldBean.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n>>>e
>>> >nt/ProducerMethodBean.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/DecoratorBeanBuilder.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/InterceptorBeanBuilder.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>e
>>> >nt/creation/MethodProducerFactry.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeanscompon
>>>e
>>> >nt/creation/ProducerFieldBeansBuilder.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/ProducerMethodBeansBuilder.jaa
>>> >
>>>
>>>openwebeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config
>>>/
>>> >OwbParametrizedTypeImpl.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
>>>i
>>>n
>>> >er/BeanManagerImpl.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
>>>i
>>>n
>>> >er/InjectionResolver.java
>>> >
>>>
>>>openwebbans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decor
>>>a
>>>t
>>> >or/DecoratorsManager.java
>>> >
>>>
>>>>openwebbeans/trunk/wbbeans-impl/src/main/java/org/apache/webbeans/event
>>>>/
>>>>O
>>> >bserverMethodImpl.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
>>>t
>>>/
>>> >implInjectionPointFactory.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
>>>t
>>>/
>>> >impl/InjectionPointImpl.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AbstractAnnotated.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AbstractAnnotatedMember.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedConstructorImpl.java
>>> >
>>>
>>>>openwebbeans/trunk/ebbeans-impl/src/main/java/org/apache/webbeans/porta
>>>>b
>>>>l
>>> >e/AnnotatedFildImpl.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedMethodImpl.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedParameterImpl.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedTypeImpl.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/mai/java/org/apache/webbeans/util/C
>>>l
>>> >assUtil.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>W
>>>e
>>> >bBeansUtil.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/decorators/tests/GenericDecoratorTest.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/promethods/beans/MethodTypeProduces1.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
>>>u
>>>n
>>> >ittests/clazzClazzTest.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/
>>>u
>>>n
>>> >ittests/inject/parametrized/GenericClassTest.java
>>> >
>>>
>>>openwbbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/pl
>>>u
>>>g
>>> >in/OpenWebBeansJsfPlugin.java
>>> >
>>>
>>>openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf1
>>>2
>>>/
>>> >pluginOpenWebBeansJsfPlugin.java
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/AbstractProducerBean.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/component/AbstractProducerBean.java?rev=1502035&r1
>>>=
>>>1
>>> >502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/AbstractProducerBean.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/rc/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/AbstractProducerBean.java
>>> >Wed Jul 10 2:48:58 2013
>>> >@@ -67,7 +67,7 @@ public class AbstractProducerBean<T> ext
>>> >
>>> > @Override
>>> > public Class<T> getReturnType()
>>> >- {
>>> >+ {
>>> > return returnType;
>>> > }
>>> >
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/ProducerFieldBean.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/component/ProducerFieldBean.java?rev=1502035&r1=15
>>>0
>>>2
>>> >034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/ProducerFieldBean.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/ProducerFieldBean.java
>>> >Wed Jul 10 2248:58 2013
>>> >@@ -24,7 +24,6 @@ import java.lang.reflect.Field;
>>> >import javax.enterprise.context.spi.CreationalContext;
>>> >
>>> >import org.apache.webbeans.component.spi.ProducerFactory;
>>> >-mport org.apache.webbeans.util.ClassUtil;
>>> >import org.apache.webbeans.util.WebBeansUtil;
>>> >
>>> >/**
>>> >@@ -108,7 +107,7 @@ public class ProducerFieldBean<T> extend
>>> > " with passivating scope @%s" +
>>> > " must be Serializable";
>>> >
>>>
>>>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getSco
>>>p
>>>e
>>> >(),
>>> >- ClassUtil.isClassAssignable(Serializable.class,
>>> >getReturnType()), errorMessage, producerField.getName(),
>>> >+ getReturnType() instanceof Serializable,
>>>errorMessage,
>>> >producerField.getName(),
>>> > getBeanClass().getName(), getScope().getName());
>>> > }
>>> >
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/ProducerMethodBean.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/component/ProducerMethodBean.java?rev=1502035&r1=1
>>>5
>>>0
>>> >2034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/ProducerMethodBean.java
>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/ProducerMethodBean.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -25,7 +25,6 @@ import javax.enterprise.context.spi.Crea
>>> >
>>> >import org.apache.webbeans.component.creation.MethodProducerFactory;
>>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>>> >-import org.apache.webbeans.util.ClassUtil;
>>> >import org.apache.webbeans.util.WebBeansUtil;
>>> >
>>> >/**
>>> >@@ -150,7 +149,7 @@ public class ProducerMethodBean<T> exten
>>> > " with passivating scope @%s" +
>>> > " must be Serializable";
>>> >
>>>
>>>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getSco
>>>p
>>>e
>>> >(),
>>> >- ClassUtil.isClassAssignable(Serializable.class,
>>> >getReturnType()), errorMessage, creatorMethod.getName(),
>>> >getBeanClass().getName(),
>>> >+ getReturnType() instanceof Serializable,
>>>errorMessage,
>>> >creatorMethod.getName(), getBeanClass().getName(),
>>> > getScope().getName());
>>> >
>>> > }
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/DecoratorBeanBuilder.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=1
>>>5
>>>0
>>> >2035&r1=1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/DecoratorBeanBuilder.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbean-impl/src/main/java/org/apache/webbeans/compon
>>>e
>>> >nt/creation/DecoratorBeanBuilder.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -29,11 +29,12 @@ import javax.enterprise.inject.spi.Annot
>>> >import javax.enterprise.inject.spi.AnnotatedType;
>>> >import javax.enterprise.inject.spi.InjectionPoint;
>>> >import javax.inject.Injec;
>>> >+
>>> >+import java.io.Serializable;
>>> >import java.lang.annotation.Annotation;
>>> >import java.lang.reflect.AnnotatedElement;
>>> >import java.lang.reflect.Constructor;
>>> >import java.lang.reflect.Type;
>>> >-import java.lang.reflect.TypeVariable;
>>> >import java.util.ArrayList;
>>> >import java.util.HashSet;
>>> >import java.util.Iterator;
>>> >@@ -46,13 +47,12 @@ import org.apache.webbeans.coponent.Bea
>>> >import org.apache.wbbeans.component.DecoratorBean;
>>> >import org.apache.webbeans.component.WebBeansType;
>>> >import org.apache.webbeans.config.OWBLogConst;
>>> >-import org.apache.webbeans.config.OwbParametrizedTypeImpl;
>>> >import org.apache.webbeans.config.WebBeansContext;
>>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>>> >import org.apache.webbeans.logger.WebBeansLoggerFacade;
>>> >import org.apache.webbeans.util.Asserts;
>>> >import org.apache.webbeans.util.ClassUtil;
>>> >-
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >
>>> >/**
>>> > * Bean builder for {@link
>>> >org.apache.webbeans.component.InterceptorBean}s.
>>> >@@ -165,57 +165,15 @@ public class DecoratorBeanBuilder<T>
>>> >
>>> > private void defineDecoratedTypes()
>>> > {
>>> >- // remove them first to avoid to loop over them
>>> >- decoratedTypes.remove(Object.class);
>>> >- decoratedTypes.remove(java.io.Serializable.class); /* 8.1 */
>>> >-
>>> >- Type beanClass = annotatedType.getJavaClass();
>>> >- do
>>> >- {
>>> >- final Class<?> clazz = ClassUtil.getClass(beanClass;
>>> >- final Type toRemove;
>>> >- if
>>>(ClassUtil.isDefinitionContainsTypeVariables(beanClass))
>>> >- {
>>> >- final OwbParametrizedTypeImpl pt = new
>>> >OwbParametrizedTypeImpl(clazz.getDeclaringClass(), clazz);
>>> >- final TypeVariable<?>[] tvs =
>>>clazz.getTypeParameters();
>>> >- for(TypeVariable<?> tv : tvs)
>>>>- {
>>> >- pt.addTypeArgument(tv);
>>> >- }
>>> >- toRemove = pt;
>>> >- //X TODO generic support setDecoratorGenericType(pt);
>>> >- }
>>> >- else
>>> >- {
>>> >- toRemove = beanClass;
>>> >- //X TODO generic suport
>>> >setDecoratorGenericType(beanClass);
>>> >- }
>>> >-
>>> >- final Iterator<Type iterator =
>>>decoratedTypes.iterator();
>>> >- while (iterator.hasNext())
>>> >- {
>>> >- final Type next = iterato.next();
>>> >-
>>> >- // if raw class is the same and is assignable
>>>(geneics
>>> >handling)
>>> >- if (ClassUtil.getClass(next) == clazz &&
>>> >ClassUtil.isAssignable(toRemove, next))
>>> >- {
>>> >- iterator.remove();
>>> >- }
>>> >- }
>>> >-
>>> >- beanClass = clazz.getGenericSuperclass();
>>> >- } while (beanClass != Object.class);
>>> >-
>>> >-
>>> >+ decoratedTypes.remove(Serializable.class); /* 8.1 */
>>> > for (Iterator<Type> i = decoratedTypes.iterator();
>>>i.hasNext();
>>)
>>> > {
>>> > Type t = i.next();
>>> >- if (t instanceof Class<?> &&
>>> >ignoredDecoratorInterfaces.contains(((Class) t).getName()))
>>> >+ if (!ClassUtil.getClass(t).isInterface() || (t instanceof
>>> >Class<?> && ignoredDecoratorInterfaces.contains(((Class)
>>>t).getName())))
>>> > {
>>> > i.remove();
>>> > }
>>> }
>>> >-
>>> > }
>>> >
>>> > private void defineDelegate(Set<InjectionPoint> injectionPoints)
>>> >@@ -258,7 +216,7 @@ public class DecoratorBeanBuilder<T>
>>> > }
>>> > }
>>> >
>>> >- delgateType = ipFound.getType();
>>> >+ delegateType = GenericsUtil.resolveType(ipFound.getType(),
>>> >annotatedType.getJavaClass(), ipFound.getMember());
>>> > delegateQualifiers = ipFound.getQualifiers();
>>> >
>>> > for (Type decType : decoratedTypes)
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/InterceptorBeanBuilder.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev
>>>=
>>>1
>>> >502035&r1=1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/InterceptorBeanBuilder.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/InterceptorBeanBuilder.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -31,11 +317,11 @@ public abstract class InterceptorBeanBui
>>> > {
>>> > if (clazz == null)
>>> > {
>>> >- clazz =
>>> >annotatedMethod.getDeclaringType().getJavaClass();
>>> >+ clazz =
>>> >annotatedMethod.getJavaMember().getDeclaringClass();
>>> > }
>>> >
>>> > // check for same class -> Exception
>>> >- if (alreadyDefined.getDeclaringType().getJavaClass() ==
>>> >clazz)
>>> >+ if (alreadyDefined.getJavaMember().getDeclaringClass() ==
>>> >clazz)
>>> > {
>>> > throw new WebBeansConfigurationException("Only one
>>> >Interceptor of a certain type is allowed per class, but multiple found
>>>in
>>> >class "
>>> > +
>>> >annotatedMethod.getDeclaringType().getJavaClass().getName()
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/MethodProducerFactory.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/aache/webbeans/component/creation/MethodProducerFactory.java?rev=
>>>1
>>>5
>>> >02035&r1=1502034&r2=1502035&view=diff
>>>
>>>=======================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/copo
>>>n
>>>e
>>> >nt/creation/MethodProducerFactory.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/MethodProducerFactory.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -41,7 +41,7 @@ import org.apache.webbeans.exception.Web
>>> >import org.apache.webbeans.portable.ProducerMethodProducer;
>>> >import org.apache.webbeans.util.AnnotationUtil;
>>> >import org.apache.webbeans.util.Asserts;
>>> >-import org.apache.webbeans.util.ClassUtil;
>>> >+import org.apahe.webbeans.util.GenericsUtil;
>>> >
>>> >public class MethodProducerFactory<P> implements ProducerFactory<P>
>>> >{
>>> >@@ -98,7 +98,7 @@ public class MethodProducerFactory<P> im
>>> > {
>>> > if
>>> >(annotatedParameter.isAnnotationPresent(Disposes.class))
>>> > {
>>> >- if
>>> >(!ClassUtil.isAssignable(annotatedParameter.getBaseType(),
>>> >producerMethod.getBaseType()))
>>> >+ if
>>> >(!GenericsUtil.satisfiesDependency(producerMethod.getBaseType(),
>>> >annotatedParameter.getBaseType()))
>>> > {
>>> > continue;
>>> > }
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/ProducerFieldBeansBuilder.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java?
>>>r
>>>e
>>> >v=1502035&r1=1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/ProducerFieldBeansBuilder.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/ProducerFieldBeansBuilder.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -77,7 +77,7 @@ public class ProducerFieldBeansBuilder<T
>>> > Set<AnnotatedField<? super T>> annotatedFields =
>>> >annotatedType.getFields();
>>> > for(AnnotatedField<? super T> annotatedField:
>>>annotatedFields)
>>> > {
>>> >- if(annotatedField.isAnnotationPresent(Produces.class) &&
>>>
>>>annotatedField.getDeclaringType().getJavaClass().equals(annotatedType.ge
>>>t
>>>J
>>> >avaClass()))
>>> >+ if(annotatedField.isAnnotationPresent(Produces.class) &&
>>>
>>>annotatedField.getJavaMember().getDeclaringClass().equals(annotatedType.
>>>g
>>>e
>>> >tJavaClass()))
>>> > {
>>> > Type genericType = annotatedField.getBaseType();
>>> >
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/ProducerMethodBeansBuilder.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
>>>?
>>>r
>>> >ev=1502035&r1=1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/ProducerMethodBeansBuilder.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compo
>>>n
>>>e
>>> >nt/creation/ProducerMethodBeansBuilder.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -26,7 +26,7 @@ import org.apache.webbeans.config.WebBea
>>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>>> >import org.apache.webbeans.util.AnnotationUtil;
>>> >import org.apache.webbeans.util.Asserts;
>>> >-import org.apache.webbeans.util.ClassUtil;
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >import org.apache.webbeans.util.WebBeansUtil;
>>> >
>>> >import javax.enterprise.event.Observes;
>>> >@@ -77,7 +77,7 @@ public class ProducerMethodBeansBuilder<
>>> > {
>>> > boolean enterprise =
>>> >EnterpriseBeanMarker.class.isInstance(bean);
>>> > if(annotatedMethod.isAnnotationPresent(Produces.class) &&
>>> >-
>>>
>>>(annotatedMethod.getDeclaringType().getJavaClass().equals(annotatedType.
>>>g
>>>e
>>> >tJavaClass())
>>> >+
>>>
>>>(annotatedMethod.getJavaMember().getDeclaringClass().equals(annotatedTyp
>>>e
>>>.
>>> >getJavaClass())
>>> > || (enterprise &&
>>>
>>>annotatedType.getJavaClass().isAssignableFrom(annotatedType.getJavaClass
>>>(
>>>)
>>> >))))
>>> > {
>>> > checkProducerMethodForDeployment(annotatedMethod)
>>> >@@ -126,7 +126,7 @@ public class ProducerMethodBeansBuilder<
>>> > boolean found = false;
>>> > for (final ProducerMethodBean<?> producer :
>>> >producerBeans)
>>> > {
>>> >- if
>>>(ClassUtil.isAssignable(param.getBaseType(),
>>> >producer.getCreatorMethod().getGenericReturnType()))
>>> >+ if
>>>
>>>(GenericsUtil.satisfiesDependency(producer.getCreatorMethod().getGeneric
>>>R
>>>e
>>> >turnType(),
>>> >param.getBaseType()))
>>> > {
>>> > found = true;
>>> > break;
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/confi
>>>g
>>>/
>>> >OwbParametrizedTypeImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/config/OwbParametrizedTypeImpl.java?rev=1502035&r1
>>>=
>>>1
>>> >502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/confi
>>>g
>>>/
>>> >OwbParametrizedTypeImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/confi
>>>g
>>>/
>>> >OwbParametrizedTypeImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -20,9 +20,7 @@ package org.apache.webbeans.config;
>>> >
>>> >import java.lang.reflect.ParameterizedType;
>>> >import java.lang.reflect.Type;
>>> >-import java.util.ArrayList;
>>> >import java.util.Arrays;
>>> >-import java.util.List;
>>> >
>>> >/**
>>> > * Custom parametrized type implementation.
>>> >@@ -38,30 +36,26 @@ public class OwbParametrizedTypeImpl imp
>>> > private final Type rawType;
>>> >
>>> > /**Actual type arguments*/
>>> >- private final List<Type> types = new ArrayList<Type>();
>>> >+ private final Type[] types;
>>> >
>>> > /**
>>> > * New instance.
>>> > * @param owner owner
>>> > * @param raw raw
>>> > */
>>> >- public OwbParametrizedTypeImpl(Type owner, Type raw)
>>> >+ public OwbParametrizedTypeImpl(Type owner, Type raw, Type...
>>>types)
>>> > {
>>> > this.owner = owner;
>>> >- rawType = raw;
>>> >+ this.rawType = raw;
>>> >+ this.types = types;
>>> > }
>>> >
>>> > @Override
>>> > public Type[] getActualTypeArguments()
>>> > {
>>> >- return types.toArray(new Type[types.size()]);
>>> >+ reurn types.clone();
>>> > }
>>> >
>>> >- public void addTypeArgument(Type type)
>>> >- {
>>> >- types.add(type);
>>> >- }
>>> >-
>>> > @Override
>>> > public Type getOwnerType()
>>> > {
>>> >@@ -82,12 +76,7 @@ public class OwbParametrizedTypeImpl imp
>>> > @Override
>>> > public int hashCode()
>>> > {
>>> >- final int prime = 31;
>>> >- int result = 1;
>>> >- result = prime * result +
>>> >Arrays.hashCode(getActualTypeArguments());
>>> >- result = prime * result + ((owner == null) ? 0 :
>>> >owner.hashCode());
>>> >- result = prime * result + ((rawType == null) ? 0 :
>>> >rawType.hashCode());
>>> >- return result;
>>> >+ return Arrays.hashCode(types) ^ (owner == null ? 0 :
>>> >owner.hashCode()) ^ (rawType == null ? 0 : rawType.hashCode());
>>> > }
>>> >
>>> > /* (non-Javadoc)
>>> >@@ -96,47 +85,24 @@ public class OwbParametrizedTypeImpl imp
>>> > @Override
>>> > public boolean equals(Object obj)
>>> > {
>>> >- if (this == obj)
>>> >- {
>>> >- return true;
>>> >- }
>>> >- if (obj == null)
>>> >- {
>>> >- return false;
>>> >- }
>>> >- if (getClass() != obj.getClass())
>>> >- {
>>> >- return false;
>>> >- }
>>> >- OwbParametrizedTypeImpl oher = (OwbParametrizedTypeImpl) obj;
>>> >- if (!Arrays.equals(getActualTypeArguments(),
>>> >other.getActualTypeArguments()))
>>> >- {
>>> >- return false;
>>> >- }
>>> >- if (owner == null)
>>> >- {
>>> >- if (other.owner != null)
>>> >- {
>>> >- return false;
>>> >- }
>>> >- }
>>> >- else if (!owner.equals(other.owner))
>>> >- {
>>> >- return false;
>>> >- }
>>> >- if (rawType == null)
>>> >- {
>>> >- if (other.rawType != null)
>>> >- {
>>> >- return false;
>>> >- }
>>> >- }
>>> >- else if (!rawType.equals(other.rawType))
>>> >- {
>>> >- return false;
>>> >- }
>>> >-
>>> >- return true;
>>> >+ if (this == obj)
>>> >+ {
>>> >+ return true;
>>> >+ }
>>> >+ else if (obj instanceof ParameterizedType)
>>> >+ {
>>> >+ ParameterizedType that = (ParameterizedType) obj;
>>> >+ Type thatOwnerType = that.getOwnerType();
>>> >+ Type thatRawType = that.getRawType();
>>> >+ return (owner == null ? thatOwnerType == null :
>>> >owner.equals(thatOwnerType))
>>> >+ && (rawType == null ? thatRawType == null :
>>> >rawType.equals(thatRawType))
>>> >+ && Arrays.equals(types,
>>that.getActualTypeArguments());
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+
>>> > }
>>> >
>>> > public String toString()
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
>>>i
>>>n
>>> >er/BeanManagerImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/container/BeanManagerImpl.java?rev=1502035&r1=1502
>>>0
>>>3
>>> >4&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
>>>i
>>>n
>>> >er/BeanManagerImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
>>>i
>>>n
>>> >er/BeanManagerImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -86,6 +86,7 @@ import org.apache.webbeans.spi.plugins.O
>>> >import org.apache.webbeans.util.AnnotationUtil;
>>> >import org.apache.webbeans.util.Asserts;
>>> >import org.apache.webbeans.util.ClassUtil;
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >imort org.apache.webbeans.util.WebBeansUtil;
>>> >import org.apache.webbeans.xml.WebBeansXMLConfigurator;
>>> >
>>> >@@ -688,7 +689,7 @@ public class BeanManagerImpl extends Abs
>>> > //Check type if bean type is given
>>> > if(beanType != null)
>>> > {
>>> >- if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
>>> >beanType,
>>> >bean instanceof NewBean) &&
>>>!ClassUtil.isAssignable(bean.getBeanClass(),
>>> >beanType))
>>> >+ if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
>>> >beanType,
>>> >bean instanceof NewBean) &&
>>>!GenericsUtil.satisfiesDependency(beanType,
>>> >bean.getBeanClass()))
>>> > {
>>> > throw new IllegalArgumentException("Given bean type
>>>:
>>>"
>>+
>>> >beanType + " is not applicable for the bean instance : " + bean);
>>> > }
>>> >@@ -747,7 +748,7 @@ public class BeanManagerImpl extends Abs
>>> > {
>>> > Type beanApiType = itBeanApiTypes.next();
>>> >
>>> >- if(ClassUtil.isAssignable(beanApiType, givenType))
>>> >+ if(GenericsUtil.satisfiesDependency(givenType,
>>>beanApiType))
>>> > {
>>> > return true;
>>> > }
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
>>>i
>>>n
>>> >er/InjectionResolver.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/container/InjectionResolver.java?rev=1502035&r1=15
>>>0
>>>2
>>> >034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
>>>i
>>>n
>>> >er/InjectionResolver.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conta
>>>i
>>>n
>>> >er/InjectionResolver.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -50,6 +50,7 @@ import org.apache.webbeans.spi.ScannerSe
>>> >import org.apache.webbeans.util.AnnotationUtil;
>>> >import org.apache.webbeans.util.Asserts;
>>> >import org.apache.webbeans.util.ClassUtil;
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >import org.apache.webbeans.util.InjectionExceptionUtil;
>>> >import org.apache.webbeans.util.WebBeansUtil;
>>> >import static
>>>
>>>org.apache.webbeans.util.InjectionExceptionUtil.throwAmbiguousResolution
>>>E
>>>x
>>> >ception;
>>> >@@ -500,7 +501,7 @@ public class InjectionResolver
>>> > for (Type componentApiType : component.getTypes())
>>> > {
>>> >
>>> >- if (ClassUtil.isAssignable(componentApiType,
>>> >injectionPointType))
>>> >+ if
>>> >(GenericsUtil.satisfiesDependency(injectionPointType,
>>>componentApiType))
>>> > {
>>> > resolvedComponents.add(component);
>>> > break;
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decor
>>>a
>>>t
>>> >or/DecoratorsManager.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/decorator/DecoratorsManager.java?rev=1502035&r1=15
>>>0
>>>2
>>> >034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decor
>>>a
>>>t
>>> >or/DecoratorsManager.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decor
>>>a
>>>t
>>> >or/DecoratorsManager.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -35,6 +35,7 @@ import org.apache.webbeans.config.WebBea
>>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>>> >import org.apache.webbeans.util.AnnotationUtil;
>>> >import org.apache.webbeans.util.Asserts;
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >
>>> >public class DecoratorsManager
>>> >{
>>> >@@ -176,6 +177,7 @@ public class DecoratorsManager
>>> >
>>> > private boolean isDecoratorMatch(Decorator<?> decorator,
>>>Set<Type>
>>> >apiTypes, Set<Annotation> annotations)
>>> > {
>>> >+ // 8.3.1
>>> > if (!apiTypesMatchDelegateType(decorator, apiTypes))
>>> > {
>>> > return false;
>>> >@@ -218,7 +220,7 @@ public class DecoratorsManager
>>> > boolean ok = false;
>>> > for (Type apiType : apiTypes)
>>> > {
>>> >- if
>>> >(DecoratorResolverRules.compareType(decorator.getDelegateType(),
>>apiType))
>>> >+ if
>>> >(GenericsUtil.satisfiesDependency(decorator.getDelegateType(),
>>>apiType))
>>> > {
>>> > ok = true;
>>> > break;
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event
>>>/
>>>O
>>> >bserverMethodImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1502035&r1=15020
>>>3
>>>4
>>> >&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event
>>>/
>>>O
>>> >bserverMethodImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event
>>>/
>>>O
>>> >bserverMethodImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -324,7 +324,7 @@ public class ObserverMethodImpl<T> imple
>>> >
>>> >annotationManager.getQualifierAnnotations(AnnotationUtil.
>>> > asArray(parameter.getAnnotations()));
>>> >
>>> >- InjectionPoint point =
>>> >InjectionPointFactory.getPartialInjectionPoint(bean,
>>> >parameter.getBaseType(), parameter, bindingTypes);
>>> >+ InjectionPoint point =
>>> >InjectionPointFactory.getPartialInjectionPoint(bean, parameter,
>>> >bindingTypes);
>>> >
>>> > //Get observer parameter instance
>>> > @SuppressWarnings("unchecked")
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
>>>t
>>>/
>>> >impl/InjectionPointFactory.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1502035
>>>&
>>>r
>>> >1=1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
>>>t
>>>/
>>> >impl/InjectionPointFactory.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
>>>t
>>>/
>>> >impl/InjectionPointFactory.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -21,7 +21,6 @@ package org.apache.webbeans.inject.impl;
>>> >import java.lang.annotation.Annotation;
>>> >import java.lang.reflect.Method;
>>> >import java.lang.reflect.Modifier;
>>> >-import java.lang.reflect.Type;
>>> >import java.lang.reflect.TypeVariable;
>>> >import java.util.ArrayList;
>>> >import java.util.Arrays;
>>> >@@ -131,7 +130,7 @@ public class InjectionPointFactory
>>> > }
>>> > }
>>> >
>>> >- return new InjectionPointImpl(owner,
>>>annotField.getBaseType(),
>>> >Arrays.asList(qualifierAnnots), annotField);
>>> >+ return new InjectionPointImpl(owner,
>>> >Arrays.asList(qualifierAnnots), annotField);
>>> > }
>>> >
>>> > public <X> InjectionPoint buildInjectionPoint(Bean<?> owner,
>>> >AnnotatedParameter<X> parameter)
>>> >@@ -139,7 +138,7 @@ public class InjectionPointFactory
>>> > Asserts.assertNotNull(parameter, "parameter parameter can
>>>not
>>>be
>>> >null");
>>> > Set<Annotation> anns = parameter.getAnnotations();
>>> > Annotation[] qualifierAnnots =
>>>
>>>webBeansContext.getAnnotationManager().getQualifierAnnotations(anns.toAr
>>>r
>>>a
>>> >y(new
>>> >Annotation[anns.size()]));
>>> >- return new InjectionPointImpl(owner, parameter.getBaseType(),
>>> >Arrays.asList(qualifierAnnots), parameter);
>>> >+ return new InjectionPointImpl(owner,
>>> >Arrays.asList(qualifierAnnots), parameter);
>>> > }
>>> >
>>> > public <X> List<InjectionPoint> buildInjectionPoints(Bean<?>
>>>owner,
>>> >AnnotatedCallable<X> callable)
>>> >@@ -165,9 +164,9 @@ public class InjectionPointFactory
>>> > }
>>> > }
>>> >
>>> >- public static InjectionPoint getPartialInjectionPoint(Bean<?>
>>> >owner,Type type, AnnotatedParameter<?> parameter,
>>>Annotation...bindings)
>>> >+ public static InjectionPoint getPartialInjectionPoint(Bean<?>
>>>owner,
>>> >AnnotatedParameter<?> parameter, Annotation...bindings)
>>> > {
>>> >- return new InjectionPointImpl(owner, type,
>>> >Arrays.asList(bindings), parameter);
>>> >+ return new InjectionPointImpl(owner, Arrays.asList(bindings),
>>> >parameter);
>>> > }
>>> >
>>> > private void
>>>validateInitializerConstructor(AnnotatedConstructor<?>
>>> >constructor)
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
>>>t
>>>/
>>> >impl/InjectionPointImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1502035&r1
>>>=
>>>1
>>> >502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
>>>t
>>>/
>>> >impl/InjectionPointImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/injec
>>>t
>>>/
>>> >impl/InjectionPointImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -71,15 +71,15 @@ class InjectionPointImpl implements Inje
>>> >
>>> > private boolean delegate;
>>> >
>>> >- InjectionPointImpl(Bean<?> ownerBean, Type type,
>>> >Collection<Annotation> qualifiers, AnnotatedField<?> annotatedField)
>>> >+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
>>> >qualifiers, AnnotatedField<?> annotatedField)
>>> > {
>>> >- this(ownerBean, type, qualifiers, annotatedField,
>>> >+ this(ownerBean, annotatedField.getBaseType(), qualifiers,
>>> >annotatedField,
>>> > annotatedField.getJavaMember(),
>>> >annotatedField.isAnnotationPresent(Delegate.class),
>>> >Modifier.isTransient(annotatedField.getJavaMember().getModifiers()));
>>> > }
>>> >
>>> >- InjectionPointImpl(Bean<?> ownerBean, Type type,
>>> >Collection<Annotation> qualifiers, AnnotatedParameter<?> parameter)
>>> >+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
>>> >qualifiers, AnnotatedParameter<?> parameter)
>>> > {
>>> >- this(ownerBean, type, qualifiers, parameter,
>>> >parameter.getDeclaringCallable().getJavaMember(),
>>> >parameter.isAnnotationPresent(Delegate.class), false);
>>> >+ this(ownerBean, parameter.getBaseType(), qualifiers,
>>>parameter,
>>> >parameter.getDeclaringCallable().getJavaMember(),
>>> >parameter.isAnnotationPresent(Delegate.class), false);
>>> > }
>>> >
>>> > private InjectionPointImpl(Bean<?> ownerBean, Type type,
>>> >Collection<Annotation> qualifiers, Annotated annotated, Member member,
>>> >boolean delegate, boolean isTransient)
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AbstractAnnotated.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1502035&r1=150
>>>2
>>>0
>>> >34&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AbstractAnnotated.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AbstractAnnotated.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -32,6 +32,7 @@ import org.apache.webbeans.config.WebBea
>>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>>> >import org.apache.webbeans.util.AnnotationUtil;
>>> >import org.apache.webbeans.util.ClassUtil;
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >
>>> >/**
>>> > * Abstract implementation of the {@link Annotated} contract.
>>> >@@ -52,7 +53,7 @@ abstract class AbstractAnnotated impleme
>>> > private final WebBeansContext webBeansContext;
>>> >
>>> > /**
>>> >- * Createa a new annotated element.
>>> >+ * Creates a new annotated element.
>>> > *
>>> > * @param webBeansContext our WebBeansContext
>>> > * @param baseType annotated element type
>>> >@@ -142,18 +143,19 @@ abstract class AbstractAnnotated impleme
>>> > {
>>> > if (typeClosures == null)
>>> > {
>>> >- initTypeClosures();
>>> >+ initTypeClosure();
>>> > }
>>> > return typeClosures;
>>> > }
>>> >
>>> >- private synchronized void initTypeClosures()
>>> >+ protected abstract Class<?> getOwningClass();
>>> >+ protected abstract Class<?> getDeclaringClass();
>>> >+
>>> >+ private synchronized void initTypeClosure()
>>> > {
>>> > if (typeClosures == null)
>>> > {
>>> >- typeClosures = new HashSet<Type>();
>>> >- typeClosures.add(Object.class);
>>> >- ClassUtil.setTypeHierarchy(typeClosures, baseType);
>>> >+ typeClosures = GenericsUtil.getTypeClosure(baseType,
>>> >getOwningClass(), getDeclaringClass());
>>> > Set<String> ignoredInterfaces =
>>> >webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
>>> > for (Iterator<Type> i = typeClosures.iterator();
>>> >i.hasNext(); )
>>> > {
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AbstractAnnotatedMember.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/portable/AbstractAnnotatedMember.java?rev=1502035&
>>>r
>>>1
>>> >=1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AbstractAnnotatedMember.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AbstractAnnotatedMember.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -42,7 +42,6 @@ abstract class AbstractAnnotatedMember<X
>>> > /**Member type*/
>>> > protected final Member javaMember;
>>> >
>>> >- @SuppressWarnings("unchecked")
>>> > AbstractAnnotatedMember(WebBeansContext webBeansContext, Type
>>> >baseType, Member javaMember, AnnotatedType<X> declaringType)
>>> > {
>>> > super(webBeansContext, baseType);
>>> >@@ -83,6 +82,18 @@ abstract class AbstractAnnotatedMember<X
>>> > return Modifier.isStatic(javaMember.getModifiers());
>>> > }
>>> >
>>> >+ @Override
>>> >+ protected Class<?> getOwningClass()
>>> >+ {
>>> >+ return declaringType.getJavaClass();
>>> >+ }
>>> >+
>>> >+ @Override
>>> >+ protected Class<?> getDeclaringClass()
>>> >+ {
>>> >+ return javaMember.getDeclaringClass();
>>> >+ }
>>> >+
>>> > public String toString()
>>> > {
>>> > StringBuilder builder = new StringBuilder(super.toString());
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedConstructorImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/portable/AnnotatedConstructorImpl.java?rev=1502035
>>>&
>>>r
>>> >1=1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedConstructorImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedConstructorImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -19,6 +19,7 @@
>>> >package org.apache.webbeans.portable;
>>> >
>>> >import org.apache.webbeans.config.WebBeansContext;
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >
>>> >import java.lang.reflect.Constructor;
>>> >
>>> >@@ -43,7 +44,7 @@ public class AnnotatedConstructorImpl<X>
>>> > {
>>> > super(webBeansContext, javaMember.getDeclaringClass(),
>>> >javaMember,
>>> >declaringType);
>>> > setAnnotations(javaMember.getDeclaredAnnotations());
>>> >- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
>>> >javaMember.getParameterAnnotations());
>>> >+
>>>
>>>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.
>>>g
>>>e
>>> >tJavaClass(),
>>> >javaMember), javaMember.getParameterAnnotations());
>>> > }
>>> >
>>> >
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedFieldImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/portable/AnnotatedFieldImpl.java?rev=1502035&r1=15
>>>0
>>>2
>>> >034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedFieldImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedFieldImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -19,6 +19,7 @@
>>> >package org.apache.webbeans.portable;
>>> >
>>> >import org.apache.webbeans.config.WebBeansContext;
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >
>>> >import java.lang.reflect.Field;
>>> >
>>> >@@ -43,7 +44,7 @@ public class AnnotatedFieldImpl<X> exten
>>> > */
>>> > AnnotatedFieldImpl(WebBeansContext webBeansContext, Field
>>javaMember,
>>> >AnnotatedType<X> declaringType)
>>> > {
>>> >- super(webBeansContext, javaMember.getGenericType(),
>>> >javaMember,declaringType);
>>> >+ super(webBeansContext,
>>> >GenericsUtil.resolveType(declaringType.getJavaClass(), javaMember),
>>> >javaMember,declaringType);
>>> >
>>> > setAnnotations(javaMember.getDeclaredAnnotations());
>>> > }
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedMethodImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/portable/AnnotatedMethodImpl.java?rev=1502035&r1=1
>>>5
>>>0
>>> >2034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedMethodImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedMethodImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -19,6 +19,7 @@
>>> >package org.apache.webbeans.portable;
>>> >
>>> >import org.apache.webbeans.config.WebBeansContext;
>>> >+import org.apache.webbeans.util.GenericsUtil;
>>> >
>>> >import java.lang.reflect.Method;
>>> >
>>> >@@ -41,11 +42,11 @@ class AnnotatedMethodImpl<X> extends Abs
>>> > * @param declaringType declaring type
>>> > * @param javaMember method
>>> > */
>>> >- AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
>>> >javaMember,AnnotatedType<X> declaringType)
>>> >+ AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
>>> >javaMember, AnnotatedType<X> declaringType)
>>> > {
>>> >- super(webBeansContext, javaMember.getGenericReturnType(),
>>> >javaMember,declaringType);
>>> >+ super(webBeansContext,
>>> >GenericsUtil.resolveReturnType(declaringType.getJavaClass(),
>>>javaMember),
>>> >javaMember,declaringType);
>>> > setAnnotations(javaMember.getDeclaredAnnotations());
>>> >- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
>>> >javaMember.getParameterAnnotations());
>>> >+
>>>
>>>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.
>>>g
>>>e
>>> >tJavaClass(),
>>> >javaMember), javaMember.getParameterAnnotations());
>>> > }
>>> >
>>> >
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedParameterImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/portable/AnnotatedParameterImpl.java?rev=1502035&r
>>>1
>>>=
>>> >1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedParameterImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedParameterImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -75,4 +75,16 @@ class AnnotatedParameterImpl<X> extends
>>> >
>>> > return builder.toString();
>>> > }
>>> >+
>>> >+ @Override
>>> >+ protected Class<?> getOwningClass()
>>> >+ {
>>> >+ return declaringCallable.getDeclaringType().getJavaClass();
>>> >+ }
>>> >+
>>> >+ @Override
>>> >+ protected Class<?> getDeclaringClass()
>>> >+ {
>>> >+ return declaringCallable.getJavaMember().getDeclaringClass();
>>> >+ }
>>> >}
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedTypeImpl.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1502035&r1=150
>>>2
>>>0
>>> >34&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedTypeImpl.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/porta
>>>b
>>>l
>>> >e/AnnotatedTypeImpl.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -132,6 +132,18 @@ class AnnotatedTypeImpl<X>
>>> > return getState().methods;
>>> > }
>>> >
>>> >+ @Override
>>> >+ protected Class<?> getOwningClass()
>>> >+ {
>>> >+ return getJavaClass();
>>> >+ }
>>> >+
>>> >+ @Override
>>> >+ protected Class<?> getDeclaringClass()
>>> >+ {
>>> >+ return getJavaClass();
>>> >+ }
>>> >+
>>> > private State getState()
>>> > {
>>> > State result = state;
>>> >@@ -153,7 +165,6 @@ class AnnotatedTypeImpl<X>
>>> > return result;
>>> > }
>>> >
>>> >-
>>> > private class State
>>> > {
>>> >
>>> >@@ -230,12 +241,15 @@ class AnnotatedTypeImpl<X>
>>> >
>>> > if (supertype != null)
>>> > {
>>> >- fields.addAll(supertype.getFields());
>>> >+ for (AnnotatedField<? super X> field:
>>> >supertype.getFields())
>>> >+ {
>>> >+ fields.add(new
>>> >AnnotatedFieldImpl<X>(getWebBeansContext(), field.getJavaMember(),
>>> >AnnotatedTypeImpl.this));
>>> >+ }
>>> > for (AnnotatedMethod<? super X> method :
>>> >supertype.getMethods())
>>> > {
>>> > if (!isOverridden(method))
>>> > {
>>> >- methods.add(method);
>>> >+ methods.add(new
>>> >AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(),
>>> >AnnotatedTypeImpl.this));
>>> > }
>>> > }
>>> > }
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>C
>>>l
>>> >assUtil.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/util/ClassUtil.java?rev=1502035&r1=1502034&r2=1502
>>>0
>>>3
>>> >5&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>C
>>>l
>>> >assUtil.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>C
>>>l
>>> >assUtil.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -18,14 +18,6 @@
>>> > */
>>> >package org.apache.webbeans.util;
>>> >
>>> >-import org.apache.webbeans.config.BeanTypeSetResolver;
>>> >-import org.apache.webbeans.exception.WebBeansException;
>>> >-import org.apache.webbeans.exception.inject.DefinitionException;
>>> >-
>>> >-import javax.enterprise.event.Event;
>>> >-import javax.enterprise.inject.spi.Bean;
>>> >-import javax.enterprise.inject.spi.InjectionPoint;
>>> >-import javax.inject.Provider;
>>> >import java.lang.reflect.GenericArrayType;
>>> >import java.lang.reflect.Method;
>>> >import java.lang.reflect.Modifier;
>>> >@@ -41,6 +33,11 @@ import java.util.List;
>>> >import java.util.Map;
>>> >import java.util.Set;
>>> >
>>> >+import javax.enterprise.inject.spi.InjectionPoint;
>>> >+
>>> >+import org.apache.webbeans.exception.WebBeansException;
>>> >+import org.apache.webbeans.exception.inject.DefinitionException;
>>> >+
>>> >/**
>>> > * Utility classes with respect to the class operations.
>>> > *
>>> >@@ -124,21 +121,24 @@ public final class ClassUtil
>>> > return clazz.isMemberClass();
>>> > }
>>> >
>>> >- public static Class<?> getPrimitiveWrapper(Class<?> clazz)
>>> >+ public static boolean isSame(Type type1, Type type2)
>>> > {
>>> >- Asserts.nullCheckForClass(clazz);
>>> >-
>>> >- return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
>>> >-
>>> >+ if ((type1 instanceof Class) &&
>>>((Class<?>)type1).isPrimitive())
>>> >+ {
>>> >+ type1 = PRIMITIVE_TO_WRAPPERS_MAP.get(type1);
>>> >+ }
>>> >+ if ((type2 instanceof Class) &&
>>>((Class<?>)type2).isPrimitive())
>>> >+ {
>>> >+ type2 = PRIMITIVE_TO_WRAPPERS_MAP.get(type2);
>>> >+ }
>>> >+ return type1 == type2;
>>> > }
>>> >
>>> >- public static Class<?> identityOrGetPrimitiveWrapper(Class<?>
>>>clazz)
>>> >+ public static Class<?> getPrimitiveWrapper(Class<?> clazz)
>>> > {
>>> >- if (clazz.isPrimitive())
>>> >- {
>>> >- return getPrimitiveWrapper(clazz);
>>> >- }
>>> >- return clazz;
>>> >+ Asserts.nullCheckForClass(clazz);
>>> >+
>>> >+ return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
>>> >
>>> > }
>>> >
>>> >@@ -326,7 +326,6 @@ public final class ClassUtil
>>> > return getObjectMethodNames().contains(methodName);
>>> > }
>>> >
>>> >-
>>> > /**
>>> > * Returns true if type is an instance of
>>> ><code>ParameterizedType</code>
>>> > * else otherwise.
>>> >@@ -426,131 +425,6 @@ public final class ClassUtil
>>> > }
>>> >
>>> > /**
>>> >- * See specification 5.2.3.
>>> >- * @param beanType bean type
>>> >- * @param requiredType required type
>>> >- * @return true if assignable
>>> >- */
>>> >- public static boolean isAssignable(Type beanType, Type
>>>requiredType)
>>> >- {
>>> >- Asserts.assertNotNull(beanType, "beanType parameter can not
>>>be
>>> >null");
>>> >- Asserts.assertNotNull(requiredType, "requiredType parameter
>>>can
>>> >not be null");
>>> >-
>>> >- //Bean and required types are ParametrizedType
>>> >- if (beanType instanceof ParameterizedType && requiredType
>>> >instanceof ParameterizedType)
>>> >- {
>>> >- return isAssignableForParametrized((ParameterizedType)
>>> >beanType, (ParameterizedType) requiredType);
>>> >- }
>>> >- //Both type is class type
>>> >- else if (beanType instanceof Class && requiredType instanceof
>>> >Class)
>>> >- {
>>> >- Class<?> clzBeanType = (Class<?>)beanType;
>>> >- Class<?> clzReqType = (Class<?>)requiredType;
>>> >-
>>> >- if(clzBeanType.isPrimitive())
>>> >- {
>>> >- clzBeanType = getPrimitiveWrapper(clzBeanType);
>>> >- }
>>> >-
>>> >- if(clzReqType.isPrimitive())
>>> >- {
>>> >- clzReqType = getPrimitiveWrapper(clzReqType);
>>> >- }
>>> >-
>>> >- return clzReqType.equals(clzBeanType);
>>> >- }
>>> >- //Bean type is Parametrized and required type is class type
>>> >- else if(beanType instanceof ParameterizedType && requiredType
>>> >instanceof Class)
>>> >- {
>>> >- boolean ok = true;
>>> >- ParameterizedType ptBean = (ParameterizedType)beanType;
>>> >- Class<?> clazzBeanType =
>>> >identityOrGetPrimitiveWrapper((Class<?>)ptBean.getRawType());
>>> >- Class<?> clazzReqType =
>>> >identityOrGetPrimitiveWrapper((Class<?>)requiredType);
>>> >- if(clazzBeanType.equals(clazzReqType))
>>> >- {
>>> >- Type[] beanTypeArgs =
>>>ptBean.getActualTypeArguments();
>>> >- for(Type actual : beanTypeArgs)
>>> >- {
>>> >- if(!ClassUtil.isUnboundedTypeVariable(actual))
>>> >- {
>>> >- if(actual instanceof Class)
>>> >- {
>>> >- Class<?> clazz = (Class<?>)actual;
>>> >- if(!clazz.equals(Object.class))
>>> >- {
>>> >- ok = false;
>>> >- break;
>>> >- }
>>> >- }
>>> >- else
>>> >- {
>>> >- ok = false;
>>> >- break;
>>> >- }
>>> >- }
>>> >- }
>>> >- }
>>> >- else
>>> >- {
>>> >- ok = false;
>>> >- }
>>> >-
>>> >-
>>> >- return ok;
>>> >- }
>>> >- //Bean type is class and required type is parametrized
>>> >- else if(beanType instanceof Class && requiredType instanceof
>>> >ParameterizedType)
>>> >- {
>>> >- final Class<?> clazzBeanType = (Class<?>)beanType;
>>> >- final ParameterizedType ptReq =
>>> >(ParameterizedType)requiredType;
>>> >- final Class<?> clazzReqType =
>>>(Class<?>)ptReq.getRawType();
>>> >- final Type genericSuperClass =
>>> >clazzBeanType.getGenericSuperclass();
>>> >-
>>> >- if (Provider.class.isAssignableFrom(clazzReqType) ||
>>> >- Event.class.isAssignableFrom(clazzReqType))
>>> >- {
>>> >- if (isClassAssignable(clazzReqType, clazzBeanType))
>>> >- {
>>> >- return true;
>>> >- }
>>> >- }
>>> >- else if (Bean.class.isAssignableFrom(clazzReqType))
>>> >- {
>>> >- // May be Bean, Interceptor or Decorator and thus
>>>must
>>> >match directly
>>> >- if (clazzReqType.equals(clazzBeanType))
>>> >- {
>>> >- return true;
>>> >- }
>>> >- }
>>> >- else if (genericSuperClass instanceof ParameterizedType)
>>> >- {
>>> >- final Type[] params = ((ParameterizedType)
>>> >genericSuperClass).getActualTypeArguments();
>>> >- final Type[] requiredParams = ((ParameterizedType)
>>> >requiredType).getActualTypeArguments();
>>> >- if (params.length != requiredParams.length)
>>> >- {
>>> >- return false;
>>> >- }
>>> >-
>>> >- for (int i = 0; i < params.length; i++)
>>> >- {
>>> >- if (!isAssignable(params[i], requiredParams[i]))
>>> >- {
>>> >- return false;
>>> >- }
>>> >- }
>>> >-
>>> >- return isClassAssignable(clazzReqType,
>>>clazzBeanType);
>>> >- }
>>> >-
>>> >- return false;
>>> >- }
>>> >- else
>>> >- {
>>> >- return false;
>>> >- }
>>> >- }
>>> >-
>>> >- /**
>>> > * Checks that event is applicable
>>> > * for the given observer type.
>>> > * @param eventType event type
>>> >@@ -718,7 +592,13 @@ public final class ClassUtil
>>> > ok++;
>>> > }
>>> > }
>>> >-
>>> >+ else if (requiredTypeArg instanceof ParameterizedType &&
>>> >beanTypeArg instanceof TypeVariable)
>>> >+ {
>>> >+ if
>>> >(checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(beanTypeArg,
>>> >requiredTypeArg))
>>> >+ {
>>> >+ ok++;
>>> >+ }
>>> >+ }
>>> > //Both type is actual type
>>> > else if((beanTypeArg instanceof Class) &&
>>>(requiredTypeArg
>>> >instanceof Class))
>>> > {
>>> >@@ -874,6 +754,7 @@ public final class ClassUtil
>>> > Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
>>> >
>>> > TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
>>> >+ //TODO respect other bounds
>>> > Type tvBound = tvBeanTypeArg.getBounds()[0];
>>> >
>>> > if(tvBound instanceof Class)
>>> >@@ -891,6 +772,13 @@ public final class ClassUtil
>>> >
>>> > return true;
>>> > }
>>> >+
>>> >+ public static boolean
>>> >checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(Type
>>>beanTypeArg,
>>> >Type requiredTypeArg)
>>> >+ {
>>> >+ ParameterizedType requiredType =
>>> >(ParameterizedType)requiredTypeArg;
>>> >+ //TODO respect parameters of required type
>>> >+ return
>>checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg,
>>> >requiredType.getRawType());
>>> >+ }
>>> >
>>> > public static boolean
>>> >checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(Type beanTypeArg,
>>>Type
>>> >requiredTypeArg)
>>> > {
>>> >@@ -972,16 +860,6 @@ public final class ClassUtil
>>> > }
>>> > }
>>> >
>>> >-
>>> >- public static Set<Type> setTypeHierarchy(Set<Type> set, Type
>>>clazz)
>>> >- {
>>> >- BeanTypeSetResolver resolver = new
>>>BeanTypeSetResolver(clazz);
>>> >- resolver.startConfiguration();
>>> >- set.addAll(resolver.getHierarchy());
>>> >-
>>> >- return set;
>>> >- }
>>> >-
>>> > /**
>>> > * Return raw class type for given type.
>>> > * @param type base type instance
>>> >
>>> >Added:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>G
>>>e
>>> >nericsUtil.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>> >a/org/apache/webbeans/util/GenericsUtil.java?rev=1502035&view=auto
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>G
>>>e
>>> >nericsUtil.java
>>> >(added)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>G
>>>e
>>> >nericsUtil.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -0,0 +1,625 @@
>>> >+/*
>>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>>> >+ * or more contributor license agreements. See the NOTICE file
>>> >+ * distributed with this work for additional information
>>> >+ * regarding copyright ownership. The ASF licenses this file
>>> >+ * to you 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.apache.webbeans.util;
>>> >+
>>> >+import java.lang.reflect.Array;
>>> >+import java.lang.reflect.Constructor;
>>> >+import java.lang.reflect.Field;
>>> >+import java.lang.reflect.GenericArrayType;
>>> >+import java.lang.reflect.Member;
>>> >+import java.lang.reflect.Method;
>>> >+import java.lang.reflect.ParameterizedType;
>>> >+import java.lang.reflect.Type;
>>> >+import java.lang.reflect.TypeVariable;
>>> >+import java.lang.reflect.WildcardType;
>>> >+import java.util.ArrayList;
>>> >+import java.util.HashSet;
>>> >+import java.util.List;
>>> >+import java.util.Set;
>>> >+
>>> >+import org.apache.webbeans.config.OwbParametrizedTypeImpl;
>>> >+import org.apache.webbeans.exception.inject.DefinitionException;
>>> >+
>>> >+/**
>>> >+ * Utility classes for generic type operations.
>>> >+ */
>>> >+public final class GenericsUtil
>>> >+{
>>> >+ public static boolean satisfiesDependency(Type
>>>injectionPointType,
>>> >Type beanType)
>>> >+ {
>>> >+ validate(injectionPointType);
>>> >+ if (injectionPointType instanceof TypeVariable ||
>>> >injectionPointType instanceof WildcardType || injectionPointType
>>> >instanceof
>>> >GenericArrayType)
>>> >+ {
>>> >+ throw new DefinitionException("Injection point cannot
>>>define
>>> >Type Variable " + injectionPointType);
>>> >+ }
>>> >+ if (beanType instanceof TypeVariable || beanType instanceof
>>> >WildcardType || beanType instanceof GenericArrayType)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType, beanType);
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ Type injectionPointRawType = injectionPointType
>>>instanceof
>>> >ParameterizedType?
>>>((ParameterizedType)injectionPointType).getRawType():
>>> >injectionPointType;
>>> >+ Type beanRawType = beanType instanceof ParameterizedType?
>>> >((ParameterizedType)beanType).getRawType(): beanType;
>>> >+
>>> >+ return ClassUtil.isSame(injectionPointRawType,
>>>beanRawType)?
>>> >isAssignableFrom(injectionPointType, beanType): false;
>>> >+ }
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * 5.2.3 and 5.2.4
>>> >+ */
>>> >+ public static boolean isAssignableFrom(Type requiredType, Type
>>> >beanType)
>>> >+ {
>>> >+ if (requiredType instanceof Class)
>>> >+ {
>>> >+ return isAssignableFrom((Class<?>)requiredType,
>>>beanType);
>>> >+ }
>>> >+ else if (requiredType instanceof ParameterizedType)
>>> >+ {
>>> >+ return isAssignableFrom((ParameterizedType)requiredType,
>>> >beanType);
>>> >+ }
>>> >+ else if (requiredType instanceof TypeVariable)
>>> >+ {
>>> >+ return isAssignableFrom((TypeVariable<?>)requiredType,
>>> >beanType);
>>> >+ }
>>> >+ else if (requiredType instanceof GenericArrayType)
>>> >+ {
>>> >+ return isAssignableFrom((GenericArrayType)requiredType,
>>> >beanType);
>>> >+ }
>>> >+ else if (requiredType instanceof WildcardType)
>>> >+ {
>>> >+ return isAssignableFrom((WildcardType)requiredType,
>>> >beanType);
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ throw new IllegalArgumentException("Unsupported type " +
>>> >requiredType.getClass());
>>> >+ }
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(Class<?>
>>>injectionPointType,
>>> >Type beanType)
>>> >+ {
>>> >+ if (beanType instanceof Class)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType,
>>> >(Class<?>)beanType);
>>> >+ }
>>> >+ else if (beanType instanceof TypeVariable)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType,
>>> >(TypeVariable<?>)beanType);
>>> >+ }
>>> >+ else if (beanType instanceof ParameterizedType)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType,
>>> >(ParameterizedType)beanType);
>>> >+ }
>>> >+ else if (beanType instanceof GenericArrayType)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType,
>>> >(GenericArrayType)beanType);
>>> >+ }
>>> >+ else if (beanType instanceof WildcardType)
>>> >+ {
>>> >+ return isAssignableFrom((Type)injectionPointType,
>>> >(WildcardType)beanType);
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ throw new IllegalArgumentException("Unsupported type " +
>>> >injectionPointType.getClass());
>>> >+ }
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(Class<?>
>>>injectionPointType,
>>> >Class<?> beanType)
>>> >+ {
>>> >+ return ClassUtil.isClassAssignable(injectionPointType,
>>beanType);
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(Class<?>
>>>injectionPointType,
>>> >TypeVariable<?> beanType)
>>> >+ {
>>> >+ for (Type bounds: beanType.getBounds())
>>> >+ {
>>> >+ if (isAssignableFrom(injectionPointType, bounds))
>>> >+ {
>>> >+ return true;
>>> >+ }
>>> >+ }
>>> >+ return false;
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * CDI Spec. 5.2.4: "A parameterized bean type is considered
>>> >assignable to a raw required type
>>> >+ * if the raw types are identical and all type parameters of the
>>bean
>>> >type are either unbounded type variables or java.lang.Object."
>>> >+ */
>>> >+ private static boolean isAssignableFrom(Class<?>
>>>injectionPointType,
>>> >ParameterizedType beanType)
>>> >+ {
>>> >+ if (beanType.getRawType() != injectionPointType)
>>> >+ {
>>> >+ return false; //raw types don't match
>>> >+ }
>>> >+ for (Type typeArgument: beanType.getActualTypeArguments())
>>> >+ {
>>> >+ if (typeArgument == Object.class)
>>> >+ {
>>> >+ continue;
>>> >+ }
>>> >+ if (!(typeArgument instanceof TypeVariable))
>>> >+ {
>>> >+ return false; //neither object nor type variable
>>> >+ }
>>> >+ TypeVariable<?> typeVariable =
>>(TypeVariable<?>)typeArgument;
>>> >+ for (Type bounds: typeVariable.getBounds())
>>> >+ {
>>> >+ if (bounds != Object.class)
>>> >+ {
>>> >+ return false; //bound type variable
>>> >+ }
>>> >+ }
>>> >+ }
>>> >+ return true;
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(Class<?>
>>>injectionPointType,
>>> >GenericArrayType beanType)
>>> >+ {
>>> >+ if (!injectionPointType.isArray())
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+ return
>>>isAssignableFrom(injectionPointType.getComponentType(),
>>> >beanType.getGenericComponentType());
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(Type injectionPointType,
>>> >WildcardType beanType)
>>> >+ {
>>> >+ for (Type bounds: beanType.getLowerBounds())
>>> >+ {
>>> >+ if (!isAssignableFrom(bounds, injectionPointType))
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+ }
>>> >+ for (Type bounds: beanType.getUpperBounds())
>>> >+ {
>>> >+ if (isAssignableFrom(injectionPointType, bounds))
>>> >+ {
>>> >+ return true;
>>> >+ }
>>> >+ }
>>> >+ return false;
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(ParameterizedType
>>> >injectionPointType, Type beanType)
>>> >+ {
>>> >+ if (beanType instanceof Class)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType,
>>> >(Class<?>)beanType);
>>> >+ }
>>> >+ else if (beanType instanceof TypeVariable)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType,
>>> >(TypeVariable<?>)beanType);
>>> >+ }
>>> >+ else if (beanType instanceof ParameterizedType)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType,
>>> >(ParameterizedType)beanType);
>>> >+ }
>>> >+ else if (beanType instanceof WildcardType)
>>> >+ {
>>> >+ return isAssignableFrom((Type)injectionPointType,
>>> >(WildcardType)beanType);
>>> >+ }
>>> >+ else if (beanType instanceof GenericArrayType)
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ throw new IllegalArgumentException("Unsupported type " +
>>> >injectionPointType.getClass());
>>> >+ }
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(ParameterizedType
>>> >injectionPointType, Class<?> beanType)
>>> >+ {
>>> >+ return isAssignableFrom(injectionPointType.getRawType(),
>>> >beanType);
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(ParameterizedType
>>> >injectionPointType, TypeVariable<?> beanType)
>>> >+ {
>>> >+ for (Type bounds: beanType.getBounds())
>>> >+ {
>>> >+ if (isAssignableFrom(injectionPointType, bounds))
>>> >+ {
>>> >+ return true;
>>> >+ }
>>> >+ }
>>> >+ return false;
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * CDI Spec. 5.2.4
>>> >+ */
>>> >+ private static boolean isAssignableFrom(ParameterizedType
>>> >injectionPointType, ParameterizedType beanType)
>>> >+ {
>>> >+ if (injectionPointType.getRawType() != beanType.getRawType())
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+ Type[] injectionPointTypeArguments =
>>> >injectionPointType.getActualTypeArguments();
>>> >+ Type[] beanTypeArguments = beanType.getActualTypeArguments();
>>> >+ for (int i = 0; i < injectionPointTypeArguments.length; i++)
>>> >+ {
>>> >+ if (!isAssignableFrom(injectionPointTypeArguments[i],
>>> >beanTypeArguments[i]))
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+ }
>>> >+ return true;
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(TypeVariable<?>
>>> >injectionPointType, Type beanType)
>>> >+ {
>>> >+ for (Type bounds: injectionPointType.getBounds())
>>> >+ {
>>> >+ if (!isAssignableFrom(bounds, beanType))
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+ }
>>> >+ return true;
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(GenericArrayType
>>> >injectionPointType, Type beanType)
>>> >+ {
>>> >+ throw new UnsupportedOperationException("Not yet
>>>implementeds");
>>> >+ }
>>> >+
>>> >+ private static boolean isAssignableFrom(WildcardType
>>> >injectionPointType, Type beanType)
>>> >+ {
>>> >+ for (Type bounds: injectionPointType.getLowerBounds())
>>> >+ {
>>> >+ if (!isAssignableFrom(beanType, bounds))
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+ }
>>> >+ for (Type bounds: injectionPointType.getUpperBounds())
>>> >+ {
>>> >+ if (!isAssignableFrom(bounds, beanType))
>>> >+ {
>>> >+ return false;
>>> >+ }
>>> >+ }
>>> >+ return true;
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * Resolves the actual type of the specified field for the type
>>> >hierarchy specified by the given subclass
>>> >+ */
>>> >+ public static Type resolveType(Class<?> subclass, Field field)
>>> >+ {
>>> >+ return resolveType(field.getGenericType(), new
>>> >TypeVariableResolver(subclass, field.getDeclaringClass()));
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * Resolves the actual return type of the specified method for
>>>the
>>> >type hierarchy specified by the given subclass
>>> >+ */
>>> >+ public static Type resolveReturnType(Class<?> subclass, Method
>>> >method)
>>> >+ {
>>> >+ return resolveType(method.getGenericReturnType(), new
>>> >TypeVariableResolver(subclass, method.getDeclaringClass()));
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * Resolves the actual parameter types of the specified
>>>constructor
>>> >for the type hierarchy specified by the given subclass
>>> >+ */
>>> >+ public static Type[] resolveParameterTypes(Class<?> subclass,
>>> >Constructor<?> constructor)
>>> >+ {
>>> >+ return resolveTypes(constructor.getGenericParameterTypes(),
>>>new
>>> >TypeVariableResolver(subclass, constructor.getDeclaringClass()));
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * Resolves the actual parameter types of the specified method
>>>for
>>> >the
>>> >type hierarchy specified by the given subclass
>>> >+ */
>>> >+ public static Type[] resolveParameterTypes(Class<?> subclass,
>>>Method
>>> >method)
>>> >+ {
>>> >+ return resolveTypes(method.getGenericParameterTypes(), new
>>> >TypeVariableResolver(subclass, method.getDeclaringClass()));
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * Resolves the actual type of the specified type for the type
>>> >hierarchy specified by the given subclass
>>> >+ */
>>> >+ public static Type resolveType(Type type, Class<?> subclass,
>>>Member
>>> >member)
>>> >+ {
>>> >+ return resolveType(type, new TypeVariableResolver(subclass,
>>> >member.getDeclaringClass()));
>>> >+ }
>>> >+
>>> >+ private static Type resolveType(Type type, TypeVariableResolver
>>> >resolver)
>>> >+ {
>>> >+ if (type instanceof Class)
>>> >+ {
>>> >+ return type;
>>> >+ }
>>> >+ else if (type instanceof ParameterizedType)
>>> >+ {
>>> >+ ParameterizedType parameterizedType =
>>> >(ParameterizedType)type;
>>> >+ Type[] resolvedTypes =
>>> >resolveTypes(parameterizedType.getActualTypeArguments(), resolver);
>>> >+ return new
>>> >OwbParametrizedTypeImpl(parameterizedType.getOwnerType(),
>>> >parameterizedType.getRawType(), resolvedTypes);
>>> >+ }
>>> >+ else if (type instanceof TypeVariable)
>>> >+ {
>>> >+ TypeVariable<?> variable = (TypeVariable<?>)type;
>>> >+ return resolver.resolve(variable);
>>> >+ }
>>> >+ else if (type instanceof WildcardType)
>>> >+ {
>>> >+ Type[] resolvedTypes = resolveTypes(((WildcardType)
>>> >type).getUpperBounds(), resolver);
>>> >+ return
>>> >resolveType(getMostSpecificType(getRawTypes(resolvedTypes, resolver),
>>> >resolvedTypes), resolver);
>>> >+ }
>>> >+ else if (type instanceof GenericArrayType)
>>> >+ {
>>> >+ Type componentType =
>>> >resolveType(((GenericArrayType)type).getGenericComponentType(),
>>resolver);
>>> >+ Class<?> componentClass = getRawType(componentType,
>>> >resolver);
>>> >+ return Array.newInstance(componentClass, 0).getClass();
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ throw new IllegalArgumentException("Unsupported type " +
>>> >type.getClass().getName());
>>> >+ }
>>> >+ }
>>> >+
>>> >+ public static Type[] resolveTypes(Type[] types,
>>>TypeVariableResolver
>>> >resolution)
>>> >+ {
>>> >+ Type[] resolvedTypeArguments = new Type[types.length];
>>> >+ for (int i = 0; i < types.length; i++)
>>> >+ {
>>> >+ resolvedTypeArguments[i] = resolveType(types[i],
>>resolution);
>>> >+ }
>>> >+ return resolvedTypeArguments;
>>> >+ }
>>> >+
>>> >+ public static Set<Type> getTypeClosure(Type type, Class<?>
>>> >owningClass, Class<?> declaringClass)
>>> >+ {
>>> >+ Set<Type> typeClosure = new HashSet<Type>();
>>> >+ typeClosure.add(Object.class);
>>> >+ fillTypeHierarchy(typeClosure, type, new
>>> >TypeVariableResolver(owningClass, declaringClass));
>>> >+ return typeClosure;
>>> >+ }
>>> >+
>>> >+ private static void fillTypeHierarchy(Set<Type> set, Type type,
>>> >TypeVariableResolver resolver)
>>> >+ {
>>> >+ if (type == null)
>>> >+ {
>>> >+ return;
>>> >+ }
>>> >+ Type resolvedType = GenericsUtil.resolveType(type, resolver);
>>> >+ set.add(resolvedType);
>>> >+ Class<?> resolvedClass =
>>>GenericsUtil.getRawType(resolvedType,
>>> >resolver);
>>> >+ if (resolvedClass.getSuperclass() != null)
>>> >+ {
>>> >+ fillTypeHierarchy(set,
>>>resolvedClass.getGenericSuperclass(),
>>> >resolver.add(resolvedClass));
>>> >+ }
>>> >+ for (Type interfaceType:
>>>resolvedClass.getGenericInterfaces())
>>> >+ {
>>> >+ fillTypeHierarchy(set, interfaceType,
>>> >resolver.add(resolvedClass, interfaceType));
>>> >+ }
>>> >+ }
>>> >+
>>> >+ static <T> Class<T> getRawType(Type type, TypeVariableResolver
>>> >resolver)
>>> >+ {
>>> >+ if (type instanceof Class)
>>> >+ {
>>> >+ return (Class<T>)type;
>>> >+ }
>>> >+ else if (type instanceof ParameterizedType)
>>> >+ {
>>> >+ return getRawType(((ParameterizedType)
>>>type).getRawType(),
>>> >resolver);
>>> >+ }
>>> >+ else if ((type instanceof TypeVariable) || (type instanceof
>>> >WildcardType) || (type instanceof GenericArrayType))
>>> >+ {
>>> >+ Type resolvedType = resolveType(type, resolver);
>>> >+ if (resolvedType instanceof TypeVariable)
>>> >+ {
>>> >+ TypeVariable<?> variable =
>>(TypeVariable<?>)resolvedType;
>>> >+ return
>>> >getRawType(resolveType(getRawType(variable.getBounds(), resolver),
>>> >resolver), resolver);
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ return getRawType(resolvedType, resolver);
>>> >+ }
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ throw new IllegalArgumentException("Unsupported type " +
>>> >type.getClass().getName());
>>> >+ }
>>> >+ }
>>> >+
>>> >+ private static Type getRawType(Type[] types, TypeVariableResolver
>>> >resolver)
>>> >+ {
>>> >+ Class<?>[] rawTypes = getRawTypes(types, resolver);
>>> >+ Class<?>[] classTypes = getClassTypes(rawTypes);
>>> >+ if (classTypes.length > 0)
>>> >+ {
>>> >+ return getMostSpecificType(classTypes, types);
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ return getMostSpecificType(rawTypes, types);
>>> >+ }
>>> >+ }
>>> >+
>>> >+ private static <T> Class<T>[] getRawTypes(Type[] types,
>>> >TypeVariableResolver resolver)
>>> >+ {
>>> >+ Class<T>[] rawTypes = new Class[types.length];
>>> >+ for (int i = 0; i < types.length; i++)
>>> >+ {
>>> >+ rawTypes[i] = getRawType(types[i], resolver);
>>> >+ }
>>> >+ return rawTypes;
>>> >+ }
>>> >+
>>> >+ private static Type getMostSpecificType(Class<?>[] types, Type[]
>>> >genericTypes)
>>> >+ {
>>> >+ Class<?> mostSpecificType = types[0];
>>> >+ int mostSpecificIndex = 0;
>>> >+ for (int i = 0; i < types.length; i++)
>>> >+ {
>>> >+ if (mostSpecificType.isAssignableFrom(types[i]))
>>> >+ {
>>> >+ mostSpecificType = types[i];
>>> >+ mostSpecificIndex = i;
>>> >+ }
>>> >+ }
>>> >+ return genericTypes[mostSpecificIndex];
>>> >+ }
>>> >+
>>> >+ private static Class<?>[] getClassTypes(Class<?>[] rawTypes)
>>> >+ {
>>> >+ List<Class<?>> classTypes = new ArrayList<Class<?>>();
>>> >+ for (Class<?> rawType : rawTypes)
>>> >+ {
>>> >+ if (!rawType.isInterface())
>>> >+ {
>>> >+ classTypes.add(rawType);
>>> >+ }
>>> >+ }
>>> >+ return classTypes.toArray(new Class[classTypes.size()]);
>>> >+ }
>>> >+
>>> >+ private static Type validate(Type type)
>>> >+ {
>>> >+ if (!(type instanceof Class)
>>> >+ && !(type instanceof ParameterizedType)
>>> >+ && !(type instanceof TypeVariable)
>>> >+ && !(type instanceof GenericArrayType)
>>> >+ && !(type instanceof WildcardType))
>>> >+ {
>>> >+ throw new IllegalArgumentException("Unsupported type " +
>>> >type.getClass());
>>> >+ }
>>> >+ return type;
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * resolves actual types of a TypeVariable for a specific type
>>> >hierarchy
>>> >+ */
>>> >+ private static class TypeVariableResolver
>>> >+ {
>>> >+ private List<TypeVariableDeclaration> declarations = new
>>> >ArrayList<TypeVariableDeclaration>();
>>> >+
>>> >+ private TypeVariableResolver(List<TypeVariableDeclaration>
>>> >implementation)
>>> >+ {
>>> >+ this.declarations = implementation;
>>> >+ }
>>> >+
>>> >+ public TypeVariableResolver(Class<?> subclass, Class<?>
>>> >declaringClass)
>>> >+ {
>>> >+ declarations.add(new TypeVariableDeclaration(subclass,
>>> >subclass.getGenericSuperclass()));
>>> >+ while (declaringClass != subclass &&
>>> >declaringClass.isAssignableFrom(subclass))
>>> >+ {
>>> >+ subclass = subclass.getSuperclass();
>>> >+ declarations.add(new
>>>TypeVariableDeclaration(subclass,
>>> >subclass.getGenericSuperclass()));
>>> >+ }
>>> >+ }
>>> >+
>>> >+ public Type resolve(TypeVariable<?> variable)
>>> >+ {
>>> >+ if (declarations.size() < 2)
>>> >+ {
>>> >+ return getRawType(variable.getBounds(), this);
>>> >+ }
>>> >+ int hierarchyIndex = declarations.size() - 1;
>>> >+ TypeVariableDeclaration typeVariableImplementation =
>>> >declarations.get(hierarchyIndex);
>>> >+ TypeVariable<?>[] typeParameters =
>>> >typeVariableImplementation.getDeclaredTypeParameters();
>>> >+ int typeIndex = -1;
>>> >+ for (int i = 0; i < typeParameters.length; i++)
>>> >+ {
>>> >+ if
>>> >(variable.getName().equals(typeParameters[i].getName()))
>>> >+ {
>>> >+ typeIndex = i;
>>> >+ break;
>>> >+ }
>>> >+ }
>>> >+ if (typeIndex == -1)
>>> >+ {
>>> >+ // type erasure
>>> >+ return Object.class;
>>> >+ }
>>> >+ TypeVariableDeclaration declaration =
>>> >declarations.get(hierarchyIndex - 1);
>>> >+ Type genericClass = declaration.getAssignment();
>>> >+ if (genericClass instanceof ParameterizedType)
>>> >+ {
>>> >+ ParameterizedType classType =
>>> >(ParameterizedType)genericClass;
>>> >+ return
>>> >resolveType(classType.getActualTypeArguments()[typeIndex], remove());
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ TypeVariable<?>[] typeVariables =
>>> >declaration.getDeclaredTypeParameters();
>>> >+ if (typeVariables.length > typeIndex)
>>> >+ {
>>> >+ return resolveType(typeVariables[typeIndex],
>>> >remove());
>>> >+ }
>>> >+ else
>>> >+ {
>>> >+ return Object.class; //type erasure
>>> >+ }
>>> >+ }
>>> >+ }
>>> >+
>>> >+ public TypeVariableResolver add(Class<?> type)
>>> >+ {
>>> >+ return add(type, type.getGenericSuperclass());
>>> >+ }
>>> >+
>>> >+ public TypeVariableResolver add(Class<?> declaringClass, Type
>>> >assignment)
>>> >+ {
>>> >+ List<TypeVariableDeclaration> declarations = new
>>> >ArrayList<TypeVariableDeclaration>(this.declarations);
>>> >+ declarations.add(new
>>>TypeVariableDeclaration(declaringClass,
>>> >assignment));
>>> >+ return new TypeVariableResolver(declarations);
>>> >+ }
>>> >+
>>> >+ public TypeVariableResolver remove()
>>> >+ {
>>> >+ List<TypeVariableDeclaration> declarations = new
>>> >ArrayList<TypeVariableDeclaration>(this.declarations);
>>> >+ declarations.remove(declarations.size() - 1);
>>> >+ return new TypeVariableResolver(declarations);
>>> >+ }
>>> >+ }
>>> >+
>>> >+ /**
>>> >+ * A declaration of type variables along with its assignments
>>> >+ */
>>> >+ private static class TypeVariableDeclaration
>>> >+ {
>>> >+ private Class<?> declaringClass;
>>> >+ private Type assignment;
>>> >+
>>> >+ public TypeVariableDeclaration(Class<?> declaringClass, Type
>>> >assignment)
>>> >+ {
>>> >+ this.declaringClass = declaringClass;
>>> >+ this.assignment = assignment;
>>> >+ }
>>> >+
>>> >+ public Type getAssignment()
>>> >+ {
>>> >+ return assignment;
>>> >+ }
>>> >+
>>> >+ public TypeVariable<?>[] getDeclaredTypeParameters()
>>> >+ {
>>> >+ return declaringClass.getTypeParameters();
>>> >+ }
>>> >+ }
>>> >+
>>> >+ private static class TypeErasureException extends Exception
>>> >+ {
>>> >+ public TypeErasureException()
>>> >+ {
>>> >+ super("generic type information not available");
>>> >+ }
>>> >+ }
>>> >+}
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>W
>>>e
>>> >bBeansUtil.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/ja
>>v
>>>
>>>a/org/apache/webbeans/util/WebBeansUtil.java?rev=1502035&r1=1502034&r2=1
>>>5
>>>0
>>> >2035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>W
>>>e
>>> >bBeansUtil.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/
>>>W
>>>e
>>> >bBeansUtil.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -1058,16 +1058,7 @@ public final class WebBeansUtil
>>> > {
>>> > Type type = injectionPoint.getType();
>>> >
>>> >- Class<?> candidateClazz = null;
>>> >- if(type instanceof Class)
>>> >- {
>>> >- candidateClazz = (Class<?>)type;
>>> >- }
>>> >- else if(type instanceof ParameterizedType)
>>> >- {
>>> >- ParameterizedType pt = (ParameterizedType)type;
>>> >- candidateClazz = (Class<?>)pt.getRawType();
>>> >- }
>>> >+ Class<?> candidateClazz = ClassUtil.getClass(type);
>>> >
>>> > if(!candidateClazz.isAssignableFrom(Instance.class))
>>> > {
>>> >
>>> >Modified:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/decorators/tests/GenericDecoratorTest.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/ja
>>v
>>>
>>>a/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.jav
>>>a
>>>?
>>> >rev=1502035&r1=1502034&r2=1502035&view=diff
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/decorators/tests/GenericDecoratorTest.java
>>> >(original)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/decorators/tests/GenericDecoratorTest.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -86,5 +86,4 @@ public class GenericDecoratorTest extend
>>> > DecoratedBean decoratedBean =
>>>getInstance(DecoratedBean.class);
>>> > Assert.assertTrue(decoratedBean.isDecoratorCalled());
>>> > }
>>> >-
>>> >}
>>> >
>>> >Added:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Bar.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/ja
>>v
>>>
>>>a/org/apache/webbeans/newtests/injection/generics/Bar.java?rev=1502035&v
>>>i
>>>e
>>> >w=auto
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Bar.java
>>> >(added)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Bar.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -0,0 +1,77 @@
>>> >+/*
>>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>>> >+ * or more contributor license agreements. See the NOTICE file
>>> >+ * distributed with this work for additional information
>>> >+ * regarding copyright ownership. The ASF licenses this file
>>> >+ * to you 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.apache.webbeans.newtests.injection.generics;
>>> >+
>>> >+import java.util.List;
>>> >+
>>> >+import javax.enterprise.event.Observes;
>>> >+import javax.enterprise.inject.Typed;
>>> >+import javax.inject.Inject;
>>> >+
>>> >+@Typed
>>> >+public class Bar<A, B> {
>>> >+
>>> >+ @Inject
>>> >+ @GenericQualifier
>>> >+ private Baz<A> baz;
>>> >+
>>> >+ @Inject
>>> >+ @GenericQualifier
>>> >+ private A a;
>>> >+
>>> >+ @Inject
>>> >+ private Baz<List<B>> bBazList;
>>> >+ private A[] aArray;
>>> >+ private Baz<A> aBazEvent;
>>> >+ private A aObserverInjectionPoint;
>>> >+
>>> >+ @Inject
>>> >+ public void setAArray(A[] aArray) {
>>> >+ this.aArray = aArray;
>>> >+ }
>>> >+
>>> >+ public void observeBaz(@Observes Baz<A> baz, @GenericQualifier A
>>>a)
>>{
>>> >+ this.aBazEvent = baz;
>>> >+ this.aObserverInjectionPoint = a;
>>> >+ }
>>> >+
>>> >+ public Baz<A> getBaz() {
>>> >+ return this.baz;
>>> >+ }
>>> >+
>>> >+ public Baz<List<B>> getBBazList() {
>>> >+ return this.bBazList;
>>> >+ }
>>> >+
>>> >+ public A getA() {
>>> >+ return this.a;
>>> >+ }
>>> >+
>>> >+ public A[] getAArray() {
>>> >+ return this.aArray;
>>> >+ }
>>> >+
>>> >+ public Baz<A> getABazEvent() {
>>> >+ return this.aBazEvent;
>>> >+ }
>>> >+
>>> >+ public A getAObserverInjectionPoint() {
>>> >+ return this.aObserverInjectionPoint;
>>> >+ }
>>> >+}
>>> >\ No newline at end of file
>>> >
>>> >Added:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/BarVetoExtension.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/ja
>>v
>>>
>>>a/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java?
>>>r
>>>e
>>> >v=1502035&view=auto
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/BarVetoExtension.java
>>> >(added)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/BarVetoExtension.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -0,0 +1,34 @@
>>> >+/*
>>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>>> >+ * or more contributor license agreements. See the NOTICE file
>>> >+ * distributed with this work for additional information
>>> >+ * regarding copyright ownership. The ASF licenses this file
>>> >+ * to you 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.apache.webbeans.newtests.injection.generics;
>>> >+
>>> >+import javax.enterprise.event.Observes;
>>> >+import javax.enterprise.inject.spi.Extension;
>>> >+import javax.enterprise.inject.spi.ProcessAnnotatedType;
>>> >+
>>> >+public class BarVetoExtension implements Extension {
>>> >+
>>> >+ public void vetoBar(@Observes ProcessAnnotatedType<?>
>>> >annotatedTypeEvent)
>>> >+ {
>>> >+ if
>>>
>>>>(annotatedTypeEvent.getAnnotatedType().getJavaClass().equals(Bar.class)
>>>>)
>>> >+ {
>>> >+ annotatedTypeEvent.veto();
>>> >+ }
>>> >+ }
>>> >+}
>>> >
>>> >Added:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Baz.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/ja
>>v
>>>
>>>a/org/apache/webbeans/newtests/injection/generics/Baz.java?rev=1502035&v
>>>i
>>>e
>>> >w=auto
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Baz.java
>>> >(added)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/Baz.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -0,0 +1,23 @@
>>> >+/*
>>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>>> >+ * or more contributor license agreements. See the NOTICE file
>>> >+ * distributed with this work for additional information
>>> >+ * regarding copyright ownership. The ASF licenses this file
>>> >+ * to you 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.apache.webbeans.newtests.injection.generics;
>>> >+
>>> >+public class Baz<T> {
>>> >+
>>> >+}
>>> >
>>> >Added:
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/BazSubclass.java
>>> >URL:
>>> >
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/ja
>>v
>>>
>>>a/org/apache/webbeans/newtests/injection/generics/BazSubclass.java?rev=1
>>>5
>>>0
>>> >2035&view=auto
>>>
>>>========================================================================
>>>=
>>>=
>>> >====
>>> >---
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/BazSubclass.java
>>> >(added)
>>> >+++
>>>
>>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newte
>>>s
>>>t
>>> >s/injection/generics/BazSubclass.java
>>> >Wed Jul 10 22:48:58 2013
>>> >@@ -0,0 +1,27 @@
>>> >+/*
>>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>>> >+ * or more contributor license agreements. See the NOTICE file
>>> >+ * distributed with this work for additional information
>>> >+ * regarding copyright ownership. The ASF licenses this file
>>> >+ * to you 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.apache.webbeans.newtests.injection.generics;
>>> >+
>>> >+
>>> >+public class BazSubclass extends Baz<String> {
>>> >+
>>> >+ public BazSubclass(String string)
>>> >+ {
>>> >+ }
>>> >+}
>
Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
Posted by Arne Limburg <ar...@openknowledge.de>.
I fixed that one, too.
But I wonder why this part of the tck does not run within the OWB build.
Does anyone know why, or how to enable it?
Cheers,
Arne
Am 12.07.13 11:06 schrieb "Romain Manni-Bucau" unter
<rm...@gmail.com>:
>we still have 2 issues on tomee:
>
>org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrder
>Test
>and
>org.jboss.jsr299.tck.interceptors.tests.lifecycleCallback.order.Invocation
>OrderTest
>
>Romain Manni-Bucau
>Twitter: @rmannibucau
>Blog: http://rmannibucau.wordpress.com/
>LinkedIn: http://fr.linkedin.com/in/rmannibucau
>Github: https://github.com/rmannibucau
>
>
>
>2013/7/11 Mark Struberg <st...@yahoo.de>
>>
>>
>>
>> txs Arne, no need to excuse!
>>
>> "Wo gehobelt wird fallen Späne"
>>
>>
>> LieGrue,
>> strub
>>
>>
>>
>>
>> ________________________________
>> From: Arne Limburg <ar...@openknowledge.de>
>> To: "dev@openwebbeans.apache.og" <de...@openwebbeans.apache.org>
>> Sent: Thursday, 11 July 2013, 22:50
>> Subject: Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>webbeans-impl/src/main/java/org/apache/webbeans/component/>webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
>webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
>>
>>
>> Sorry guys,
>>
>> I extended a test of OWB to reproduce the problem and fixed it.
>> Should work fine now.
>> Plz let me know if anything does not work.
>>
>> Cheers,
>> Arne
>>
>>
>> Am 11.07.13 15:57 schrieb "Mark Struberg" unter <st...@yahoo.de>:
>>
>> >yikes, this also stales my development team :/
>> >
>> >Arne, I will rollback this commit and start a new deployment.
>> >
>> >LieGrue,
>> >strub
>> >
>> >
>> >
>> >
>> >________________________________
>> > From: Romain Manni-Bucau <rm...@gmail.com>
>> >To: openwebbeans-dev <de...@openwebbeans.apache.org>
>> >Sent: Thursday, 11 July 2013, 12:51
>> >Subject: Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>> >webbeans-impl/src/main/java/org/apache/webbeans/component/
>> >webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
>> >webbeans-impl/src/main/java/org/apache/webbeans/config/
>> >webbeans-impl/sr...
>> >
>> >
>> >Hi Arne,
>> >
>> >this commit broke openejb CDi 1.0 TCKs
>> >
>> >basically
>>
>>org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEvent
>>T
>> >est
>> >is no more passing, any idea?
>> >
>> >basically we observes now too much events.
>> >
>> >if you want to give a try on openejb just checkout tomee trunk then
>>build
>> >(mvn clean install -pl tck/cdi-embedded -am -Dmaven.test.skip=true)
>>then
>> >fo
>> >in tck/cdi-embedded module, update the pom to point to failing.xml
>testng
>> >config:
>> >
>> ><suiteXmlFile>src/test/resources/failing.xml</suiteXmlFile>
>> >
>> >and put in this file:
>> >
>> ><?xml version="1.0" encoding="UTF-8"?>
>> ><suite name="CDI TCK" verbose="0">
>> > <test name="CDI TCK">
>> > <classes>
>> > <class
>>
>>name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.Containe
>>r
>> >EventTest"/>
>> > </classes>
>> > </test>
>> ></suite>
>> >
>> >then simply run mvn clean install on this module and you'll get the
>> >failure
>> >
>> >
>> >any help is welcomed ;)
>> >
>> >*Romain Manni-Bucau*
>> >*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
>> >*Blog:
>> >**http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
>> >*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
>> >*Github: https://github.com/rmannibucau*
>> >
>> >
>> >
>> >---------- Forwarded message ----------
>> >From: <ar...@apache.org>
>> >Date: 2013/7/11
>> >Subject: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>> >webbeans-impl/src/main/java/org/apache/webbeans/component/
>> >webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
>> >webbeans-impl/src/main/java/org/apache/webbeans/config/
>> >webbeans-impl/sr...
>> >To: commits@openwebbeans.apache.org
>> >
>> >
>> >Author: arne
>> >Date: Wed Jul 10 22:48:58 2013
>> >New Revision: 1502035
>> >
>> >URL: http://svn.apache.org/r1502035
>> >Log:
>> >OWB-878: Re-implemented generic handling
>> >
>> >Added:
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/G
>>e
>> >nericsUtil.java
>> >
>>
>>opnwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/inject/
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/inject/generic/
>> > - copied from r1502033,
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/u
>>n
>> >ittests/inject/generic/
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
> >s/injection/generics/
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Bar.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/BarVetoExtension.java
> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Baz.java
>> >
>>
>>>openwebbeans/trunk/webbens-impl/src/test/java/org/apache/webbeans/newtes
>>>t
>> >s/injection/generics/BazSubclass.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Foo.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/GenericBeanTest.java
>> > - copied, changed from r1502033,
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/u
>>n
>> >ittests/inject/generic/GenericBeanTest.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/GenericFactory.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/GenericQualifier.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/GenericsTest.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/util/G
>>e
>> >nericsUtilTest.java
>> >Removed:
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config
>>/
>> >BeanTypeSetResolver.java
>> >
>>
>>openwebbeans/trunk/webbans-impl/src/main/java/org/apache/webbeans/decora
>>t
>> >or/DecoratorResolverRules.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/inject/generic/GenericBeanTest.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/u
>>n
>> >ittests/inject/generic/
>> >Modified:
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/AbstractProducerBean.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/ProducerFieldBean.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/ProducerMethodBean.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/DecoratorBeanBuilder.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/InterceptorBeanBuilder.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/MethodProducerFactory.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeanscompon
>>e
>> >nt/creation/ProducerFieldBeansBuilder.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/ProducerMethodBeansBuilder.java
>> >
>>
>>openwebeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config
>>/
>> >OwbParametrizedTypeImpl.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contai
>>n
>> >er/BeanManagerImpl.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contai
>>n
>> >er/InjectionResolver.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decora
>>t
>> >or/DecoratorsManager.java
>> >
>>
>>>openwebbeans/trunk/wbbeans-impl/src/main/java/org/apache/webbeans/event/
>>>O
>> >bserverMethodImpl.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject
>>/
>> >implInjectionPointFactory.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject
>>/
>> >impl/InjectionPointImpl.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AbstractAnnotated.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AbstractAnnotatedMember.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedConstructorImpl.java
>> >
>>
>>>openwebbeans/trunk/ebbeans-impl/src/main/java/org/apache/webbeans/portab
>>>l
>> >e/AnnotatedFieldImpl.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedMethodImpl.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedParameterImpl.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedTypeImpl.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/mai/java/org/apache/webbeans/util/C
>>l
>> >assUtil.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/W
>>e
>> >bBeansUtil.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/decorators/tests/GenericDecoratorTest.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/promethods/beans/MethodTypeProduces1.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/u
>>n
>> >ittests/clazzClazzTest.java
>> >
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/u
>>n
>> >ittests/inject/parametrized/GenericClassTest.java
>> >
>>
>>openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plu
>>g
>> >in/OpenWebBeansJsfPlugin.java
>> >
>>
>>openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12
>>/
>> >plugin/OpenWebBeansJsfPlugin.java
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/AbstractProducerBean.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/component/AbstractProducerBean.java?rev=1502035&r1=
>>1
>> >502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/AbstractProducerBean.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/AbstractProducerBean.java
>> >Wed Jul 10 2:48:58 2013
>> >@@ -67,7 +67,7 @@ public class AbstractProducerBean<T> ext
>> >
>> > @Override
>> > public Class<T> getReturnType()
>> >- {
>> >+ {
>> > return returnType;
>> > }
>> >
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/ProducerFieldBean.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/component/ProducerFieldBean.java?rev=1502035&r1=150
>>2
>> >034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/ProducerFieldBean.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/ProducerFieldBean.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -24,7 +24,6 @@ import java.lang.reflect.Field;
>> >import javax.enterprise.context.spi.CreationalContext;
>> >
>> >import org.apache.webbeans.component.spi.ProducerFactory;
>> >-import org.apache.webbeans.util.ClassUtil;
>> >import org.apache.webbeans.util.WebBeansUtil;
>> >
>> >/**
>> >@@ -108,7 +107,7 @@ public class ProducerFieldBean<T> extend
>> > " with passivating scope @%s" +
>> > " must be Serializable";
>> >
>>
>>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScop
>>e
>> >(),
>> >- ClassUtil.isClassAssignable(Serializable.class,
>> >getReturnType()), errorMessage, producerField.getName(),
>> >+ getReturnType() instanceof Serializable, errorMessage,
>> >producerField.getName(),
>> > getBeanClass().getName(), getScope().getName());
>> > }
>> >
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/ProducerMethodBean.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/component/ProducerMethodBean.java?rev=1502035&r1=15
>>0
>> >2034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/ProducerMethodBean.java
> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/ProducerMethodBean.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -25,7 +25,6 @@ import javax.enterprise.context.spi.Crea
>> >
>> >import org.apache.webbeans.component.creation.MethodProducerFactory;
>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>> >-import org.apache.webbeans.util.ClassUtil;
>> >import org.apache.webbeans.util.WebBeansUtil;
>> >
>> >/**
>> >@@ -150,7 +149,7 @@ public class ProducerMethodBean<T> exten
>> > " with passivating scope @%s" +
>> > " must be Serializable";
>> >
>>
>>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScop
>>e
>> >(),
>> >- ClassUtil.isClassAssignable(Serializable.class,
>> >getReturnType()), errorMessage, creatorMethod.getName(),
>> >getBeanClass().getName(),
>> >+ getReturnType() instanceof Serializable, errorMessage,
>> >creatorMethod.getName(), getBeanClass().getName(),
>> > getScope().getName());
>> >
>> > }
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/DecoratorBeanBuilder.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=15
>>0
>> >2035&r1=1502034&r2=1502035&view=diff
>>
>>========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/DecoratorBeanBuilder.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbean-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/DecoratorBeanBuilder.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -29,11 +29,12 @@ import javax.enterprise.inject.spi.Annot
>> >import javax.enterprise.inject.spi.AnnotatedType;
>> >import javax.enterprise.inject.spi.InjectionPoint;
>> >import javax.inject.Injec;
>> >+
>> >+import java.io.Serializable;
>> >import java.lang.annotation.Annotation;
>> >import java.lang.reflect.AnnotatedElement;
>> >import java.lang.reflect.Constructor;
>> >import java.lang.reflect.Type;
>> >-import java.lang.reflect.TypeVariable;
>> >import java.util.ArrayList;
>> >import java.util.HashSet;
>> >import java.util.Iterator;
>> >@@ -46,13 +47,12 @@ import org.apache.webbeans.coponent.Bea
>> >import org.apache.webbeans.component.DecoratorBean;
>> >import org.apache.webbeans.component.WebBeansType;
>> >import org.apache.webbeans.config.OWBLogConst;
>> >-import org.apache.webbeans.config.OwbParametrizedTypeImpl;
>> >import org.apache.webbeans.config.WebBeansContext;
>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>> >import org.apache.webbeans.logger.WebBeansLoggerFacade;
>> >import org.apache.webbeans.util.Asserts;
>> >import org.apache.webbeans.util.ClassUtil;
>> >-
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >
>> >/**
>> > * Bean builder for {@link
>> >org.apache.webbeans.component.InterceptorBean}s.
>> >@@ -165,57 +165,15 @@ public class DecoratorBeanBuilder<T>
>> >
>> > private void defineDecoratedTypes()
>> > {
>> >- // remove them first to avoid to loop over them
>> >- decoratedTypes.remove(Object.class);
>> >- decoratedTypes.remove(java.io.Serializable.class); /* 8.1 */
>> >-
>> >- Type beanClass = annotatedType.getJavaClass();
>> >- do
>> >- {
>> >- final Class<?> clazz = ClassUtil.getClass(beanClass);
>> >- final Type toRemove;
>> >- if
>>(ClassUtil.isDefinitionContainsTypeVariables(beanClass))
>> >- {
>> >- final OwbParametrizedTypeImpl pt = new
>> >OwbParametrizedTypeImpl(clazz.getDeclaringClass(), clazz);
>> >- final TypeVariable<?>[] tvs =
>>clazz.getTypeParameters();
>> >- for(TypeVariable<?> tv : tvs)
>> >- {
>> >- pt.addTypeArgument(tv);
>> >- }
>> >- toRemove = pt;
>> >- //X TODO generic support setDecoratorGenericType(pt);
>> >- }
>> >- else
>> >- {
>> >- toRemove = beanClass;
>> >- //X TODO generic suport
>> >setDecoratorGenericType(beanClass);
>> >- }
>> >-
>> >- final Iterator<Type> iterator = decoratedTypes.iterator();
>> >- while (iterator.hasNext())
>> >- {
>> >- final Type next = iterator.next();
>> >-
>> >- // if raw class is the same and is assignable (geneics
>> >handling)
>> >- if (ClassUtil.getClass(next) == clazz &&
>> >ClassUtil.isAssignable(toRemove, next))
>> >- {
>> >- iterator.remove();
>> >- }
>> >- }
>> >-
>> >- beanClass = clazz.getGenericSuperclass();
>> >- } while (beanClass != Object.class);
>> >-
>> >-
>> >+ decoratedTypes.remove(Serializable.class); /* 8.1 */
>> > for (Iterator<Type> i = decoratedTypes.iterator();
>>i.hasNext();
>)
>> > {
>> > Type t = i.next();
>> >- if (t instanceof Class<?> &&
>> >ignoredDecoratorInterfaces.contains(((Class) t).getName()))
>> >+ if (!ClassUtil.getClass(t).isInterface() || (t instanceof
>> >Class<?> && ignoredDecoratorInterfaces.contains(((Class)
>>t).getName())))
>> > {
>> > i.remove();
>> > }
>> }
>> >-
>> > }
>> >
>> > private void defineDelegate(Set<InjectionPoint> injectionPoints)
>> >@@ -258,7 +216,7 @@ public class DecoratorBeanBuilder<T>
>> > }
>> > }
>> >
>> >- delgateType = ipFound.getType();
>> >+ delegateType = GenericsUtil.resolveType(ipFound.getType(),
>> >annotatedType.getJavaClass(), ipFound.getMember());
>> > delegateQualifiers = ipFound.getQualifiers();
>> >
>> > for (Type decType : decoratedTypes)
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/InterceptorBeanBuilder.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=
>>1
>> >502035&r1=1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/InterceptorBeanBuilder.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/InterceptorBeanBuilder.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -317,11 +317,11 @@ public abstract class InterceptorBeanBui
>> > {
>> > if (clazz == null)
>> > {
>> >- clazz =
>> >annotatedMethod.getDeclaringType().getJavaClass();
>> >+ clazz =
>> >annotatedMethod.getJavaMember().getDeclaringClass();
>> > }
>> >
>> > // check for same class -> Exception
>> >- if (alreadyDefined.getDeclaringType().getJavaClass() ==
>> >clazz)
>> >+ if (alreadyDefined.getJavaMember().getDeclaringClass() ==
>> >clazz)
>> > {
>> > throw new WebBeansConfigurationException("Only one
>> >Interceptor of a certain type is allowed per class, but multiple found
>>in
>> >class "
>> > +
>> >annotatedMethod.getDeclaringType().getJavaClass().getName()
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/MethodProducerFactory.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/component/creation/MethodProducerFactory.java?rev=1
>>5
>> >02035&r1=1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/MethodProducerFactory.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/MethodProducerFactory.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -41,7 +41,7 @@ import org.apache.webbeans.exception.Web
>> >import org.apache.webbeans.portable.ProducerMethodProducer;
>> >import org.apache.webbeans.util.AnnotationUtil;
>> >import org.apache.webbeans.util.Asserts;
>> >-import org.apache.webbeans.util.ClassUtil;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >
>> >public class MethodProducerFactory<P> implements ProducerFactory<P>
>> >{
>> >@@ -98,7 +98,7 @@ public class MethodProducerFactory<P> im
>> > {
>> > if
>> >(annotatedParameter.isAnnotationPresent(Disposes.class))
>> > {
>> >- if
>> >(!ClassUtil.isAssignable(annotatedParameter.getBaseType(),
>> >producerMethod.getBaseType()))
>> >+ if
>> >(!GenericsUtil.satisfiesDependency(producerMethod.getBaseType(),
>> >annotatedParameter.getBaseType()))
>> > {
>> > continue;
>> > }
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/ProducerFieldBeansBuilder.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java?r
>>e
>> >v=1502035&r1=1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/ProducerFieldBeansBuilder.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/ProducerFieldBeansBuilder.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -77,7 +77,7 @@ public class ProducerFieldBeansBuilder<T
>> > Set<AnnotatedField<? super T>> annotatedFields =
>> >annotatedType.getFields();
>> > for(AnnotatedField<? super T> annotatedField: annotatedFields)
>> > {
>> >- if(annotatedField.isAnnotationPresent(Produces.class) &&
>>
>>annotatedField.getDeclaringType().getJavaClass().equals(annotatedType.get
>>J
>> >avaClass()))
>> >+ if(annotatedField.isAnnotationPresent(Produces.class) &&
>>
>>annotatedField.getJavaMember().getDeclaringClass().equals(annotatedType.g
>>e
>> >tJavaClass()))
>> > {
>> > Type genericType = annotatedField.getBaseType();
>> >
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/ProducerMethodBeansBuilder.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java?
>>r
>> >ev=1502035&r1=1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/ProducerMethodBeansBuilder.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compon
>>e
>> >nt/creation/ProducerMethodBeansBuilder.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -26,7 +26,7 @@ import org.apache.webbeans.config.WebBea
>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>> >import org.apache.webbeans.util.AnnotationUtil;
>> >import org.apache.webbeans.util.Asserts;
>> >-import org.apache.webbeans.util.ClassUtil;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >import org.apache.webbeans.util.WebBeansUtil;
>> >
>> >import javax.enterprise.event.Observes;
>> >@@ -77,7 +77,7 @@ public class ProducerMethodBeansBuilder<
>> > {
>> > boolean enterprise =
>> >EnterpriseBeanMarker.class.isInstance(bean);
>> > if(annotatedMethod.isAnnotationPresent(Produces.class) &&
>> >-
>>
>>(annotatedMethod.getDeclaringType().getJavaClass().equals(annotatedType.g
>>e
>> >tJavaClass())
>> >+
>>
>>(annotatedMethod.getJavaMember().getDeclaringClass().equals(annotatedType
>>.
>> >getJavaClass())
>> > || (enterprise &&
>>
>>annotatedType.getJavaClass().isAssignableFrom(annotatedType.getJavaClass(
>>)
>> >))))
>> > {
>> > checkProducerMethodForDeployment(annotatedMethod);
>> >@@ -126,7 +126,7 @@ public class ProducerMethodBeansBuilder<
>> > boolean found = false;
>> > for (final ProducerMethodBean<?> producer :
>> >producerBeans)
>> > {
>> >- if
>>(ClassUtil.isAssignable(param.getBaseType(),
>> >producer.getCreatorMethod().getGenericReturnType()))
>> >+ if
>>
>>(GenericsUtil.satisfiesDependency(producer.getCreatorMethod().getGenericR
>>e
>> >turnType(),
>> >param.getBaseType()))
>> > {
>> > found = true;
>> > break;
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config
>>/
>> >OwbParametrizedTypeImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/config/OwbParametrizedTypeImpl.java?rev=1502035&r1=
>>1
>> >502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config
>>/
>> >OwbParametrizedTypeImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config
>>/
>> >OwbParametrizedTypeImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -20,9 +20,7 @@ package org.apache.webbeans.config;
>> >
>> >import java.lang.reflect.ParameterizedType;
>> >import java.lang.reflect.Type;
>> >-import java.util.ArrayList;
>> >import java.util.Arrays;
>> >-import java.util.List;
>> >
>> >/**
>> > * Custom parametrized type implementation.
>> >@@ -38,30 +36,26 @@ public class OwbParametrizedTypeImpl imp
>> > private final Type rawType;
>> >
>> > /**Actual type arguments*/
>> >- private final List<Type> types = new ArrayList<Type>();
>> >+ private final Type[] types;
>> >
>> > /**
>> > * New instance.
>> > * @param owner owner
>> > * @param raw raw
>> > */
>> >- public OwbParametrizedTypeImpl(Type owner, Type raw)
>> >+ public OwbParametrizedTypeImpl(Type owner, Type raw, Type...
>>types)
>> > {
>> > this.owner = owner;
>> >- rawType = raw;
>> >+ this.rawType = raw;
>> >+ this.types = types;
>> > }
>> >
>> > @Override
>> > public Type[] getActualTypeArguments()
>> > {
>> >- return types.toArray(new Type[types.size()]);
>> >+ return types.clone();
>> > }
>> >
>> >- public void addTypeArgument(Type type)
>> >- {
>> >- types.add(type);
>> >- }
>> >-
>> > @Override
>> > public Type getOwnerType()
>> > {
>> >@@ -82,12 +76,7 @@ public class OwbParametrizedTypeImpl imp
>> > @Override
>> > public int hashCode()
>> > {
>> >- final int prime = 31;
>> >- int result = 1;
>> >- result = prime * result +
>> >Arrays.hashCode(getActualTypeArguments());
>> >- result = prime * result + ((owner == null) ? 0 :
>> >owner.hashCode());
>> >- result = prime * result + ((rawType == null) ? 0 :
>> >rawType.hashCode());
>> >- return result;
>> >+ return Arrays.hashCode(types) ^ (owner == null ? 0 :
>> >owner.hashCode()) ^ (rawType == null ? 0 : rawType.hashCode());
>> > }
>> >
>> > /* (non-Javadoc)
>> >@@ -96,47 +85,24 @@ public class OwbParametrizedTypeImpl imp
>> > @Override
>> > public boolean equals(Object obj)
>> > {
>> >- if (this == obj)
>> >- {
>> >- return true;
>> >- }
>> >- if (obj == null)
>> >- {
>> >- return false;
>> >- }
>> >- if (getClass() != obj.getClass())
>> >- {
>> >- return false;
>> >- }
>> >- OwbParametrizedTypeImpl oher = (OwbParametrizedTypeImpl) obj;
>> >- if (!Arrays.equals(getActualTypeArguments(),
>> >other.getActualTypeArguments()))
>> >- {
>> >- return false;
>> >- }
>> >- if (owner == null)
>> >- {
>> >- if (other.owner != null)
>> >- {
>> >- return false;
>> >- }
>> >- }
>> >- else if (!owner.equals(other.owner))
>> >- {
>> >- return false;
>> >- }
>> >- if (rawType == null)
>> >- {
>> >- if (other.rawType != null)
>> >- {
>> >- return false;
>> >- }
>> >- }
>> >- else if (!rawType.equals(other.rawType))
>> >- {
>> >- return false;
>> >- }
>> >-
>> >- return true;
>> >+ if (this == obj)
>> >+ {
>> >+ return true;
>> >+ }
>> >+ else if (obj instanceof ParameterizedType)
>> >+ {
>> >+ ParameterizedType that = (ParameterizedType) obj;
>> >+ Type thatOwnerType = that.getOwnerType();
>> >+ Type thatRawType = that.getRawType();
>> >+ return (owner == null ? thatOwnerType == null :
>> >owner.equals(thatOwnerType))
>> >+ && (rawType == null ? thatRawType == null :
>> >rawType.equals(thatRawType))
>> >+ && Arrays.equals(types,
>that.getActualTypeArguments());
>> >+ }
>> >+ else
>> >+ {
>> >+ return false;
>> >+ }
>> >+
>> > }
>> >
>> > public String toString()
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contai
>>n
>> >er/BeanManagerImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/container/BeanManagerImpl.java?rev=1502035&r1=15020
>>3
>> >4&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contai
>>n
>> >er/BeanManagerImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contai
>>n
>> >er/BeanManagerImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -86,6 +86,7 @@ import org.apache.webbeans.spi.plugins.O
>> >import org.apache.webbeans.util.AnnotationUtil;
>> >import org.apache.webbeans.util.Asserts;
>> >import org.apache.webbeans.util.ClassUtil;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >imort org.apache.webbeans.util.WebBeansUtil;
>> >import org.apache.webbeans.xml.WebBeansXMLConfigurator;
>> >
>> >@@ -688,7 +689,7 @@ public class BeanManagerImpl extends Abs
>> > //Check type if bean type is given
>> > if(beanType != null)
>> > {
>> >- if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
>> >beanType,
>> >bean instanceof NewBean) &&
>>!ClassUtil.isAssignable(bean.getBeanClass(),
>> >beanType))
>> >+ if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
>> >beanType,
>> >bean instanceof NewBean) && !GenericsUtil.satisfiesDependency(beanType,
>> >bean.getBeanClass()))
>> > {
>> > throw new IllegalArgumentException("Given bean type :
>>"
>+
>> >beanType + " is not applicable for the bean instance : " + bean);
>> > }
>> >@@ -747,7 +748,7 @@ public class BeanManagerImpl extends Abs
>> > {
>> > Type beanApiType = itBeanApiTypes.next();
>> >
>> >- if(ClassUtil.isAssignable(beanApiType, givenType))
>> >+ if(GenericsUtil.satisfiesDependency(givenType,
>>beanApiType))
>> > {
>> > return true;
>> > }
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contai
>>n
>> >er/InjectionResolver.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/container/InjectionResolver.java?rev=1502035&r1=150
>>2
>> >034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contai
>>n
>> >er/InjectionResolver.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contai
>>n
>> >er/InjectionResolver.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -50,6 +50,7 @@ import org.apache.webbeans.spi.ScannerSe
>> >import org.apache.webbeans.util.AnnotationUtil;
>> >import org.apache.webbeans.util.Asserts;
>> >import org.apache.webbeans.util.ClassUtil;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >import org.apache.webbeans.util.InjectionExceptionUtil;
>> >import org.apache.webbeans.util.WebBeansUtil;
>> >import static
>>
>>org.apache.webbeans.util.InjectionExceptionUtil.throwAmbiguousResolutionE
>>x
>> >ception;
>> >@@ -500,7 +501,7 @@ public class InjectionResolver
>> > for (Type componentApiType : component.getTypes())
>> > {
>> >
>> >- if (ClassUtil.isAssignable(componentApiType,
>> >injectionPointType))
>> >+ if
>> >(GenericsUtil.satisfiesDependency(injectionPointType,
>>componentApiType))
>> > {
>> > resolvedComponents.add(component);
>> > break;
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decora
>>t
>> >or/DecoratorsManager.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/decorator/DecoratorsManager.java?rev=1502035&r1=150
>>2
>> >034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decora
>>t
>> >or/DecoratorsManager.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decora
>>t
>> >or/DecoratorsManager.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -35,6 +35,7 @@ import org.apache.webbeans.config.WebBea
>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>> >import org.apache.webbeans.util.AnnotationUtil;
>> >import org.apache.webbeans.util.Asserts;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >
>> >public class DecoratorsManager
>> >{
>> >@@ -176,6 +177,7 @@ public class DecoratorsManager
>> >
>> > private boolean isDecoratorMatch(Decorator<?> decorator, Set<Type>
>> >apiTypes, Set<Annotation> annotations)
>> > {
>> >+ // 8.3.1
>> > if (!apiTypesMatchDelegateType(decorator, apiTypes))
>> > {
>> > return false;
>> >@@ -218,7 +220,7 @@ public class DecoratorsManager
>> > boolean ok = false;
>> > for (Type apiType : apiTypes)
>> > {
>> >- if
>> >(DecoratorResolverRules.compareType(decorator.getDelegateType(),
>apiType))
>> >+ if
>> >(GenericsUtil.satisfiesDependency(decorator.getDelegateType(),
>>apiType))
>> > {
>> > ok = true;
>> > break;
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/
>>O
>> >bserverMethodImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1502035&r1=150203
>>4
>> >&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/
>>O
>> >bserverMethodImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/
>>O
>> >bserverMethodImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -324,7 +324,7 @@ public class ObserverMethodImpl<T> imple
>> >
>> >annotationManager.getQualifierAnnotations(AnnotationUtil.
>> > asArray(parameter.getAnnotations()));
>> >
>> >- InjectionPoint point =
>> >InjectionPointFactory.getPartialInjectionPoint(bean,
>> >parameter.getBaseType(), parameter, bindingTypes);
>> >+ InjectionPoint point =
>> >InjectionPointFactory.getPartialInjectionPoint(bean, parameter,
>> >bindingTypes);
>> >
>> > //Get observer parameter instance
>> > @SuppressWarnings("unchecked")
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject
>>/
>> >impl/InjectionPointFactory.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1502035&
>>r
>> >1=1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject
>>/
>> >impl/InjectionPointFactory.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject
>>/
>> >impl/InjectionPointFactory.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -21,7 +21,6 @@ package org.apache.webbeans.inject.impl;
>> >import java.lang.annotation.Annotation;
>> >import java.lang.reflect.Method;
>> >import java.lang.reflect.Modifier;
>> >-import java.lang.reflect.Type;
>> >import java.lang.reflect.TypeVariable;
>> >import java.util.ArrayList;
>> >import java.util.Arrays;
>> >@@ -131,7 +130,7 @@ public class InjectionPointFactory
>> > }
>> > }
>> >
>> >- return new InjectionPointImpl(owner, annotField.getBaseType(),
>> >Arrays.asList(qualifierAnnots), annotField);
>> >+ return new InjectionPointImpl(owner,
>> >Arrays.asList(qualifierAnnots), annotField);
>> > }
>> >
>> > public <X> InjectionPoint buildInjectionPoint(Bean<?> owner,
>> >AnnotatedParameter<X> parameter)
>> >@@ -139,7 +138,7 @@ public class InjectionPointFactory
>> > Asserts.assertNotNull(parameter, "parameter parameter can not
>>be
>> >null");
>> > Set<Annotation> anns = parameter.getAnnotations();
>> > Annotation[] qualifierAnnots =
>>
>>webBeansContext.getAnnotationManager().getQualifierAnnotations(anns.toArr
>>a
>> >y(new
>> >Annotation[anns.size()]));
>> >- return new InjectionPointImpl(owner, parameter.getBaseType(),
>> >Arrays.asList(qualifierAnnots), parameter);
>> >+ return new InjectionPointImpl(owner,
>> >Arrays.asList(qualifierAnnots), parameter);
>> > }
>> >
>> > public <X> List<InjectionPoint> buildInjectionPoints(Bean<?>
>>owner,
>> >AnnotatedCallable<X> callable)
>> >@@ -165,9 +164,9 @@ public class InjectionPointFactory
>> > }
>> > }
>> >
>> >- public static InjectionPoint getPartialInjectionPoint(Bean<?>
>> >owner,Type type, AnnotatedParameter<?> parameter,
>>Annotation...bindings)
>> >+ public static InjectionPoint getPartialInjectionPoint(Bean<?>
>>owner,
>> >AnnotatedParameter<?> parameter, Annotation...bindings)
>> > {
>> >- return new InjectionPointImpl(owner, type,
>> >Arrays.asList(bindings), parameter);
>> >+ return new InjectionPointImpl(owner, Arrays.asList(bindings),
>> >parameter);
>> > }
>> >
>> > private void
>>validateInitializerConstructor(AnnotatedConstructor<?>
>> >constructor)
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject
>>/
>> >impl/InjectionPointImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1502035&r1=
>>1
>> >502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject
>>/
>> >impl/InjectionPointImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject
>>/
>> >impl/InjectionPointImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -71,15 +71,15 @@ class InjectionPointImpl implements Inje
>> >
>> > private boolean delegate;
>> >
>> >- InjectionPointImpl(Bean<?> ownerBean, Type type,
>> >Collection<Annotation> qualifiers, AnnotatedField<?> annotatedField)
>> >+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
>> >qualifiers, AnnotatedField<?> annotatedField)
>> > {
>> >- this(ownerBean, type, qualifiers, annotatedField,
>> >+ this(ownerBean, annotatedField.getBaseType(), qualifiers,
>> >annotatedField,
>> > annotatedField.getJavaMember(),
>> >annotatedField.isAnnotationPresent(Delegate.class),
>> >Modifier.isTransient(annotatedField.getJavaMember().getModifiers()));
>> > }
>> >
>> >- InjectionPointImpl(Bean<?> ownerBean, Type type,
>> >Collection<Annotation> qualifiers, AnnotatedParameter<?> parameter)
>> >+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
>> >qualifiers, AnnotatedParameter<?> parameter)
>> > {
>> >- this(ownerBean, type, qualifiers, parameter,
>> >parameter.getDeclaringCallable().getJavaMember(),
>> >parameter.isAnnotationPresent(Delegate.class), false);
>> >+ this(ownerBean, parameter.getBaseType(), qualifiers,
>>parameter,
>> >parameter.getDeclaringCallable().getJavaMember(),
>> >parameter.isAnnotationPresent(Delegate.class), false);
>> > }
>> >
>> > private InjectionPointImpl(Bean<?> ownerBean, Type type,
>> >Collection<Annotation> qualifiers, Annotated annotated, Member member,
>> >boolean delegate, boolean isTransient)
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AbstractAnnotated.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1502035&r1=1502
>>0
>> >34&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AbstractAnnotated.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AbstractAnnotated.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -32,6 +32,7 @@ import org.apache.webbeans.config.WebBea
>> >import org.apache.webbeans.exception.WebBeansConfigurationException;
>> >import org.apache.webbeans.util.AnnotationUtil;
>> >import org.apache.webbeans.util.ClassUtil;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >
>> >/**
>> > * Abstract implementation of the {@link Annotated} contract.
>> >@@ -52,7 +53,7 @@ abstract class AbstractAnnotated impleme
>> > private final WebBeansContext webBeansContext;
>> >
>> > /**
>> >- * Createa a new annotated element.
>> >+ * Creates a new annotated element.
>> > *
>> > * @param webBeansContext our WebBeansContext
>> > * @param baseType annotated element type
>> >@@ -142,18 +143,19 @@ abstract class AbstractAnnotated impleme
>> > {
>> > if (typeClosures == null)
>> > {
>> >- initTypeClosures();
>> >+ initTypeClosure();
>> > }
>> > return typeClosures;
>> > }
>> >
>> >- private synchronized void initTypeClosures()
>> >+ protected abstract Class<?> getOwningClass();
>> >+ protected abstract Class<?> getDeclaringClass();
>> >+
>> >+ private synchronized void initTypeClosure()
>> > {
>> > if (typeClosures == null)
>> > {
>> >- typeClosures = new HashSet<Type>();
>> >- typeClosures.add(Object.class);
>> >- ClassUtil.setTypeHierarchy(typeClosures, baseType);
>> >+ typeClosures = GenericsUtil.getTypeClosure(baseType,
>> >getOwningClass(), getDeclaringClass());
>> > Set<String> ignoredInterfaces =
>> >webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
>> > for (Iterator<Type> i = typeClosures.iterator();
>> >i.hasNext(); )
>> > {
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AbstractAnnotatedMember.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/portable/AbstractAnnotatedMember.java?rev=1502035&r
>>1
>> >=1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AbstractAnnotatedMember.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AbstractAnnotatedMember.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -42,7 +42,6 @@ abstract class AbstractAnnotatedMember<X
>> > /**Member type*/
>> > protected final Member javaMember;
>> >
>> >- @SuppressWarnings("unchecked")
>> > AbstractAnnotatedMember(WebBeansContext webBeansContext, Type
>> >baseType, Member javaMember, AnnotatedType<X> declaringType)
>> > {
>> > super(webBeansContext, baseType);
>> >@@ -83,6 +82,18 @@ abstract class AbstractAnnotatedMember<X
>> > return Modifier.isStatic(javaMember.getModifiers());
>> > }
>> >
>> >+ @Override
>> >+ protected Class<?> getOwningClass()
>> >+ {
>> >+ return declaringType.getJavaClass();
>> >+ }
>> >+
>> >+ @Override
>> >+ protected Class<?> getDeclaringClass()
>> >+ {
>> >+ return javaMember.getDeclaringClass();
>> >+ }
>> >+
>> > public String toString()
>> > {
>> > StringBuilder builder = new StringBuilder(super.toString());
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedConstructorImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/portable/AnnotatedConstructorImpl.java?rev=1502035&
>>r
>> >1=1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedConstructorImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedConstructorImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -19,6 +19,7 @@
>> >package org.apache.webbeans.portable;
>> >
>> >import org.apache.webbeans.config.WebBeansContext;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >
>> >import java.lang.reflect.Constructor;
>> >
>> >@@ -43,7 +44,7 @@ public class AnnotatedConstructorImpl<X>
>> > {
>> > super(webBeansContext, javaMember.getDeclaringClass(),
>> >javaMember,
>> >declaringType);
>> > setAnnotations(javaMember.getDeclaredAnnotations());
>> >- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
>> >javaMember.getParameterAnnotations());
>> >+
>>
>>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.g
>>e
>> >tJavaClass(),
>> >javaMember), javaMember.getParameterAnnotations());
>> > }
>> >
>> >
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedFieldImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/portable/AnnotatedFieldImpl.java?rev=1502035&r1=150
>>2
>> >034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedFieldImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedFieldImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -19,6 +19,7 @@
>> >package org.apache.webbeans.portable;
>> >
>> >import org.apache.webbeans.config.WebBeansContext;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >
>> >import java.lang.reflect.Field;
>> >
>> >@@ -43,7 +44,7 @@ public class AnnotatedFieldImpl<X> exten
>> > */
>> > AnnotatedFieldImpl(WebBeansContext webBeansContext, Field
>javaMember,
>> >AnnotatedType<X> declaringType)
>> > {
>> >- super(webBeansContext, javaMember.getGenericType(),
>> >javaMember,declaringType);
>> >+ super(webBeansContext,
>> >GenericsUtil.resolveType(declaringType.getJavaClass(), javaMember),
>> >javaMember,declaringType);
>> >
>> > setAnnotations(javaMember.getDeclaredAnnotations());
>> > }
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedMethodImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/portable/AnnotatedMethodImpl.java?rev=1502035&r1=15
>>0
>> >2034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedMethodImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedMethodImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -19,6 +19,7 @@
>> >package org.apache.webbeans.portable;
>> >
>> >import org.apache.webbeans.config.WebBeansContext;
>> >+import org.apache.webbeans.util.GenericsUtil;
>> >
>> >import java.lang.reflect.Method;
>> >
>> >@@ -41,11 +42,11 @@ class AnnotatedMethodImpl<X> extends Abs
>> > * @param declaringType declaring type
>> > * @param javaMember method
>> > */
>> >- AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
>> >javaMember,AnnotatedType<X> declaringType)
>> >+ AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
>> >javaMember, AnnotatedType<X> declaringType)
>> > {
>> >- super(webBeansContext, javaMember.getGenericReturnType(),
>> >javaMember,declaringType);
>> >+ super(webBeansContext,
>> >GenericsUtil.resolveReturnType(declaringType.getJavaClass(),
>>javaMember),
>> >javaMember,declaringType);
>> > setAnnotations(javaMember.getDeclaredAnnotations());
>> >- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
>> >javaMember.getParameterAnnotations());
>> >+
>>
>>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.g
>>e
>> >tJavaClass(),
>> >javaMember), javaMember.getParameterAnnotations());
>> > }
>> >
>> >
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedParameterImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/portable/AnnotatedParameterImpl.java?rev=1502035&r1
>>=
>> >1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedParameterImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedParameterImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -75,4 +75,16 @@ class AnnotatedParameterImpl<X> extends
>> >
>> > return builder.toString();
>> > }
>> >+
>> >+ @Override
>> >+ protected Class<?> getOwningClass()
>> >+ {
>> >+ return declaringCallable.getDeclaringType().getJavaClass();
>> >+ }
>> >+
>> >+ @Override
>> >+ protected Class<?> getDeclaringClass()
>> >+ {
>> >+ return declaringCallable.getJavaMember().getDeclaringClass();
>> >+ }
>> >}
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedTypeImpl.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1502035&r1=1502
>>0
>> >34&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedTypeImpl.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portab
>>l
>> >e/AnnotatedTypeImpl.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -132,6 +132,18 @@ class AnnotatedTypeImpl<X>
>> > return getState().methods;
>> > }
>> >
>> >+ @Override
>> >+ protected Class<?> getOwningClass()
>> >+ {
>> >+ return getJavaClass();
>> >+ }
>> >+
>> >+ @Override
>> >+ protected Class<?> getDeclaringClass()
>> >+ {
>> >+ return getJavaClass();
>> >+ }
>> >+
>> > private State getState()
>> > {
>> > State result = state;
>> >@@ -153,7 +165,6 @@ class AnnotatedTypeImpl<X>
>> > return result;
>> > }
>> >
>> >-
>> > private class State
>> > {
>> >
>> >@@ -230,12 +241,15 @@ class AnnotatedTypeImpl<X>
>> >
>> > if (supertype != null)
>> > {
>> >- fields.addAll(supertype.getFields());
>> >+ for (AnnotatedField<? super X> field:
>> >supertype.getFields())
>> >+ {
>> >+ fields.add(new
>> >AnnotatedFieldImpl<X>(getWebBeansContext(), field.getJavaMember(),
>> >AnnotatedTypeImpl.this));
>> >+ }
>> > for (AnnotatedMethod<? super X> method :
>> >supertype.getMethods())
>> > {
>> > if (!isOverridden(method))
>> > {
>> >- methods.add(method);
>> >+ methods.add(new
>> >AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(),
>> >AnnotatedTypeImpl.this));
>> > }
>> > }
>> > }
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/C
>>l
>> >assUtil.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/util/ClassUtil.java?rev=1502035&r1=1502034&r2=15020
>>3
>> >5&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/C
>>l
>> >assUtil.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/C
>>l
>> >assUtil.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -18,14 +18,6 @@
>> > */
>> >package org.apache.webbeans.util;
>> >
>> >-import org.apache.webbeans.config.BeanTypeSetResolver;
>> >-import org.apache.webbeans.exception.WebBeansException;
>> >-import org.apache.webbeans.exception.inject.DefinitionException;
>> >-
>> >-import javax.enterprise.event.Event;
>> >-import javax.enterprise.inject.spi.Bean;
>> >-import javax.enterprise.inject.spi.InjectionPoint;
>> >-import javax.inject.Provider;
>> >import java.lang.reflect.GenericArrayType;
>> >import java.lang.reflect.Method;
>> >import java.lang.reflect.Modifier;
>> >@@ -41,6 +33,11 @@ import java.util.List;
>> >import java.util.Map;
>> >import java.util.Set;
>> >
>> >+import javax.enterprise.inject.spi.InjectionPoint;
>> >+
>> >+import org.apache.webbeans.exception.WebBeansException;
>> >+import org.apache.webbeans.exception.inject.DefinitionException;
>> >+
>> >/**
>> > * Utility classes with respect to the class operations.
>> > *
>> >@@ -124,21 +121,24 @@ public final class ClassUtil
>> > return clazz.isMemberClass();
>> > }
>> >
>> >- public static Class<?> getPrimitiveWrapper(Class<?> clazz)
>> >+ public static boolean isSame(Type type1, Type type2)
>> > {
>> >- Asserts.nullCheckForClass(clazz);
>> >-
>> >- return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
>> >-
>> >+ if ((type1 instanceof Class) &&
>>((Class<?>)type1).isPrimitive())
>> >+ {
>> >+ type1 = PRIMITIVE_TO_WRAPPERS_MAP.get(type1);
>> >+ }
>> >+ if ((type2 instanceof Class) &&
>>((Class<?>)type2).isPrimitive())
>> >+ {
>> >+ type2 = PRIMITIVE_TO_WRAPPERS_MAP.get(type2);
>> >+ }
>> >+ return type1 == type2;
>> > }
>> >
>> >- public static Class<?> identityOrGetPrimitiveWrapper(Class<?>
>>clazz)
>> >+ public static Class<?> getPrimitiveWrapper(Class<?> clazz)
>> > {
>> >- if (clazz.isPrimitive())
>> >- {
>> >- return getPrimitiveWrapper(clazz);
>> >- }
>> >- return clazz;
>> >+ Asserts.nullCheckForClass(clazz);
>> >+
>> >+ return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
>> >
>> > }
>> >
>> >@@ -326,7 +326,6 @@ public final class ClassUtil
>> > return getObjectMethodNames().contains(methodName);
>> > }
>> >
>> >-
>> > /**
>> > * Returns true if type is an instance of
>> ><code>ParameterizedType</code>
>> > * else otherwise.
>> >@@ -426,131 +425,6 @@ public final class ClassUtil
>> > }
>> >
>> > /**
>> >- * See specification 5.2.3.
>> >- * @param beanType bean type
>> >- * @param requiredType required type
>> >- * @return true if assignable
>> >- */
>> >- public static boolean isAssignable(Type beanType, Type
>>requiredType)
>> >- {
>> >- Asserts.assertNotNull(beanType, "beanType parameter can not be
>> >null");
>> >- Asserts.assertNotNull(requiredType, "requiredType parameter
>>can
>> >not be null");
>> >-
>> >- //Bean and required types are ParametrizedType
>> >- if (beanType instanceof ParameterizedType && requiredType
>> >instanceof ParameterizedType)
>> >- {
>> >- return isAssignableForParametrized((ParameterizedType)
>> >beanType, (ParameterizedType) requiredType);
>> >- }
>> >- //Both type is class type
>> >- else if (beanType instanceof Class && requiredType instanceof
>> >Class)
>> >- {
>> >- Class<?> clzBeanType = (Class<?>)beanType;
>> >- Class<?> clzReqType = (Class<?>)requiredType;
>> >-
>> >- if(clzBeanType.isPrimitive())
>> >- {
>> >- clzBeanType = getPrimitiveWrapper(clzBeanType);
>> >- }
>> >-
>> >- if(clzReqType.isPrimitive())
>> >- {
>> >- clzReqType = getPrimitiveWrapper(clzReqType);
>> >- }
>> >-
>> >- return clzReqType.equals(clzBeanType);
>> >- }
>> >- //Bean type is Parametrized and required type is class type
>> >- else if(beanType instanceof ParameterizedType && requiredType
>> >instanceof Class)
>> >- {
>> >- boolean ok = true;
>> >- ParameterizedType ptBean = (ParameterizedType)beanType;
>> >- Class<?> clazzBeanType =
>> >identityOrGetPrimitiveWrapper((Class<?>)ptBean.getRawType());
>> >- Class<?> clazzReqType =
>> >identityOrGetPrimitiveWrapper((Class<?>)requiredType);
>> >- if(clazzBeanType.equals(clazzReqType))
>> >- {
>> >- Type[] beanTypeArgs =
>>ptBean.getActualTypeArguments();
>> >- for(Type actual : beanTypeArgs)
>> >- {
>> >- if(!ClassUtil.isUnboundedTypeVariable(actual))
>> >- {
>> >- if(actual instanceof Class)
>> >- {
>> >- Class<?> clazz = (Class<?>)actual;
>> >- if(!clazz.equals(Object.class))
>> >- {
>> >- ok = false;
>> >- break;
>> >- }
>> >- }
>> >- else
>> >- {
>> >- ok = false;
>> >- break;
>> >- }
>> >- }
>> >- }
>> >- }
>> >- else
>> >- {
>> >- ok = false;
>> >- }
>> >-
>> >-
>> >- return ok;
>> >- }
>> >- //Bean type is class and required type is parametrized
>> >- else if(beanType instanceof Class && requiredType instanceof
>> >ParameterizedType)
>> >- {
>> >- final Class<?> clazzBeanType = (Class<?>)beanType;
>> >- final ParameterizedType ptReq =
>> >(ParameterizedType)requiredType;
>> >- final Class<?> clazzReqType =
>>(Class<?>)ptReq.getRawType();
>> >- final Type genericSuperClass =
>> >clazzBeanType.getGenericSuperclass();
>> >-
>> >- if (Provider.class.isAssignableFrom(clazzReqType) ||
>> >- Event.class.isAssignableFrom(clazzReqType))
>> >- {
>> >- if (isClassAssignable(clazzReqType, clazzBeanType))
>> >- {
>> >- return true;
>> >- }
>> >- }
>> >- else if (Bean.class.isAssignableFrom(clazzReqType))
>> >- {
>> >- // May be Bean, Interceptor or Decorator and thus must
>> >match directly
>> >- if (clazzReqType.equals(clazzBeanType))
>> >- {
>> >- return true;
>> >- }
>> >- }
>> >- else if (genericSuperClass instanceof ParameterizedType)
>> >- {
>> >- final Type[] params = ((ParameterizedType)
>> >genericSuperClass).getActualTypeArguments();
>> >- final Type[] requiredParams = ((ParameterizedType)
>> >requiredType).getActualTypeArguments();
>> >- if (params.length != requiredParams.length)
>> >- {
>> >- return false;
>> >- }
>> >-
>> >- for (int i = 0; i < params.length; i++)
>> >- {
>> >- if (!isAssignable(params[i], requiredParams[i]))
>> >- {
>> >- return false;
>> >- }
>> >- }
>> >-
>> >- return isClassAssignable(clazzReqType, clazzBeanType);
>> >- }
>> >-
>> >- return false;
>> >- }
>> >- else
>> >- {
>> >- return false;
>> >- }
>> >- }
>> >-
>> >- /**
>> > * Checks that event is applicable
>> > * for the given observer type.
>> > * @param eventType event type
>> >@@ -718,7 +592,13 @@ public final class ClassUtil
>> > ok++;
>> > }
>> > }
>> >-
>> >+ else if (requiredTypeArg instanceof ParameterizedType &&
>> >beanTypeArg instanceof TypeVariable)
>> >+ {
>> >+ if
>> >(checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(beanTypeArg,
>> >requiredTypeArg))
>> >+ {
>> >+ ok++;
>> >+ }
>> >+ }
>> > //Both type is actual type
>> > else if((beanTypeArg instanceof Class) && (requiredTypeArg
>> >instanceof Class))
>> > {
>> >@@ -874,6 +754,7 @@ public final class ClassUtil
>> > Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
>> >
>> > TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
>> >+ //TODO respect other bounds
>> > Type tvBound = tvBeanTypeArg.getBounds()[0];
>> >
>> > if(tvBound instanceof Class)
>> >@@ -891,6 +772,13 @@ public final class ClassUtil
>> >
>> > return true;
>> > }
>> >+
>> >+ public static boolean
>> >checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(Type beanTypeArg,
>> >Type requiredTypeArg)
>> >+ {
>> >+ ParameterizedType requiredType =
>> >(ParameterizedType)requiredTypeArg;
>> >+ //TODO respect parameters of required type
>> >+ return
>checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg,
>> >requiredType.getRawType());
>> >+ }
>> >
>> > public static boolean
>> >checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(Type beanTypeArg,
>>Type
>> >requiredTypeArg)
>> > {
>> >@@ -972,16 +860,6 @@ public final class ClassUtil
>> > }
>> > }
>> >
>> >-
>> >- public static Set<Type> setTypeHierarchy(Set<Type> set, Type
>>clazz)
>> >- {
>> >- BeanTypeSetResolver resolver = new BeanTypeSetResolver(clazz);
>> >- resolver.startConfiguration();
>> >- set.addAll(resolver.getHierarchy());
>> >-
>> >- return set;
>> >- }
>> >-
>> > /**
>> > * Return raw class type for given type.
>> > * @param type base type instance
>> >
>> >Added:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/G
>>e
>> >nericsUtil.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>> >a/org/apache/webbeans/util/GenericsUtil.java?rev=1502035&view=auto
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/G
>>e
>> >nericsUtil.java
>> >(added)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/G
>>e
>> >nericsUtil.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -0,0 +1,625 @@
>> >+/*
>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>> >+ * or more contributor license agreements. See the NOTICE file
>> >+ * distributed with this work for additional information
>> >+ * regarding copyright ownership. The ASF licenses this file
>> >+ * to you 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.apache.webbeans.util;
>> >+
>> >+import java.lang.reflect.Array;
>> >+import java.lang.reflect.Constructor;
>> >+import java.lang.reflect.Field;
>> >+import java.lang.reflect.GenericArrayType;
>> >+import java.lang.reflect.Member;
>> >+import java.lang.reflect.Method;
>> >+import java.lang.reflect.ParameterizedType;
>> >+import java.lang.reflect.Type;
>> >+import java.lang.reflect.TypeVariable;
>> >+import java.lang.reflect.WildcardType;
>> >+import java.util.ArrayList;
>> >+import java.util.HashSet;
>> >+import java.util.List;
>> >+import java.util.Set;
>> >+
>> >+import org.apache.webbeans.config.OwbParametrizedTypeImpl;
>> >+import org.apache.webbeans.exception.inject.DefinitionException;
>> >+
>> >+/**
>> >+ * Utility classes for generic type operations.
>> >+ */
>> >+public final class GenericsUtil
>> >+{
>> >+ public static boolean satisfiesDependency(Type injectionPointType,
>> >Type beanType)
>> >+ {
>> >+ validate(injectionPointType);
>> >+ if (injectionPointType instanceof TypeVariable ||
>> >injectionPointType instanceof WildcardType || injectionPointType
>> >instanceof
>> >GenericArrayType)
>> >+ {
>> >+ throw new DefinitionException("Injection point cannot
>>define
>> >Type Variable " + injectionPointType);
>> >+ }
>> >+ if (beanType instanceof TypeVariable || beanType instanceof
>> >WildcardType || beanType instanceof GenericArrayType)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType, beanType);
>> >+ }
>> >+ else
>> >+ {
>> >+ Type injectionPointRawType = injectionPointType instanceof
>> >ParameterizedType?
>>((ParameterizedType)injectionPointType).getRawType():
>> >injectionPointType;
>> >+ Type beanRawType = beanType instanceof ParameterizedType?
>> >((ParameterizedType)beanType).getRawType(): beanType;
>> >+
>> >+ return ClassUtil.isSame(injectionPointRawType,
>>beanRawType)?
>> >isAssignableFrom(injectionPointType, beanType): false;
>> >+ }
>> >+ }
>> >+
>> >+ /**
>> >+ * 5.2.3 and 5.2.4
>> >+ */
>> >+ public static boolean isAssignableFrom(Type requiredType, Type
>> >beanType)
>> >+ {
>> >+ if (requiredType instanceof Class)
>> >+ {
>> >+ return isAssignableFrom((Class<?>)requiredType, beanType);
>> >+ }
>> >+ else if (requiredType instanceof ParameterizedType)
>> >+ {
>> >+ return isAssignableFrom((ParameterizedType)requiredType,
>> >beanType);
>> >+ }
>> >+ else if (requiredType instanceof TypeVariable)
>> >+ {
>> >+ return isAssignableFrom((TypeVariable<?>)requiredType,
>> >beanType);
>> >+ }
>> >+ else if (requiredType instanceof GenericArrayType)
>> >+ {
>> >+ return isAssignableFrom((GenericArrayType)requiredType,
>> >beanType);
>> >+ }
>> >+ else if (requiredType instanceof WildcardType)
>> >+ {
>> >+ return isAssignableFrom((WildcardType)requiredType,
>> >beanType);
>> >+ }
>> >+ else
>> >+ {
>> >+ throw new IllegalArgumentException("Unsupported type " +
>> >requiredType.getClass());
>> >+ }
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(Class<?>
>>injectionPointType,
>> >Type beanType)
>> >+ {
>> >+ if (beanType instanceof Class)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType,
>> >(Class<?>)beanType);
>> >+ }
>> >+ else if (beanType instanceof TypeVariable)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType,
>> >(TypeVariable<?>)beanType);
>> >+ }
>> >+ else if (beanType instanceof ParameterizedType)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType,
>> >(ParameterizedType)beanType);
>> >+ }
>> >+ else if (beanType instanceof GenericArrayType)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType,
>> >(GenericArrayType)beanType);
>> >+ }
>> >+ else if (beanType instanceof WildcardType)
>> >+ {
>> >+ return isAssignableFrom((Type)injectionPointType,
>> >(WildcardType)beanType);
>> >+ }
>> >+ else
>> >+ {
>> >+ throw new IllegalArgumentException("Unsupported type " +
>> >injectionPointType.getClass());
>> >+ }
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(Class<?>
>>injectionPointType,
>> >Class<?> beanType)
>> >+ {
>> >+ return ClassUtil.isClassAssignable(injectionPointType,
>beanType);
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(Class<?>
>>injectionPointType,
>> >TypeVariable<?> beanType)
>> >+ {
>> >+ for (Type bounds: beanType.getBounds())
>> >+ {
>> >+ if (isAssignableFrom(injectionPointType, bounds))
>> >+ {
>> >+ return true;
>> >+ }
>> >+ }
>> >+ return false;
>> >+ }
>> >+
>> >+ /**
>> >+ * CDI Spec. 5.2.4: "A parameterized bean type is considered
>> >assignable to a raw required type
>> >+ * if the raw types are identical and all type parameters of the
>bean
>> >type are either unbounded type variables or java.lang.Object."
>> >+ */
>> >+ private static boolean isAssignableFrom(Class<?>
>>injectionPointType,
>> >ParameterizedType beanType)
>> >+ {
>> >+ if (beanType.getRawType() != injectionPointType)
>> >+ {
>> >+ return false; //raw types don't match
>> >+ }
>> >+ for (Type typeArgument: beanType.getActualTypeArguments())
>> >+ {
>> >+ if (typeArgument == Object.class)
>> >+ {
>> >+ continue;
>> >+ }
>> >+ if (!(typeArgument instanceof TypeVariable))
>> >+ {
>> >+ return false; //neither object nor type variable
>> >+ }
>> >+ TypeVariable<?> typeVariable =
>(TypeVariable<?>)typeArgument;
>> >+ for (Type bounds: typeVariable.getBounds())
>> >+ {
>> >+ if (bounds != Object.class)
>> >+ {
>> >+ return false; //bound type variable
>> >+ }
>> >+ }
>> >+ }
>> >+ return true;
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(Class<?>
>>injectionPointType,
>> >GenericArrayType beanType)
>> >+ {
>> >+ if (!injectionPointType.isArray())
>> >+ {
>> >+ return false;
>> >+ }
>> >+ return isAssignableFrom(injectionPointType.getComponentType(),
>> >beanType.getGenericComponentType());
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(Type injectionPointType,
>> >WildcardType beanType)
>> >+ {
>> >+ for (Type bounds: beanType.getLowerBounds())
>> >+ {
>> >+ if (!isAssignableFrom(bounds, injectionPointType))
>> >+ {
>> >+ return false;
>> >+ }
>> >+ }
>> >+ for (Type bounds: beanType.getUpperBounds())
>> >+ {
>> >+ if (isAssignableFrom(injectionPointType, bounds))
>> >+ {
>> >+ return true;
>> >+ }
>> >+ }
>> >+ return false;
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(ParameterizedType
>> >injectionPointType, Type beanType)
>> >+ {
>> >+ if (beanType instanceof Class)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType,
>> >(Class<?>)beanType);
>> >+ }
>> >+ else if (beanType instanceof TypeVariable)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType,
>> >(TypeVariable<?>)beanType);
>> >+ }
>> >+ else if (beanType instanceof ParameterizedType)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType,
>> >(ParameterizedType)beanType);
>> >+ }
>> >+ else if (beanType instanceof WildcardType)
>> >+ {
>> >+ return isAssignableFrom((Type)injectionPointType,
>> >(WildcardType)beanType);
>> >+ }
>> >+ else if (beanType instanceof GenericArrayType)
>> >+ {
>> >+ return false;
>> >+ }
>> >+ else
>> >+ {
>> >+ throw new IllegalArgumentException("Unsupported type " +
>> >injectionPointType.getClass());
>> >+ }
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(ParameterizedType
>> >injectionPointType, Class<?> beanType)
>> >+ {
>> >+ return isAssignableFrom(injectionPointType.getRawType(),
>> >beanType);
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(ParameterizedType
>> >injectionPointType, TypeVariable<?> beanType)
>> >+ {
>> >+ for (Type bounds: beanType.getBounds())
>> >+ {
>> >+ if (isAssignableFrom(injectionPointType, bounds))
>> >+ {
>> >+ return true;
>> >+ }
>> >+ }
>> >+ return false;
>> >+ }
>> >+
>> >+ /**
>> >+ * CDI Spec. 5.2.4
>> >+ */
>> >+ private static boolean isAssignableFrom(ParameterizedType
>> >injectionPointType, ParameterizedType beanType)
>> >+ {
>> >+ if (injectionPointType.getRawType() != beanType.getRawType())
>> >+ {
>> >+ return false;
>> >+ }
>> >+ Type[] injectionPointTypeArguments =
>> >injectionPointType.getActualTypeArguments();
>> >+ Type[] beanTypeArguments = beanType.getActualTypeArguments();
>> >+ for (int i = 0; i < injectionPointTypeArguments.length; i++)
>> >+ {
>> >+ if (!isAssignableFrom(injectionPointTypeArguments[i],
>> >beanTypeArguments[i]))
>> >+ {
>> >+ return false;
>> >+ }
>> >+ }
>> >+ return true;
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(TypeVariable<?>
>> >injectionPointType, Type beanType)
>> >+ {
>> >+ for (Type bounds: injectionPointType.getBounds())
>> >+ {
>> >+ if (!isAssignableFrom(bounds, beanType))
>> >+ {
>> >+ return false;
>> >+ }
>> >+ }
>> >+ return true;
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(GenericArrayType
>> >injectionPointType, Type beanType)
>> >+ {
>> >+ throw new UnsupportedOperationException("Not yet
>>implementeds");
>> >+ }
>> >+
>> >+ private static boolean isAssignableFrom(WildcardType
>> >injectionPointType, Type beanType)
>> >+ {
>> >+ for (Type bounds: injectionPointType.getLowerBounds())
>> >+ {
>> >+ if (!isAssignableFrom(beanType, bounds))
>> >+ {
>> >+ return false;
>> >+ }
>> >+ }
>> >+ for (Type bounds: injectionPointType.getUpperBounds())
>> >+ {
>> >+ if (!isAssignableFrom(bounds, beanType))
>> >+ {
>> >+ return false;
>> >+ }
>> >+ }
>> >+ return true;
>> >+ }
>> >+
>> >+ /**
>> >+ * Resolves the actual type of the specified field for the type
>> >hierarchy specified by the given subclass
>> >+ */
>> >+ public static Type resolveType(Class<?> subclass, Field field)
>> >+ {
>> >+ return resolveType(field.getGenericType(), new
>> >TypeVariableResolver(subclass, field.getDeclaringClass()));
>> >+ }
>> >+
>> >+ /**
>> >+ * Resolves the actual return type of the specified method for the
>> >type hierarchy specified by the given subclass
>> >+ */
>> >+ public static Type resolveReturnType(Class<?> subclass, Method
>> >method)
>> >+ {
>> >+ return resolveType(method.getGenericReturnType(), new
>> >TypeVariableResolver(subclass, method.getDeclaringClass()));
>> >+ }
>> >+
>> >+ /**
>> >+ * Resolves the actual parameter types of the specified
>>constructor
>> >for the type hierarchy specified by the given subclass
>> >+ */
>> >+ public static Type[] resolveParameterTypes(Class<?> subclass,
>> >Constructor<?> constructor)
>> >+ {
>> >+ return resolveTypes(constructor.getGenericParameterTypes(),
>>new
>> >TypeVariableResolver(subclass, constructor.getDeclaringClass()));
>> >+ }
>> >+
>> >+ /**
>> >+ * Resolves the actual parameter types of the specified method for
>> >the
>> >type hierarchy specified by the given subclass
>> >+ */
>> >+ public static Type[] resolveParameterTypes(Class<?> subclass,
>>Method
>> >method)
>> >+ {
>> >+ return resolveTypes(method.getGenericParameterTypes(), new
>> >TypeVariableResolver(subclass, method.getDeclaringClass()));
>> >+ }
>> >+
>> >+ /**
>> >+ * Resolves the actual type of the specified type for the type
>> >hierarchy specified by the given subclass
>> >+ */
>> >+ public static Type resolveType(Type type, Class<?> subclass,
>>Member
>> >member)
>> >+ {
>> >+ return resolveType(type, new TypeVariableResolver(subclass,
>> >member.getDeclaringClass()));
>> >+ }
>> >+
>> >+ private static Type resolveType(Type type, TypeVariableResolver
>> >resolver)
>> >+ {
>> >+ if (type instanceof Class)
>> >+ {
>> >+ return type;
>> >+ }
>> >+ else if (type instanceof ParameterizedType)
>> >+ {
>> >+ ParameterizedType parameterizedType =
>> >(ParameterizedType)type;
>> >+ Type[] resolvedTypes =
>> >resolveTypes(parameterizedType.getActualTypeArguments(), resolver);
>> >+ return new
>> >OwbParametrizedTypeImpl(parameterizedType.getOwnerType(),
>> >parameterizedType.getRawType(), resolvedTypes);
>> >+ }
>> >+ else if (type instanceof TypeVariable)
>> >+ {
>> >+ TypeVariable<?> variable = (TypeVariable<?>)type;
>> >+ return resolver.resolve(variable);
>> >+ }
>> >+ else if (type instanceof WildcardType)
>> >+ {
>> >+ Type[] resolvedTypes = resolveTypes(((WildcardType)
>> >type).getUpperBounds(), resolver);
>> >+ return
>> >resolveType(getMostSpecificType(getRawTypes(resolvedTypes, resolver),
>> >resolvedTypes), resolver);
>> >+ }
>> >+ else if (type instanceof GenericArrayType)
>> >+ {
>> >+ Type componentType =
>> >resolveType(((GenericArrayType)type).getGenericComponentType(),
>resolver);
>> >+ Class<?> componentClass = getRawType(componentType,
>> >resolver);
>> >+ return Array.newInstance(componentClass, 0).getClass();
>> >+ }
>> >+ else
>> >+ {
>> >+ throw new IllegalArgumentException("Unsupported type " +
>> >type.getClass().getName());
>> >+ }
>> >+ }
>> >+
>> >+ public static Type[] resolveTypes(Type[] types,
>>TypeVariableResolver
>> >resolution)
>> >+ {
>> >+ Type[] resolvedTypeArguments = new Type[types.length];
>> >+ for (int i = 0; i < types.length; i++)
>> >+ {
>> >+ resolvedTypeArguments[i] = resolveType(types[i],
>resolution);
>> >+ }
>> >+ return resolvedTypeArguments;
>> >+ }
>> >+
>> >+ public static Set<Type> getTypeClosure(Type type, Class<?>
>> >owningClass, Class<?> declaringClass)
>> >+ {
>> >+ Set<Type> typeClosure = new HashSet<Type>();
>> >+ typeClosure.add(Object.class);
>> >+ fillTypeHierarchy(typeClosure, type, new
>> >TypeVariableResolver(owningClass, declaringClass));
>> >+ return typeClosure;
>> >+ }
>> >+
>> >+ private static void fillTypeHierarchy(Set<Type> set, Type type,
>> >TypeVariableResolver resolver)
>> >+ {
>> >+ if (type == null)
>> >+ {
>> >+ return;
>> >+ }
>> >+ Type resolvedType = GenericsUtil.resolveType(type, resolver);
>> >+ set.add(resolvedType);
>> >+ Class<?> resolvedClass = GenericsUtil.getRawType(resolvedType,
>> >resolver);
>> >+ if (resolvedClass.getSuperclass() != null)
>> >+ {
>> >+ fillTypeHierarchy(set,
>>resolvedClass.getGenericSuperclass(),
>> >resolver.add(resolvedClass));
>> >+ }
>> >+ for (Type interfaceType: resolvedClass.getGenericInterfaces())
>> >+ {
>> >+ fillTypeHierarchy(set, interfaceType,
>> >resolver.add(resolvedClass, interfaceType));
>> >+ }
>> >+ }
>> >+
>> >+ static <T> Class<T> getRawType(Type type, TypeVariableResolver
>> >resolver)
>> >+ {
>> >+ if (type instanceof Class)
>> >+ {
>> >+ return (Class<T>)type;
>> >+ }
>> >+ else if (type instanceof ParameterizedType)
>> >+ {
>> >+ return getRawType(((ParameterizedType) type).getRawType(),
>> >resolver);
>> >+ }
>> >+ else if ((type instanceof TypeVariable) || (type instanceof
>> >WildcardType) || (type instanceof GenericArrayType))
>> >+ {
>> >+ Type resolvedType = resolveType(type, resolver);
>> >+ if (resolvedType instanceof TypeVariable)
>> >+ {
>> >+ TypeVariable<?> variable =
>(TypeVariable<?>)resolvedType;
>> >+ return
>> >getRawType(resolveType(getRawType(variable.getBounds(), resolver),
>> >resolver), resolver);
>> >+ }
>> >+ else
>> >+ {
>> >+ return getRawType(resolvedType, resolver);
>> >+ }
>> >+ }
>> >+ else
>> >+ {
>> >+ throw new IllegalArgumentException("Unsupported type " +
>> >type.getClass().getName());
>> >+ }
>> >+ }
>> >+
>> >+ private static Type getRawType(Type[] types, TypeVariableResolver
>> >resolver)
>> >+ {
>> >+ Class<?>[] rawTypes = getRawTypes(types, resolver);
>> >+ Class<?>[] classTypes = getClassTypes(rawTypes);
>> >+ if (classTypes.length > 0)
>> >+ {
>> >+ return getMostSpecificType(classTypes, types);
>> >+ }
>> >+ else
>> >+ {
>> >+ return getMostSpecificType(rawTypes, types);
>> >+ }
>> >+ }
>> >+
>> >+ private static <T> Class<T>[] getRawTypes(Type[] types,
>> >TypeVariableResolver resolver)
>> >+ {
>> >+ Class<T>[] rawTypes = new Class[types.length];
>> >+ for (int i = 0; i < types.length; i++)
>> >+ {
>> >+ rawTypes[i] = getRawType(types[i], resolver);
>> >+ }
>> >+ return rawTypes;
>> >+ }
>> >+
>> >+ private static Type getMostSpecificType(Class<?>[] types, Type[]
>> >genericTypes)
>> >+ {
>> >+ Class<?> mostSpecificType = types[0];
>> >+ int mostSpecificIndex = 0;
>> >+ for (int i = 0; i < types.length; i++)
>> >+ {
>> >+ if (mostSpecificType.isAssignableFrom(types[i]))
>> >+ {
>> >+ mostSpecificType = types[i];
>> >+ mostSpecificIndex = i;
>> >+ }
>> >+ }
>> >+ return genericTypes[mostSpecificIndex];
>> >+ }
>> >+
>> >+ private static Class<?>[] getClassTypes(Class<?>[] rawTypes)
>> >+ {
>> >+ List<Class<?>> classTypes = new ArrayList<Class<?>>();
>> >+ for (Class<?> rawType : rawTypes)
>> >+ {
>> >+ if (!rawType.isInterface())
>> >+ {
>> >+ classTypes.add(rawType);
>> >+ }
>> >+ }
>> >+ return classTypes.toArray(new Class[classTypes.size()]);
>> >+ }
>> >+
>> >+ private static Type validate(Type type)
>> >+ {
>> >+ if (!(type instanceof Class)
>> >+ && !(type instanceof ParameterizedType)
>> >+ && !(type instanceof TypeVariable)
>> >+ && !(type instanceof GenericArrayType)
>> >+ && !(type instanceof WildcardType))
>> >+ {
>> >+ throw new IllegalArgumentException("Unsupported type " +
>> >type.getClass());
>> >+ }
>> >+ return type;
>> >+ }
>> >+
>> >+ /**
>> >+ * resolves actual types of a TypeVariable for a specific type
>> >hierarchy
>> >+ */
>> >+ private static class TypeVariableResolver
>> >+ {
>> >+ private List<TypeVariableDeclaration> declarations = new
>> >ArrayList<TypeVariableDeclaration>();
>> >+
>> >+ private TypeVariableResolver(List<TypeVariableDeclaration>
>> >implementation)
>> >+ {
>> >+ this.declarations = implementation;
>> >+ }
>> >+
>> >+ public TypeVariableResolver(Class<?> subclass, Class<?>
>> >declaringClass)
>> >+ {
>> >+ declarations.add(new TypeVariableDeclaration(subclass,
>> >subclass.getGenericSuperclass()));
>> >+ while (declaringClass != subclass &&
>> >declaringClass.isAssignableFrom(subclass))
>> >+ {
>> >+ subclass = subclass.getSuperclass();
>> >+ declarations.add(new TypeVariableDeclaration(subclass,
>> >subclass.getGenericSuperclass()));
>> >+ }
>> >+ }
>> >+
>> >+ public Type resolve(TypeVariable<?> variable)
>> >+ {
>> >+ if (declarations.size() < 2)
>> >+ {
>> >+ return getRawType(variable.getBounds(), this);
>> >+ }
>> >+ int hierarchyIndex = declarations.size() - 1;
>> >+ TypeVariableDeclaration typeVariableImplementation =
>> >declarations.get(hierarchyIndex);
>> >+ TypeVariable<?>[] typeParameters =
>> >typeVariableImplementation.getDeclaredTypeParameters();
>> >+ int typeIndex = -1;
>> >+ for (int i = 0; i < typeParameters.length; i++)
>> >+ {
>> >+ if
>> >(variable.getName().equals(typeParameters[i].getName()))
>> >+ {
>> >+ typeIndex = i;
>> >+ break;
>> >+ }
>> >+ }
>> >+ if (typeIndex == -1)
>> >+ {
>> >+ // type erasure
>> >+ return Object.class;
>> >+ }
>> >+ TypeVariableDeclaration declaration =
>> >declarations.get(hierarchyIndex - 1);
>> >+ Type genericClass = declaration.getAssignment();
>> >+ if (genericClass instanceof ParameterizedType)
>> >+ {
>> >+ ParameterizedType classType =
>> >(ParameterizedType)genericClass;
>> >+ return
>> >resolveType(classType.getActualTypeArguments()[typeIndex], remove());
>> >+ }
>> >+ else
>> >+ {
>> >+ TypeVariable<?>[] typeVariables =
>> >declaration.getDeclaredTypeParameters();
>> >+ if (typeVariables.length > typeIndex)
>> >+ {
>> >+ return resolveType(typeVariables[typeIndex],
>> >remove());
>> >+ }
>> >+ else
>> >+ {
>> >+ return Object.class; //type erasure
>> >+ }
>> >+ }
>> >+ }
>> >+
>> >+ public TypeVariableResolver add(Class<?> type)
>> >+ {
>> >+ return add(type, type.getGenericSuperclass());
>> >+ }
>> >+
>> >+ public TypeVariableResolver add(Class<?> declaringClass, Type
>> >assignment)
>> >+ {
>> >+ List<TypeVariableDeclaration> declarations = new
>> >ArrayList<TypeVariableDeclaration>(this.declarations);
>> >+ declarations.add(new
>>TypeVariableDeclaration(declaringClass,
>> >assignment));
>> >+ return new TypeVariableResolver(declarations);
>> >+ }
>> >+
>> >+ public TypeVariableResolver remove()
>> >+ {
>> >+ List<TypeVariableDeclaration> declarations = new
>> >ArrayList<TypeVariableDeclaration>(this.declarations);
>> >+ declarations.remove(declarations.size() - 1);
>> >+ return new TypeVariableResolver(declarations);
>> >+ }
>> >+ }
>> >+
>> >+ /**
>> >+ * A declaration of type variables along with its assignments
>> >+ */
>> >+ private static class TypeVariableDeclaration
>> >+ {
>> >+ private Class<?> declaringClass;
>> >+ private Type assignment;
>> >+
>> >+ public TypeVariableDeclaration(Class<?> declaringClass, Type
>> >assignment)
>> >+ {
>> >+ this.declaringClass = declaringClass;
>> >+ this.assignment = assignment;
>> >+ }
>> >+
>> >+ public Type getAssignment()
>> >+ {
>> >+ return assignment;
>> >+ }
>> >+
>> >+ public TypeVariable<?>[] getDeclaredTypeParameters()
>> >+ {
>> >+ return declaringClass.getTypeParameters();
>> >+ }
>> >+ }
>> >+
>> >+ private static class TypeErasureException extends Exception
>> >+ {
>> >+ public TypeErasureException()
>> >+ {
>> >+ super("generic type information not available");
>> >+ }
>> >+ }
>> >+}
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/W
>>e
>> >bBeansUtil.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>>
>>a/org/apache/webbeans/util/WebBeansUtil.java?rev=1502035&r1=1502034&r2=15
>>0
>> >2035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/W
>>e
>> >bBeansUtil.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/W
>>e
>> >bBeansUtil.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -1058,16 +1058,7 @@ public final class WebBeansUtil
>> > {
>> > Type type = injectionPoint.getType();
>> >
>> >- Class<?> candidateClazz = null;
>> >- if(type instanceof Class)
>> >- {
>> >- candidateClazz = (Class<?>)type;
>> >- }
>> >- else if(type instanceof ParameterizedType)
>> >- {
>> >- ParameterizedType pt = (ParameterizedType)type;
>> >- candidateClazz = (Class<?>)pt.getRawType();
>> >- }
>> >+ Class<?> candidateClazz = ClassUtil.getClass(type);
>> >
>> > if(!candidateClazz.isAssignableFrom(Instance.class))
>> > {
>> >
>> >Modified:
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/decorators/tests/GenericDecoratorTest.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>>
>>a/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
>>?
>> >rev=1502035&r1=1502034&r2=1502035&view=diff
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/decorators/tests/GenericDecoratorTest.java
>> >(original)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/decorators/tests/GenericDecoratorTest.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -86,5 +86,4 @@ public class GenericDecoratorTest extend
>> > DecoratedBean decoratedBean =
>>getInstance(DecoratedBean.class);
>> > Assert.assertTrue(decoratedBean.isDecoratorCalled());
>> > }
>> >-
>> >}
>> >
>> >Added:
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Bar.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>>
>>a/org/apache/webbeans/newtests/injection/generics/Bar.java?rev=1502035&vi
>>e
>> >w=auto
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Bar.java
>> >(added)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Bar.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -0,0 +1,77 @@
>> >+/*
>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>> >+ * or more contributor license agreements. See the NOTICE file
>> >+ * distributed with this work for additional information
>> >+ * regarding copyright ownership. The ASF licenses this file
>> >+ * to you 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.apache.webbeans.newtests.injection.generics;
>> >+
>> >+import java.util.List;
>> >+
>> >+import javax.enterprise.event.Observes;
>> >+import javax.enterprise.inject.Typed;
>> >+import javax.inject.Inject;
>> >+
>> >+@Typed
>> >+public class Bar<A, B> {
>> >+
>> >+ @Inject
>> >+ @GenericQualifier
>> >+ private Baz<A> baz;
>> >+
>> >+ @Inject
>> >+ @GenericQualifier
>> >+ private A a;
>> >+
>> >+ @Inject
>> >+ private Baz<List<B>> bBazList;
>> >+ private A[] aArray;
>> >+ private Baz<A> aBazEvent;
>> >+ private A aObserverInjectionPoint;
>> >+
>> >+ @Inject
>> >+ public void setAArray(A[] aArray) {
>> >+ this.aArray = aArray;
>> >+ }
>> >+
>> >+ public void observeBaz(@Observes Baz<A> baz, @GenericQualifier A
>>a)
>{
>> >+ this.aBazEvent = baz;
>> >+ this.aObserverInjectionPoint = a;
>> >+ }
>> >+
>> >+ public Baz<A> getBaz() {
>> >+ return this.baz;
>> >+ }
>> >+
>> >+ public Baz<List<B>> getBBazList() {
>> >+ return this.bBazList;
>> >+ }
>> >+
>> >+ public A getA() {
>> >+ return this.a;
>> >+ }
>> >+
>> >+ public A[] getAArray() {
>> >+ return this.aArray;
>> >+ }
>> >+
>> >+ public Baz<A> getABazEvent() {
>> >+ return this.aBazEvent;
>> >+ }
>> >+
>> >+ public A getAObserverInjectionPoint() {
>> >+ return this.aObserverInjectionPoint;
>> >+ }
>> >+}
>> >\ No newline at end of file
>> >
>> >Added:
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/BarVetoExtension.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>>
>>a/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java?r
>>e
>> >v=1502035&view=auto
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/BarVetoExtension.java
>> >(added)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/BarVetoExtension.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -0,0 +1,34 @@
>> >+/*
>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>> >+ * or more contributor license agreements. See the NOTICE file
>> >+ * distributed with this work for additional information
>> >+ * regarding copyright ownership. The ASF licenses this file
>> >+ * to you 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.apache.webbeans.newtests.injection.generics;
>> >+
>> >+import javax.enterprise.event.Observes;
>> >+import javax.enterprise.inject.spi.Extension;
>> >+import javax.enterprise.inject.spi.ProcessAnnotatedType;
>> >+
>> >+public class BarVetoExtension implements Extension {
>> >+
>> >+ public void vetoBar(@Observes ProcessAnnotatedType<?>
>> >annotatedTypeEvent)
>> >+ {
>> >+ if
>>
>>>(annotatedTypeEvent.getAnnotatedType().getJavaClass().equals(Bar.class))
>> >+ {
>> >+ annotatedTypeEvent.veto();
>> >+ }
>> >+ }
>> >+}
>> >
>> >Added:
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Baz.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>>
>>a/org/apache/webbeans/newtests/injection/generics/Baz.java?rev=1502035&vi
>>e
>> >w=auto
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Baz.java
>> >(added)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/Baz.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -0,0 +1,23 @@
>> >+/*
>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>> >+ * or more contributor license agreements. See the NOTICE file
>> >+ * distributed with this work for additional information
>> >+ * regarding copyright ownership. The ASF licenses this file
>> >+ * to you 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.apache.webbeans.newtests.injection.generics;
>> >+
>> >+public class Baz<T> {
>> >+
>> >+}
>> >
>> >Added:
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/BazSubclass.java
>> >URL:
>> >
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>>
>>a/org/apache/webbeans/newtests/injection/generics/BazSubclass.java?rev=15
>>0
>> >2035&view=auto
>>
>>=========================================================================
>>=
>> >====
>> >---
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/BazSubclass.java
>> >(added)
>> >+++
>>
>>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtes
>>t
>> >s/injection/generics/BazSubclass.java
>> >Wed Jul 10 22:48:58 2013
>> >@@ -0,0 +1,27 @@
>> >+/*
>> >+ * Licensed to the Apache Software Foundation (ASF) under one
>> >+ * or more contributor license agreements. See the NOTICE file
>> >+ * distributed with this work for additional information
>> >+ * regarding copyright ownership. The ASF licenses this file
>> >+ * to you 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.apache.webbeans.newtests.injection.generics;
>> >+
>> >+
>> >+public class BazSubclass extends Baz<String> {
>> >+
>> >+ public BazSubclass(String string)
>> >+ {
>> >+ }
>> >+}
Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
Posted by Romain Manni-Bucau <rm...@gmail.com>.
we still have 2 issues on tomee:
org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrderTest
and
org.jboss.jsr299.tck.interceptors.tests.lifecycleCallback.order.InvocationOrderTest
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau
2013/7/11 Mark Struberg <st...@yahoo.de>
>
>
>
> txs Arne, no need to excuse!
>
> "Wo gehobelt wird fallen Späne"
>
>
> LieGrue,
> strub
>
>
>
>
> ________________________________
> From: Arne Limburg <ar...@openknowledge.de>
> To: "dev@openwebbeans.apache.org" <de...@openwebbeans.apache.org>
> Sent: Thursday, 11 July 2013, 22:50
> Subject: Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
>
>
> Sorry guys,
>
> I extended a test of OWB to reproduce the problem and fixed it.
> Should work fine now.
> Plz let me know if anything does not work.
>
> Cheers,
> Arne
>
>
> Am 11.07.13 15:57 schrieb "Mark Struberg" unter <st...@yahoo.de>:
>
> >yikes, this also stales my development team :/
> >
> >Arne, I will rollback this commit and start a new deployment.
> >
> >LieGrue,
> >strub
> >
> >
> >
> >
> >________________________________
> > From: Romain Manni-Bucau <rm...@gmail.com>
> >To: openwebbeans-dev <de...@openwebbeans.apache.org>
> >Sent: Thursday, 11 July 2013, 12:51
> >Subject: Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
> >webbeans-impl/src/main/java/org/apache/webbeans/component/
> >webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
> >webbeans-impl/src/main/java/org/apache/webbeans/config/
> >webbeans-impl/sr...
> >
> >
> >Hi Arne,
> >
> >this commit broke openejb CDi 1.0 TCKs
> >
> >basically
>
>org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEventT
> >est
> >is no more passing, any idea?
> >
> >basically we observes now too much events.
> >
> >if you want to give a try on openejb just checkout tomee trunk then build
> >(mvn clean install -pl tck/cdi-embedded -am -Dmaven.test.skip=true) then
> >fo
> >in tck/cdi-embedded module, update the pom to point to failing.xml
testng
> >config:
> >
> ><suiteXmlFile>src/test/resources/failing.xml</suiteXmlFile>
> >
> >and put in this file:
> >
> ><?xml version="1.0" encoding="UTF-8"?>
> ><suite name="CDI TCK" verbose="0">
> > <test name="CDI TCK">
> > <classes>
> > <class
>
>name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.Container
> >EventTest"/>
> > </classes>
> > </test>
> ></suite>
> >
> >then simply run mvn clean install on this module and you'll get the
> >failure
> >
> >
> >any help is welcomed ;)
> >
> >*Romain Manni-Bucau*
> >*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> >*Blog:
> >**http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
> >*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> >*Github: https://github.com/rmannibucau*
> >
> >
> >
> >---------- Forwarded message ----------
> >From: <ar...@apache.org>
> >Date: 2013/7/11
> >Subject: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
> >webbeans-impl/src/main/java/org/apache/webbeans/component/
> >webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
> >webbeans-impl/src/main/java/org/apache/webbeans/config/
> >webbeans-impl/sr...
> >To: commits@openwebbeans.apache.org
> >
> >
> >Author: arne
> >Date: Wed Jul 10 22:48:58 2013
> >New Revision: 1502035
> >
> >URL: http://svn.apache.org/r1502035
> >Log:
> >OWB-878: Re-implemented generic handling
> >
> >Added:
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
> >nericsUtil.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/inject/
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/inject/generic/
> > - copied from r1502033,
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
> >ittests/inject/generic/
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Bar.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/BarVetoExtension.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Baz.java
> >
> >openwebbeans/trunk/webbens-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/BazSubclass.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Foo.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/GenericBeanTest.java
> > - copied, changed from r1502033,
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
> >ittests/inject/generic/GenericBeanTest.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/GenericFactory.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/GenericQualifier.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/GenericsTest.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/util/Ge
> >nericsUtilTest.java
> >Removed:
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
> >BeanTypeSetResolver.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
> >or/DecoratorResolverRules.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/inject/generic/GenericBeanTest.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
> >ittests/inject/generic/
> >Modified:
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/AbstractProducerBean.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/ProducerFieldBean.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/ProducerMethodBean.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/DecoratorBeanBuilder.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/InterceptorBeanBuilder.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/MethodProducerFactory.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/ProducerFieldBeansBuilder.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/ProducerMethodBeansBuilder.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
> >OwbParametrizedTypeImpl.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
> >er/BeanManagerImpl.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
> >er/InjectionResolver.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
> >or/DecoratorsManager.java
> >
> >openwebbeans/trunk/wbbeans-impl/src/main/java/org/apache/webbeans/event/O
> >bserverMethodImpl.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
> >impl/InjectionPointFactory.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
> >impl/InjectionPointImpl.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AbstractAnnotated.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AbstractAnnotatedMember.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedConstructorImpl.java
> >
> >openwebbeans/trunk/ebbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedFieldImpl.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedMethodImpl.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedParameterImpl.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedTypeImpl.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
> >assUtil.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
> >bBeansUtil.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/decorators/tests/GenericDecoratorTest.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/promethods/beans/MethodTypeProduces1.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
> >ittests/clazzClazzTest.java
> >
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
> >ittests/inject/parametrized/GenericClassTest.java
> >
>
>openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plug
> >in/OpenWebBeansJsfPlugin.java
> >
>
>openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/
> >plugin/OpenWebBeansJsfPlugin.java
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/AbstractProducerBean.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/component/AbstractProducerBean.java?rev=1502035&r1=1
> >502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/AbstractProducerBean.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/AbstractProducerBean.java
> >Wed Jul 10 2:48:58 2013
> >@@ -67,7 +67,7 @@ public class AbstractProducerBean<T> ext
> >
> > @Override
> > public Class<T> getReturnType()
> >- {
> >+ {
> > return returnType;
> > }
> >
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/ProducerFieldBean.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/component/ProducerFieldBean.java?rev=1502035&r1=1502
> >034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/ProducerFieldBean.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/ProducerFieldBean.java
> >Wed Jul 10 22:48:58 2013
> >@@ -24,7 +24,6 @@ import java.lang.reflect.Field;
> >import javax.enterprise.context.spi.CreationalContext;
> >
> >import org.apache.webbeans.component.spi.ProducerFactory;
> >-import org.apache.webbeans.util.ClassUtil;
> >import org.apache.webbeans.util.WebBeansUtil;
> >
> >/**
> >@@ -108,7 +107,7 @@ public class ProducerFieldBean<T> extend
> > " with passivating scope @%s" +
> > " must be Serializable";
> >
>
>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope
> >(),
> >- ClassUtil.isClassAssignable(Serializable.class,
> >getReturnType()), errorMessage, producerField.getName(),
> >+ getReturnType() instanceof Serializable, errorMessage,
> >producerField.getName(),
> > getBeanClass().getName(), getScope().getName());
> > }
> >
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/ProducerMethodBean.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/component/ProducerMethodBean.java?rev=1502035&r1=150
> >2034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/ProducerMethodBean.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/ProducerMethodBean.java
> >Wed Jul 10 22:48:58 2013
> >@@ -25,7 +25,6 @@ import javax.enterprise.context.spi.Crea
> >
> >import org.apache.webbeans.component.creation.MethodProducerFactory;
> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >-import org.apache.webbeans.util.ClassUtil;
> >import org.apache.webbeans.util.WebBeansUtil;
> >
> >/**
> >@@ -150,7 +149,7 @@ public class ProducerMethodBean<T> exten
> > " with passivating scope @%s" +
> > " must be Serializable";
> >
>
>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope
> >(),
> >- ClassUtil.isClassAssignable(Serializable.class,
> >getReturnType()), errorMessage, creatorMethod.getName(),
> >getBeanClass().getName(),
> >+ getReturnType() instanceof Serializable, errorMessage,
> >creatorMethod.getName(), getBeanClass().getName(),
> > getScope().getName());
> >
> > }
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/DecoratorBeanBuilder.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=150
> >2035&r1=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/DecoratorBeanBuilder.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/DecoratorBeanBuilder.java
> >Wed Jul 10 22:48:58 2013
> >@@ -29,11 +29,12 @@ import javax.enterprise.inject.spi.Annot
> >import javax.enterprise.inject.spi.AnnotatedType;
> >import javax.enterprise.inject.spi.InjectionPoint;
> >import javax.inject.Inject;
> >+
> >+import java.io.Serializable;
> >import java.lang.annotation.Annotation;
> >import java.lang.reflect.AnnotatedElement;
> >import java.lang.reflect.Constructor;
> >import java.lang.reflect.Type;
> >-import java.lang.reflect.TypeVariable;
> >import java.util.ArrayList;
> >import java.util.HashSet;
> >import java.util.Iterator;
> >@@ -46,13 +47,12 @@ import org.apache.webbeans.component.Bea
> >import org.apache.webbeans.component.DecoratorBean;
> >import org.apache.webbeans.component.WebBeansType;
> >import org.apache.webbeans.config.OWBLogConst;
> >-import org.apache.webbeans.config.OwbParametrizedTypeImpl;
> >import org.apache.webbeans.config.WebBeansContext;
> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >import org.apache.webbeans.logger.WebBeansLoggerFacade;
> >import org.apache.webbeans.util.Asserts;
> >import org.apache.webbeans.util.ClassUtil;
> >-
> >+import org.apache.webbeans.util.GenericsUtil;
> >
> >/**
> > * Bean builder for {@link
> >org.apache.webbeans.component.InterceptorBean}s.
> >@@ -165,57 +165,15 @@ public class DecoratorBeanBuilder<T>
> >
> > private void defineDecoratedTypes()
> > {
> >- // remove them first to avoid to loop over them
> >- decoratedTypes.remove(Object.class);
> >- decoratedTypes.remove(java.io.Serializable.class); /* 8.1 */
> >-
> >- Type beanClass = annotatedType.getJavaClass();
> >- do
> >- {
> >- final Class<?> clazz = ClassUtil.getClass(beanClass);
> >- final Type toRemove;
> >- if (ClassUtil.isDefinitionContainsTypeVariables(beanClass))
> >- {
> >- final OwbParametrizedTypeImpl pt = new
> >OwbParametrizedTypeImpl(clazz.getDeclaringClass(), clazz);
> >- final TypeVariable<?>[] tvs = clazz.getTypeParameters();
> >- for(TypeVariable<?> tv : tvs)
> >- {
> >- pt.addTypeArgument(tv);
> >- }
> >- toRemove = pt;
> >- //X TODO generic support setDecoratorGenericType(pt);
> >- }
> >- else
> >- {
> >- toRemove = beanClass;
> >- //X TODO generic support
> >setDecoratorGenericType(beanClass);
> >- }
> >-
> >- final Iterator<Type> iterator = decoratedTypes.iterator();
> >- while (iterator.hasNext())
> >- {
> >- final Type next = iterator.next();
> >-
> >- // if raw class is the same and is assignable (geneics
> >handling)
> >- if (ClassUtil.getClass(next) == clazz &&
> >ClassUtil.isAssignable(toRemove, next))
> >- {
> >- iterator.remove();
> >- }
> >- }
> >-
> >- beanClass = clazz.getGenericSuperclass();
> >- } while (beanClass != Object.class);
> >-
> >-
> >+ decoratedTypes.remove(Serializable.class); /* 8.1 */
> > for (Iterator<Type> i = decoratedTypes.iterator(); i.hasNext();
)
> > {
> > Type t = i.next();
> >- if (t instanceof Class<?> &&
> >ignoredDecoratorInterfaces.contains(((Class) t).getName()))
> >+ if (!ClassUtil.getClass(t).isInterface() || (t instanceof
> >Class<?> && ignoredDecoratorInterfaces.contains(((Class) t).getName())))
> > {
> > i.remove();
> > }
> > }
> >-
> > }
> >
> > private void defineDelegate(Set<InjectionPoint> injectionPoints)
> >@@ -258,7 +216,7 @@ public class DecoratorBeanBuilder<T>
> > }
> > }
> >
> >- delgateType = ipFound.getType();
> >+ delegateType = GenericsUtil.resolveType(ipFound.getType(),
> >annotatedType.getJavaClass(), ipFound.getMember());
> > delegateQualifiers = ipFound.getQualifiers();
> >
> > for (Type decType : decoratedTypes)
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/InterceptorBeanBuilder.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1
> >502035&r1=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/InterceptorBeanBuilder.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/InterceptorBeanBuilder.java
> >Wed Jul 10 22:48:58 2013
> >@@ -317,11 +317,11 @@ public abstract class InterceptorBeanBui
> > {
> > if (clazz == null)
> > {
> >- clazz =
> >annotatedMethod.getDeclaringType().getJavaClass();
> >+ clazz =
> >annotatedMethod.getJavaMember().getDeclaringClass();
> > }
> >
> > // check for same class -> Exception
> >- if (alreadyDefined.getDeclaringType().getJavaClass() ==
> >clazz)
> >+ if (alreadyDefined.getJavaMember().getDeclaringClass() ==
> >clazz)
> > {
> > throw new WebBeansConfigurationException("Only one
> >Interceptor of a certain type is allowed per class, but multiple found in
> >class "
> > +
> >annotatedMethod.getDeclaringType().getJavaClass().getName()
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/MethodProducerFactory.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/component/creation/MethodProducerFactory.java?rev=15
> >02035&r1=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/MethodProducerFactory.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/MethodProducerFactory.java
> >Wed Jul 10 22:48:58 2013
> >@@ -41,7 +41,7 @@ import org.apache.webbeans.exception.Web
> >import org.apache.webbeans.portable.ProducerMethodProducer;
> >import org.apache.webbeans.util.AnnotationUtil;
> >import org.apache.webbeans.util.Asserts;
> >-import org.apache.webbeans.util.ClassUtil;
> >+import org.apache.webbeans.util.GenericsUtil;
> >
> >public class MethodProducerFactory<P> implements ProducerFactory<P>
> >{
> >@@ -98,7 +98,7 @@ public class MethodProducerFactory<P> im
> > {
> > if
> >(annotatedParameter.isAnnotationPresent(Disposes.class))
> > {
> >- if
> >(!ClassUtil.isAssignable(annotatedParameter.getBaseType(),
> >producerMethod.getBaseType()))
> >+ if
> >(!GenericsUtil.satisfiesDependency(producerMethod.getBaseType(),
> >annotatedParameter.getBaseType()))
> > {
> > continue;
> > }
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/ProducerFieldBeansBuilder.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java?re
> >v=1502035&r1=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/ProducerFieldBeansBuilder.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/ProducerFieldBeansBuilder.java
> >Wed Jul 10 22:48:58 2013
> >@@ -77,7 +77,7 @@ public class ProducerFieldBeansBuilder<T
> > Set<AnnotatedField<? super T>> annotatedFields =
> >annotatedType.getFields();
> > for(AnnotatedField<? super T> annotatedField: annotatedFields)
> > {
> >- if(annotatedField.isAnnotationPresent(Produces.class) &&
>
>annotatedField.getDeclaringType().getJavaClass().equals(annotatedType.getJ
> >avaClass()))
> >+ if(annotatedField.isAnnotationPresent(Produces.class) &&
>
>annotatedField.getJavaMember().getDeclaringClass().equals(annotatedType.ge
> >tJavaClass()))
> > {
> > Type genericType = annotatedField.getBaseType();
> >
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/ProducerMethodBeansBuilder.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java?r
> >ev=1502035&r1=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/ProducerMethodBeansBuilder.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
> >nt/creation/ProducerMethodBeansBuilder.java
> >Wed Jul 10 22:48:58 2013
> >@@ -26,7 +26,7 @@ import org.apache.webbeans.config.WebBea
> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >import org.apache.webbeans.util.AnnotationUtil;
> >import org.apache.webbeans.util.Asserts;
> >-import org.apache.webbeans.util.ClassUtil;
> >+import org.apache.webbeans.util.GenericsUtil;
> >import org.apache.webbeans.util.WebBeansUtil;
> >
> >import javax.enterprise.event.Observes;
> >@@ -77,7 +77,7 @@ public class ProducerMethodBeansBuilder<
> > {
> > boolean enterprise =
> >EnterpriseBeanMarker.class.isInstance(bean);
> > if(annotatedMethod.isAnnotationPresent(Produces.class) &&
> >-
>
>(annotatedMethod.getDeclaringType().getJavaClass().equals(annotatedType.ge
> >tJavaClass())
> >+
>
>(annotatedMethod.getJavaMember().getDeclaringClass().equals(annotatedType.
> >getJavaClass())
> > || (enterprise &&
>
>annotatedType.getJavaClass().isAssignableFrom(annotatedType.getJavaClass()
> >))))
> > {
> > checkProducerMethodForDeployment(annotatedMethod);
> >@@ -126,7 +126,7 @@ public class ProducerMethodBeansBuilder<
> > boolean found = false;
> > for (final ProducerMethodBean<?> producer :
> >producerBeans)
> > {
> >- if (ClassUtil.isAssignable(param.getBaseType(),
> >producer.getCreatorMethod().getGenericReturnType()))
> >+ if
>
>(GenericsUtil.satisfiesDependency(producer.getCreatorMethod().getGenericRe
> >turnType(),
> >param.getBaseType()))
> > {
> > found = true;
> > break;
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
> >OwbParametrizedTypeImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/config/OwbParametrizedTypeImpl.java?rev=1502035&r1=1
> >502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
> >OwbParametrizedTypeImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
> >OwbParametrizedTypeImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -20,9 +20,7 @@ package org.apache.webbeans.config;
> >
> >import java.lang.reflect.ParameterizedType;
> >import java.lang.reflect.Type;
> >-import java.util.ArrayList;
> >import java.util.Arrays;
> >-import java.util.List;
> >
> >/**
> > * Custom parametrized type implementation.
> >@@ -38,30 +36,26 @@ public class OwbParametrizedTypeImpl imp
> > private final Type rawType;
> >
> > /**Actual type arguments*/
> >- private final List<Type> types = new ArrayList<Type>();
> >+ private final Type[] types;
> >
> > /**
> > * New instance.
> > * @param owner owner
> > * @param raw raw
> > */
> >- public OwbParametrizedTypeImpl(Type owner, Type raw)
> >+ public OwbParametrizedTypeImpl(Type owner, Type raw, Type... types)
> > {
> > this.owner = owner;
> >- rawType = raw;
> >+ this.rawType = raw;
> >+ this.types = types;
> > }
> >
> > @Override
> > public Type[] getActualTypeArguments()
> > {
> >- return types.toArray(new Type[types.size()]);
> >+ return types.clone();
> > }
> >
> >- public void addTypeArgument(Type type)
> >- {
> >- types.add(type);
> >- }
> >-
> > @Override
> > public Type getOwnerType()
> > {
> >@@ -82,12 +76,7 @@ public class OwbParametrizedTypeImpl imp
> > @Override
> > public int hashCode()
> > {
> >- final int prime = 31;
> >- int result = 1;
> >- result = prime * result +
> >Arrays.hashCode(getActualTypeArguments());
> >- result = prime * result + ((owner == null) ? 0 :
> >owner.hashCode());
> >- result = prime * result + ((rawType == null) ? 0 :
> >rawType.hashCode());
> >- return result;
> >+ return Arrays.hashCode(types) ^ (owner == null ? 0 :
> >owner.hashCode()) ^ (rawType == null ? 0 : rawType.hashCode());
> > }
> >
> > /* (non-Javadoc)
> >@@ -96,47 +85,24 @@ public class OwbParametrizedTypeImpl imp
> > @Override
> > public boolean equals(Object obj)
> > {
> >- if (this == obj)
> >- {
> >- return true;
> >- }
> >- if (obj == null)
> >- {
> >- return false;
> >- }
> >- if (getClass() != obj.getClass())
> >- {
> >- return false;
> >- }
> >- OwbParametrizedTypeImpl other = (OwbParametrizedTypeImpl) obj;
> >- if (!Arrays.equals(getActualTypeArguments(),
> >other.getActualTypeArguments()))
> >- {
> >- return false;
> >- }
> >- if (owner == null)
> >- {
> >- if (other.owner != null)
> >- {
> >- return false;
> >- }
> >- }
> >- else if (!owner.equals(other.owner))
> >- {
> >- return false;
> >- }
> >- if (rawType == null)
> >- {
> >- if (other.rawType != null)
> >- {
> >- return false;
> >- }
> >- }
> >- else if (!rawType.equals(other.rawType))
> >- {
> >- return false;
> >- }
> >-
> >- return true;
> >+ if (this == obj)
> >+ {
> >+ return true;
> >+ }
> >+ else if (obj instanceof ParameterizedType)
> >+ {
> >+ ParameterizedType that = (ParameterizedType) obj;
> >+ Type thatOwnerType = that.getOwnerType();
> >+ Type thatRawType = that.getRawType();
> >+ return (owner == null ? thatOwnerType == null :
> >owner.equals(thatOwnerType))
> >+ && (rawType == null ? thatRawType == null :
> >rawType.equals(thatRawType))
> >+ && Arrays.equals(types,
that.getActualTypeArguments());
> >+ }
> >+ else
> >+ {
> >+ return false;
> >+ }
> >+
> > }
> >
> > public String toString()
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
> >er/BeanManagerImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/container/BeanManagerImpl.java?rev=1502035&r1=150203
> >4&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
> >er/BeanManagerImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
> >er/BeanManagerImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -86,6 +86,7 @@ import org.apache.webbeans.spi.plugins.O
> >import org.apache.webbeans.util.AnnotationUtil;
> >import org.apache.webbeans.util.Asserts;
> >import org.apache.webbeans.util.ClassUtil;
> >+import org.apache.webbeans.util.GenericsUtil;
> >import org.apache.webbeans.util.WebBeansUtil;
> >import org.apache.webbeans.xml.WebBeansXMLConfigurator;
> >
> >@@ -688,7 +689,7 @@ public class BeanManagerImpl extends Abs
> > //Check type if bean type is given
> > if(beanType != null)
> > {
> >- if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
> >beanType,
> >bean instanceof NewBean) && !ClassUtil.isAssignable(bean.getBeanClass(),
> >beanType))
> >+ if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
> >beanType,
> >bean instanceof NewBean) && !GenericsUtil.satisfiesDependency(beanType,
> >bean.getBeanClass()))
> > {
> > throw new IllegalArgumentException("Given bean type : "
+
> >beanType + " is not applicable for the bean instance : " + bean);
> > }
> >@@ -747,7 +748,7 @@ public class BeanManagerImpl extends Abs
> > {
> > Type beanApiType = itBeanApiTypes.next();
> >
> >- if(ClassUtil.isAssignable(beanApiType, givenType))
> >+ if(GenericsUtil.satisfiesDependency(givenType, beanApiType))
> > {
> > return true;
> > }
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
> >er/InjectionResolver.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/container/InjectionResolver.java?rev=1502035&r1=1502
> >034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
> >er/InjectionResolver.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
> >er/InjectionResolver.java
> >Wed Jul 10 22:48:58 2013
> >@@ -50,6 +50,7 @@ import org.apache.webbeans.spi.ScannerSe
> >import org.apache.webbeans.util.AnnotationUtil;
> >import org.apache.webbeans.util.Asserts;
> >import org.apache.webbeans.util.ClassUtil;
> >+import org.apache.webbeans.util.GenericsUtil;
> >import org.apache.webbeans.util.InjectionExceptionUtil;
> >import org.apache.webbeans.util.WebBeansUtil;
> >import static
>
>org.apache.webbeans.util.InjectionExceptionUtil.throwAmbiguousResolutionEx
> >ception;
> >@@ -500,7 +501,7 @@ public class InjectionResolver
> > for (Type componentApiType : component.getTypes())
> > {
> >
> >- if (ClassUtil.isAssignable(componentApiType,
> >injectionPointType))
> >+ if
> >(GenericsUtil.satisfiesDependency(injectionPointType, componentApiType))
> > {
> > resolvedComponents.add(component);
> > break;
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
> >or/DecoratorsManager.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/decorator/DecoratorsManager.java?rev=1502035&r1=1502
> >034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
> >or/DecoratorsManager.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
> >or/DecoratorsManager.java
> >Wed Jul 10 22:48:58 2013
> >@@ -35,6 +35,7 @@ import org.apache.webbeans.config.WebBea
> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >import org.apache.webbeans.util.AnnotationUtil;
> >import org.apache.webbeans.util.Asserts;
> >+import org.apache.webbeans.util.GenericsUtil;
> >
> >public class DecoratorsManager
> >{
> >@@ -176,6 +177,7 @@ public class DecoratorsManager
> >
> > private boolean isDecoratorMatch(Decorator<?> decorator, Set<Type>
> >apiTypes, Set<Annotation> annotations)
> > {
> >+ // 8.3.1
> > if (!apiTypesMatchDelegateType(decorator, apiTypes))
> > {
> > return false;
> >@@ -218,7 +220,7 @@ public class DecoratorsManager
> > boolean ok = false;
> > for (Type apiType : apiTypes)
> > {
> >- if
> >(DecoratorResolverRules.compareType(decorator.getDelegateType(),
apiType))
> >+ if
> >(GenericsUtil.satisfiesDependency(decorator.getDelegateType(), apiType))
> > {
> > ok = true;
> > break;
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
> >bserverMethodImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1502035&r1=1502034
> >&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
> >bserverMethodImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
> >bserverMethodImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -324,7 +324,7 @@ public class ObserverMethodImpl<T> imple
> >
> >annotationManager.getQualifierAnnotations(AnnotationUtil.
> > asArray(parameter.getAnnotations()));
> >
> >- InjectionPoint point =
> >InjectionPointFactory.getPartialInjectionPoint(bean,
> >parameter.getBaseType(), parameter, bindingTypes);
> >+ InjectionPoint point =
> >InjectionPointFactory.getPartialInjectionPoint(bean, parameter,
> >bindingTypes);
> >
> > //Get observer parameter instance
> > @SuppressWarnings("unchecked")
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
> >impl/InjectionPointFactory.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1502035&r
> >1=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
> >impl/InjectionPointFactory.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
> >impl/InjectionPointFactory.java
> >Wed Jul 10 22:48:58 2013
> >@@ -21,7 +21,6 @@ package org.apache.webbeans.inject.impl;
> >import java.lang.annotation.Annotation;
> >import java.lang.reflect.Method;
> >import java.lang.reflect.Modifier;
> >-import java.lang.reflect.Type;
> >import java.lang.reflect.TypeVariable;
> >import java.util.ArrayList;
> >import java.util.Arrays;
> >@@ -131,7 +130,7 @@ public class InjectionPointFactory
> > }
> > }
> >
> >- return new InjectionPointImpl(owner, annotField.getBaseType(),
> >Arrays.asList(qualifierAnnots), annotField);
> >+ return new InjectionPointImpl(owner,
> >Arrays.asList(qualifierAnnots), annotField);
> > }
> >
> > public <X> InjectionPoint buildInjectionPoint(Bean<?> owner,
> >AnnotatedParameter<X> parameter)
> >@@ -139,7 +138,7 @@ public class InjectionPointFactory
> > Asserts.assertNotNull(parameter, "parameter parameter can not be
> >null");
> > Set<Annotation> anns = parameter.getAnnotations();
> > Annotation[] qualifierAnnots =
>
>webBeansContext.getAnnotationManager().getQualifierAnnotations(anns.toArra
> >y(new
> >Annotation[anns.size()]));
> >- return new InjectionPointImpl(owner, parameter.getBaseType(),
> >Arrays.asList(qualifierAnnots), parameter);
> >+ return new InjectionPointImpl(owner,
> >Arrays.asList(qualifierAnnots), parameter);
> > }
> >
> > public <X> List<InjectionPoint> buildInjectionPoints(Bean<?> owner,
> >AnnotatedCallable<X> callable)
> >@@ -165,9 +164,9 @@ public class InjectionPointFactory
> > }
> > }
> >
> >- public static InjectionPoint getPartialInjectionPoint(Bean<?>
> >owner,Type type, AnnotatedParameter<?> parameter, Annotation...bindings)
> >+ public static InjectionPoint getPartialInjectionPoint(Bean<?> owner,
> >AnnotatedParameter<?> parameter, Annotation...bindings)
> > {
> >- return new InjectionPointImpl(owner, type,
> >Arrays.asList(bindings), parameter);
> >+ return new InjectionPointImpl(owner, Arrays.asList(bindings),
> >parameter);
> > }
> >
> > private void validateInitializerConstructor(AnnotatedConstructor<?>
> >constructor)
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
> >impl/InjectionPointImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1502035&r1=1
> >502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
> >impl/InjectionPointImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
> >impl/InjectionPointImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -71,15 +71,15 @@ class InjectionPointImpl implements Inje
> >
> > private boolean delegate;
> >
> >- InjectionPointImpl(Bean<?> ownerBean, Type type,
> >Collection<Annotation> qualifiers, AnnotatedField<?> annotatedField)
> >+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
> >qualifiers, AnnotatedField<?> annotatedField)
> > {
> >- this(ownerBean, type, qualifiers, annotatedField,
> >+ this(ownerBean, annotatedField.getBaseType(), qualifiers,
> >annotatedField,
> > annotatedField.getJavaMember(),
> >annotatedField.isAnnotationPresent(Delegate.class),
> >Modifier.isTransient(annotatedField.getJavaMember().getModifiers()));
> > }
> >
> >- InjectionPointImpl(Bean<?> ownerBean, Type type,
> >Collection<Annotation> qualifiers, AnnotatedParameter<?> parameter)
> >+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
> >qualifiers, AnnotatedParameter<?> parameter)
> > {
> >- this(ownerBean, type, qualifiers, parameter,
> >parameter.getDeclaringCallable().getJavaMember(),
> >parameter.isAnnotationPresent(Delegate.class), false);
> >+ this(ownerBean, parameter.getBaseType(), qualifiers, parameter,
> >parameter.getDeclaringCallable().getJavaMember(),
> >parameter.isAnnotationPresent(Delegate.class), false);
> > }
> >
> > private InjectionPointImpl(Bean<?> ownerBean, Type type,
> >Collection<Annotation> qualifiers, Annotated annotated, Member member,
> >boolean delegate, boolean isTransient)
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AbstractAnnotated.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1502035&r1=15020
> >34&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AbstractAnnotated.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AbstractAnnotated.java
> >Wed Jul 10 22:48:58 2013
> >@@ -32,6 +32,7 @@ import org.apache.webbeans.config.WebBea
> >import org.apache.webbeans.exception.WebBeansConfigurationException;
> >import org.apache.webbeans.util.AnnotationUtil;
> >import org.apache.webbeans.util.ClassUtil;
> >+import org.apache.webbeans.util.GenericsUtil;
> >
> >/**
> > * Abstract implementation of the {@link Annotated} contract.
> >@@ -52,7 +53,7 @@ abstract class AbstractAnnotated impleme
> > private final WebBeansContext webBeansContext;
> >
> > /**
> >- * Createa a new annotated element.
> >+ * Creates a new annotated element.
> > *
> > * @param webBeansContext our WebBeansContext
> > * @param baseType annotated element type
> >@@ -142,18 +143,19 @@ abstract class AbstractAnnotated impleme
> > {
> > if (typeClosures == null)
> > {
> >- initTypeClosures();
> >+ initTypeClosure();
> > }
> > return typeClosures;
> > }
> >
> >- private synchronized void initTypeClosures()
> >+ protected abstract Class<?> getOwningClass();
> >+ protected abstract Class<?> getDeclaringClass();
> >+
> >+ private synchronized void initTypeClosure()
> > {
> > if (typeClosures == null)
> > {
> >- typeClosures = new HashSet<Type>();
> >- typeClosures.add(Object.class);
> >- ClassUtil.setTypeHierarchy(typeClosures, baseType);
> >+ typeClosures = GenericsUtil.getTypeClosure(baseType,
> >getOwningClass(), getDeclaringClass());
> > Set<String> ignoredInterfaces =
> >webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
> > for (Iterator<Type> i = typeClosures.iterator();
> >i.hasNext(); )
> > {
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AbstractAnnotatedMember.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/portable/AbstractAnnotatedMember.java?rev=1502035&r1
> >=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AbstractAnnotatedMember.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AbstractAnnotatedMember.java
> >Wed Jul 10 22:48:58 2013
> >@@ -42,7 +42,6 @@ abstract class AbstractAnnotatedMember<X
> > /**Member type*/
> > protected final Member javaMember;
> >
> >- @SuppressWarnings("unchecked")
> > AbstractAnnotatedMember(WebBeansContext webBeansContext, Type
> >baseType, Member javaMember, AnnotatedType<X> declaringType)
> > {
> > super(webBeansContext, baseType);
> >@@ -83,6 +82,18 @@ abstract class AbstractAnnotatedMember<X
> > return Modifier.isStatic(javaMember.getModifiers());
> > }
> >
> >+ @Override
> >+ protected Class<?> getOwningClass()
> >+ {
> >+ return declaringType.getJavaClass();
> >+ }
> >+
> >+ @Override
> >+ protected Class<?> getDeclaringClass()
> >+ {
> >+ return javaMember.getDeclaringClass();
> >+ }
> >+
> > public String toString()
> > {
> > StringBuilder builder = new StringBuilder(super.toString());
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedConstructorImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/portable/AnnotatedConstructorImpl.java?rev=1502035&r
> >1=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedConstructorImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedConstructorImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -19,6 +19,7 @@
> >package org.apache.webbeans.portable;
> >
> >import org.apache.webbeans.config.WebBeansContext;
> >+import org.apache.webbeans.util.GenericsUtil;
> >
> >import java.lang.reflect.Constructor;
> >
> >@@ -43,7 +44,7 @@ public class AnnotatedConstructorImpl<X>
> > {
> > super(webBeansContext, javaMember.getDeclaringClass(),
> >javaMember,
> >declaringType);
> > setAnnotations(javaMember.getDeclaredAnnotations());
> >- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
> >javaMember.getParameterAnnotations());
> >+
>
>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.ge
> >tJavaClass(),
> >javaMember), javaMember.getParameterAnnotations());
> > }
> >
> >
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedFieldImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/portable/AnnotatedFieldImpl.java?rev=1502035&r1=1502
> >034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedFieldImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedFieldImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -19,6 +19,7 @@
> >package org.apache.webbeans.portable;
> >
> >import org.apache.webbeans.config.WebBeansContext;
> >+import org.apache.webbeans.util.GenericsUtil;
> >
> >import java.lang.reflect.Field;
> >
> >@@ -43,7 +44,7 @@ public class AnnotatedFieldImpl<X> exten
> > */
> > AnnotatedFieldImpl(WebBeansContext webBeansContext, Field
javaMember,
> >AnnotatedType<X> declaringType)
> > {
> >- super(webBeansContext, javaMember.getGenericType(),
> >javaMember,declaringType);
> >+ super(webBeansContext,
> >GenericsUtil.resolveType(declaringType.getJavaClass(), javaMember),
> >javaMember,declaringType);
> >
> > setAnnotations(javaMember.getDeclaredAnnotations());
> > }
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedMethodImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/portable/AnnotatedMethodImpl.java?rev=1502035&r1=150
> >2034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedMethodImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedMethodImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -19,6 +19,7 @@
> >package org.apache.webbeans.portable;
> >
> >import org.apache.webbeans.config.WebBeansContext;
> >+import org.apache.webbeans.util.GenericsUtil;
> >
> >import java.lang.reflect.Method;
> >
> >@@ -41,11 +42,11 @@ class AnnotatedMethodImpl<X> extends Abs
> > * @param declaringType declaring type
> > * @param javaMember method
> > */
> >- AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
> >javaMember,AnnotatedType<X> declaringType)
> >+ AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
> >javaMember, AnnotatedType<X> declaringType)
> > {
> >- super(webBeansContext, javaMember.getGenericReturnType(),
> >javaMember,declaringType);
> >+ super(webBeansContext,
> >GenericsUtil.resolveReturnType(declaringType.getJavaClass(), javaMember),
> >javaMember,declaringType);
> > setAnnotations(javaMember.getDeclaredAnnotations());
> >- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
> >javaMember.getParameterAnnotations());
> >+
>
>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.ge
> >tJavaClass(),
> >javaMember), javaMember.getParameterAnnotations());
> > }
> >
> >
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedParameterImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/portable/AnnotatedParameterImpl.java?rev=1502035&r1=
> >1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedParameterImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedParameterImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -75,4 +75,16 @@ class AnnotatedParameterImpl<X> extends
> >
> > return builder.toString();
> > }
> >+
> >+ @Override
> >+ protected Class<?> getOwningClass()
> >+ {
> >+ return declaringCallable.getDeclaringType().getJavaClass();
> >+ }
> >+
> >+ @Override
> >+ protected Class<?> getDeclaringClass()
> >+ {
> >+ return declaringCallable.getJavaMember().getDeclaringClass();
> >+ }
> >}
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedTypeImpl.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1502035&r1=15020
> >34&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedTypeImpl.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
> >e/AnnotatedTypeImpl.java
> >Wed Jul 10 22:48:58 2013
> >@@ -132,6 +132,18 @@ class AnnotatedTypeImpl<X>
> > return getState().methods;
> > }
> >
> >+ @Override
> >+ protected Class<?> getOwningClass()
> >+ {
> >+ return getJavaClass();
> >+ }
> >+
> >+ @Override
> >+ protected Class<?> getDeclaringClass()
> >+ {
> >+ return getJavaClass();
> >+ }
> >+
> > private State getState()
> > {
> > State result = state;
> >@@ -153,7 +165,6 @@ class AnnotatedTypeImpl<X>
> > return result;
> > }
> >
> >-
> > private class State
> > {
> >
> >@@ -230,12 +241,15 @@ class AnnotatedTypeImpl<X>
> >
> > if (supertype != null)
> > {
> >- fields.addAll(supertype.getFields());
> >+ for (AnnotatedField<? super X> field:
> >supertype.getFields())
> >+ {
> >+ fields.add(new
> >AnnotatedFieldImpl<X>(getWebBeansContext(), field.getJavaMember(),
> >AnnotatedTypeImpl.this));
> >+ }
> > for (AnnotatedMethod<? super X> method :
> >supertype.getMethods())
> > {
> > if (!isOverridden(method))
> > {
> >- methods.add(method);
> >+ methods.add(new
> >AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(),
> >AnnotatedTypeImpl.this));
> > }
> > }
> > }
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
> >assUtil.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/util/ClassUtil.java?rev=1502035&r1=1502034&r2=150203
> >5&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
> >assUtil.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
> >assUtil.java
> >Wed Jul 10 22:48:58 2013
> >@@ -18,14 +18,6 @@
> > */
> >package org.apache.webbeans.util;
> >
> >-import org.apache.webbeans.config.BeanTypeSetResolver;
> >-import org.apache.webbeans.exception.WebBeansException;
> >-import org.apache.webbeans.exception.inject.DefinitionException;
> >-
> >-import javax.enterprise.event.Event;
> >-import javax.enterprise.inject.spi.Bean;
> >-import javax.enterprise.inject.spi.InjectionPoint;
> >-import javax.inject.Provider;
> >import java.lang.reflect.GenericArrayType;
> >import java.lang.reflect.Method;
> >import java.lang.reflect.Modifier;
> >@@ -41,6 +33,11 @@ import java.util.List;
> >import java.util.Map;
> >import java.util.Set;
> >
> >+import javax.enterprise.inject.spi.InjectionPoint;
> >+
> >+import org.apache.webbeans.exception.WebBeansException;
> >+import org.apache.webbeans.exception.inject.DefinitionException;
> >+
> >/**
> > * Utility classes with respect to the class operations.
> > *
> >@@ -124,21 +121,24 @@ public final class ClassUtil
> > return clazz.isMemberClass();
> > }
> >
> >- public static Class<?> getPrimitiveWrapper(Class<?> clazz)
> >+ public static boolean isSame(Type type1, Type type2)
> > {
> >- Asserts.nullCheckForClass(clazz);
> >-
> >- return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
> >-
> >+ if ((type1 instanceof Class) && ((Class<?>)type1).isPrimitive())
> >+ {
> >+ type1 = PRIMITIVE_TO_WRAPPERS_MAP.get(type1);
> >+ }
> >+ if ((type2 instanceof Class) && ((Class<?>)type2).isPrimitive())
> >+ {
> >+ type2 = PRIMITIVE_TO_WRAPPERS_MAP.get(type2);
> >+ }
> >+ return type1 == type2;
> > }
> >
> >- public static Class<?> identityOrGetPrimitiveWrapper(Class<?> clazz)
> >+ public static Class<?> getPrimitiveWrapper(Class<?> clazz)
> > {
> >- if (clazz.isPrimitive())
> >- {
> >- return getPrimitiveWrapper(clazz);
> >- }
> >- return clazz;
> >+ Asserts.nullCheckForClass(clazz);
> >+
> >+ return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
> >
> > }
> >
> >@@ -326,7 +326,6 @@ public final class ClassUtil
> > return getObjectMethodNames().contains(methodName);
> > }
> >
> >-
> > /**
> > * Returns true if type is an instance of
> ><code>ParameterizedType</code>
> > * else otherwise.
> >@@ -426,131 +425,6 @@ public final class ClassUtil
> > }
> >
> > /**
> >- * See specification 5.2.3.
> >- * @param beanType bean type
> >- * @param requiredType required type
> >- * @return true if assignable
> >- */
> >- public static boolean isAssignable(Type beanType, Type requiredType)
> >- {
> >- Asserts.assertNotNull(beanType, "beanType parameter can not be
> >null");
> >- Asserts.assertNotNull(requiredType, "requiredType parameter can
> >not be null");
> >-
> >- //Bean and required types are ParametrizedType
> >- if (beanType instanceof ParameterizedType && requiredType
> >instanceof ParameterizedType)
> >- {
> >- return isAssignableForParametrized((ParameterizedType)
> >beanType, (ParameterizedType) requiredType);
> >- }
> >- //Both type is class type
> >- else if (beanType instanceof Class && requiredType instanceof
> >Class)
> >- {
> >- Class<?> clzBeanType = (Class<?>)beanType;
> >- Class<?> clzReqType = (Class<?>)requiredType;
> >-
> >- if(clzBeanType.isPrimitive())
> >- {
> >- clzBeanType = getPrimitiveWrapper(clzBeanType);
> >- }
> >-
> >- if(clzReqType.isPrimitive())
> >- {
> >- clzReqType = getPrimitiveWrapper(clzReqType);
> >- }
> >-
> >- return clzReqType.equals(clzBeanType);
> >- }
> >- //Bean type is Parametrized and required type is class type
> >- else if(beanType instanceof ParameterizedType && requiredType
> >instanceof Class)
> >- {
> >- boolean ok = true;
> >- ParameterizedType ptBean = (ParameterizedType)beanType;
> >- Class<?> clazzBeanType =
> >identityOrGetPrimitiveWrapper((Class<?>)ptBean.getRawType());
> >- Class<?> clazzReqType =
> >identityOrGetPrimitiveWrapper((Class<?>)requiredType);
> >- if(clazzBeanType.equals(clazzReqType))
> >- {
> >- Type[] beanTypeArgs = ptBean.getActualTypeArguments();
> >- for(Type actual : beanTypeArgs)
> >- {
> >- if(!ClassUtil.isUnboundedTypeVariable(actual))
> >- {
> >- if(actual instanceof Class)
> >- {
> >- Class<?> clazz = (Class<?>)actual;
> >- if(!clazz.equals(Object.class))
> >- {
> >- ok = false;
> >- break;
> >- }
> >- }
> >- else
> >- {
> >- ok = false;
> >- break;
> >- }
> >- }
> >- }
> >- }
> >- else
> >- {
> >- ok = false;
> >- }
> >-
> >-
> >- return ok;
> >- }
> >- //Bean type is class and required type is parametrized
> >- else if(beanType instanceof Class && requiredType instanceof
> >ParameterizedType)
> >- {
> >- final Class<?> clazzBeanType = (Class<?>)beanType;
> >- final ParameterizedType ptReq =
> >(ParameterizedType)requiredType;
> >- final Class<?> clazzReqType = (Class<?>)ptReq.getRawType();
> >- final Type genericSuperClass =
> >clazzBeanType.getGenericSuperclass();
> >-
> >- if (Provider.class.isAssignableFrom(clazzReqType) ||
> >- Event.class.isAssignableFrom(clazzReqType))
> >- {
> >- if (isClassAssignable(clazzReqType, clazzBeanType))
> >- {
> >- return true;
> >- }
> >- }
> >- else if (Bean.class.isAssignableFrom(clazzReqType))
> >- {
> >- // May be Bean, Interceptor or Decorator and thus must
> >match directly
> >- if (clazzReqType.equals(clazzBeanType))
> >- {
> >- return true;
> >- }
> >- }
> >- else if (genericSuperClass instanceof ParameterizedType)
> >- {
> >- final Type[] params = ((ParameterizedType)
> >genericSuperClass).getActualTypeArguments();
> >- final Type[] requiredParams = ((ParameterizedType)
> >requiredType).getActualTypeArguments();
> >- if (params.length != requiredParams.length)
> >- {
> >- return false;
> >- }
> >-
> >- for (int i = 0; i < params.length; i++)
> >- {
> >- if (!isAssignable(params[i], requiredParams[i]))
> >- {
> >- return false;
> >- }
> >- }
> >-
> >- return isClassAssignable(clazzReqType, clazzBeanType);
> >- }
> >-
> >- return false;
> >- }
> >- else
> >- {
> >- return false;
> >- }
> >- }
> >-
> >- /**
> > * Checks that event is applicable
> > * for the given observer type.
> > * @param eventType event type
> >@@ -718,7 +592,13 @@ public final class ClassUtil
> > ok++;
> > }
> > }
> >-
> >+ else if (requiredTypeArg instanceof ParameterizedType &&
> >beanTypeArg instanceof TypeVariable)
> >+ {
> >+ if
> >(checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(beanTypeArg,
> >requiredTypeArg))
> >+ {
> >+ ok++;
> >+ }
> >+ }
> > //Both type is actual type
> > else if((beanTypeArg instanceof Class) && (requiredTypeArg
> >instanceof Class))
> > {
> >@@ -874,6 +754,7 @@ public final class ClassUtil
> > Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
> >
> > TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
> >+ //TODO respect other bounds
> > Type tvBound = tvBeanTypeArg.getBounds()[0];
> >
> > if(tvBound instanceof Class)
> >@@ -891,6 +772,13 @@ public final class ClassUtil
> >
> > return true;
> > }
> >+
> >+ public static boolean
> >checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(Type beanTypeArg,
> >Type requiredTypeArg)
> >+ {
> >+ ParameterizedType requiredType =
> >(ParameterizedType)requiredTypeArg;
> >+ //TODO respect parameters of required type
> >+ return
checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg,
> >requiredType.getRawType());
> >+ }
> >
> > public static boolean
> >checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(Type beanTypeArg, Type
> >requiredTypeArg)
> > {
> >@@ -972,16 +860,6 @@ public final class ClassUtil
> > }
> > }
> >
> >-
> >- public static Set<Type> setTypeHierarchy(Set<Type> set, Type clazz)
> >- {
> >- BeanTypeSetResolver resolver = new BeanTypeSetResolver(clazz);
> >- resolver.startConfiguration();
> >- set.addAll(resolver.getHierarchy());
> >-
> >- return set;
> >- }
> >-
> > /**
> > * Return raw class type for given type.
> > * @param type base type instance
> >
> >Added:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
> >nericsUtil.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
> >a/org/apache/webbeans/util/GenericsUtil.java?rev=1502035&view=auto
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
> >nericsUtil.java
> >(added)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
> >nericsUtil.java
> >Wed Jul 10 22:48:58 2013
> >@@ -0,0 +1,625 @@
> >+/*
> >+ * Licensed to the Apache Software Foundation (ASF) under one
> >+ * or more contributor license agreements. See the NOTICE file
> >+ * distributed with this work for additional information
> >+ * regarding copyright ownership. The ASF licenses this file
> >+ * to you 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.apache.webbeans.util;
> >+
> >+import java.lang.reflect.Array;
> >+import java.lang.reflect.Constructor;
> >+import java.lang.reflect.Field;
> >+import java.lang.reflect.GenericArrayType;
> >+import java.lang.reflect.Member;
> >+import java.lang.reflect.Method;
> >+import java.lang.reflect.ParameterizedType;
> >+import java.lang.reflect.Type;
> >+import java.lang.reflect.TypeVariable;
> >+import java.lang.reflect.WildcardType;
> >+import java.util.ArrayList;
> >+import java.util.HashSet;
> >+import java.util.List;
> >+import java.util.Set;
> >+
> >+import org.apache.webbeans.config.OwbParametrizedTypeImpl;
> >+import org.apache.webbeans.exception.inject.DefinitionException;
> >+
> >+/**
> >+ * Utility classes for generic type operations.
> >+ */
> >+public final class GenericsUtil
> >+{
> >+ public static boolean satisfiesDependency(Type injectionPointType,
> >Type beanType)
> >+ {
> >+ validate(injectionPointType);
> >+ if (injectionPointType instanceof TypeVariable ||
> >injectionPointType instanceof WildcardType || injectionPointType
> >instanceof
> >GenericArrayType)
> >+ {
> >+ throw new DefinitionException("Injection point cannot define
> >Type Variable " + injectionPointType);
> >+ }
> >+ if (beanType instanceof TypeVariable || beanType instanceof
> >WildcardType || beanType instanceof GenericArrayType)
> >+ {
> >+ return isAssignableFrom(injectionPointType, beanType);
> >+ }
> >+ else
> >+ {
> >+ Type injectionPointRawType = injectionPointType instanceof
> >ParameterizedType? ((ParameterizedType)injectionPointType).getRawType():
> >injectionPointType;
> >+ Type beanRawType = beanType instanceof ParameterizedType?
> >((ParameterizedType)beanType).getRawType(): beanType;
> >+
> >+ return ClassUtil.isSame(injectionPointRawType, beanRawType)?
> >isAssignableFrom(injectionPointType, beanType): false;
> >+ }
> >+ }
> >+
> >+ /**
> >+ * 5.2.3 and 5.2.4
> >+ */
> >+ public static boolean isAssignableFrom(Type requiredType, Type
> >beanType)
> >+ {
> >+ if (requiredType instanceof Class)
> >+ {
> >+ return isAssignableFrom((Class<?>)requiredType, beanType);
> >+ }
> >+ else if (requiredType instanceof ParameterizedType)
> >+ {
> >+ return isAssignableFrom((ParameterizedType)requiredType,
> >beanType);
> >+ }
> >+ else if (requiredType instanceof TypeVariable)
> >+ {
> >+ return isAssignableFrom((TypeVariable<?>)requiredType,
> >beanType);
> >+ }
> >+ else if (requiredType instanceof GenericArrayType)
> >+ {
> >+ return isAssignableFrom((GenericArrayType)requiredType,
> >beanType);
> >+ }
> >+ else if (requiredType instanceof WildcardType)
> >+ {
> >+ return isAssignableFrom((WildcardType)requiredType,
> >beanType);
> >+ }
> >+ else
> >+ {
> >+ throw new IllegalArgumentException("Unsupported type " +
> >requiredType.getClass());
> >+ }
> >+ }
> >+
> >+ private static boolean isAssignableFrom(Class<?> injectionPointType,
> >Type beanType)
> >+ {
> >+ if (beanType instanceof Class)
> >+ {
> >+ return isAssignableFrom(injectionPointType,
> >(Class<?>)beanType);
> >+ }
> >+ else if (beanType instanceof TypeVariable)
> >+ {
> >+ return isAssignableFrom(injectionPointType,
> >(TypeVariable<?>)beanType);
> >+ }
> >+ else if (beanType instanceof ParameterizedType)
> >+ {
> >+ return isAssignableFrom(injectionPointType,
> >(ParameterizedType)beanType);
> >+ }
> >+ else if (beanType instanceof GenericArrayType)
> >+ {
> >+ return isAssignableFrom(injectionPointType,
> >(GenericArrayType)beanType);
> >+ }
> >+ else if (beanType instanceof WildcardType)
> >+ {
> >+ return isAssignableFrom((Type)injectionPointType,
> >(WildcardType)beanType);
> >+ }
> >+ else
> >+ {
> >+ throw new IllegalArgumentException("Unsupported type " +
> >injectionPointType.getClass());
> >+ }
> >+ }
> >+
> >+ private static boolean isAssignableFrom(Class<?> injectionPointType,
> >Class<?> beanType)
> >+ {
> >+ return ClassUtil.isClassAssignable(injectionPointType,
beanType);
> >+ }
> >+
> >+ private static boolean isAssignableFrom(Class<?> injectionPointType,
> >TypeVariable<?> beanType)
> >+ {
> >+ for (Type bounds: beanType.getBounds())
> >+ {
> >+ if (isAssignableFrom(injectionPointType, bounds))
> >+ {
> >+ return true;
> >+ }
> >+ }
> >+ return false;
> >+ }
> >+
> >+ /**
> >+ * CDI Spec. 5.2.4: "A parameterized bean type is considered
> >assignable to a raw required type
> >+ * if the raw types are identical and all type parameters of the
bean
> >type are either unbounded type variables or java.lang.Object."
> >+ */
> >+ private static boolean isAssignableFrom(Class<?> injectionPointType,
> >ParameterizedType beanType)
> >+ {
> >+ if (beanType.getRawType() != injectionPointType)
> >+ {
> >+ return false; //raw types don't match
> >+ }
> >+ for (Type typeArgument: beanType.getActualTypeArguments())
> >+ {
> >+ if (typeArgument == Object.class)
> >+ {
> >+ continue;
> >+ }
> >+ if (!(typeArgument instanceof TypeVariable))
> >+ {
> >+ return false; //neither object nor type variable
> >+ }
> >+ TypeVariable<?> typeVariable =
(TypeVariable<?>)typeArgument;
> >+ for (Type bounds: typeVariable.getBounds())
> >+ {
> >+ if (bounds != Object.class)
> >+ {
> >+ return false; //bound type variable
> >+ }
> >+ }
> >+ }
> >+ return true;
> >+ }
> >+
> >+ private static boolean isAssignableFrom(Class<?> injectionPointType,
> >GenericArrayType beanType)
> >+ {
> >+ if (!injectionPointType.isArray())
> >+ {
> >+ return false;
> >+ }
> >+ return isAssignableFrom(injectionPointType.getComponentType(),
> >beanType.getGenericComponentType());
> >+ }
> >+
> >+ private static boolean isAssignableFrom(Type injectionPointType,
> >WildcardType beanType)
> >+ {
> >+ for (Type bounds: beanType.getLowerBounds())
> >+ {
> >+ if (!isAssignableFrom(bounds, injectionPointType))
> >+ {
> >+ return false;
> >+ }
> >+ }
> >+ for (Type bounds: beanType.getUpperBounds())
> >+ {
> >+ if (isAssignableFrom(injectionPointType, bounds))
> >+ {
> >+ return true;
> >+ }
> >+ }
> >+ return false;
> >+ }
> >+
> >+ private static boolean isAssignableFrom(ParameterizedType
> >injectionPointType, Type beanType)
> >+ {
> >+ if (beanType instanceof Class)
> >+ {
> >+ return isAssignableFrom(injectionPointType,
> >(Class<?>)beanType);
> >+ }
> >+ else if (beanType instanceof TypeVariable)
> >+ {
> >+ return isAssignableFrom(injectionPointType,
> >(TypeVariable<?>)beanType);
> >+ }
> >+ else if (beanType instanceof ParameterizedType)
> >+ {
> >+ return isAssignableFrom(injectionPointType,
> >(ParameterizedType)beanType);
> >+ }
> >+ else if (beanType instanceof WildcardType)
> >+ {
> >+ return isAssignableFrom((Type)injectionPointType,
> >(WildcardType)beanType);
> >+ }
> >+ else if (beanType instanceof GenericArrayType)
> >+ {
> >+ return false;
> >+ }
> >+ else
> >+ {
> >+ throw new IllegalArgumentException("Unsupported type " +
> >injectionPointType.getClass());
> >+ }
> >+ }
> >+
> >+ private static boolean isAssignableFrom(ParameterizedType
> >injectionPointType, Class<?> beanType)
> >+ {
> >+ return isAssignableFrom(injectionPointType.getRawType(),
> >beanType);
> >+ }
> >+
> >+ private static boolean isAssignableFrom(ParameterizedType
> >injectionPointType, TypeVariable<?> beanType)
> >+ {
> >+ for (Type bounds: beanType.getBounds())
> >+ {
> >+ if (isAssignableFrom(injectionPointType, bounds))
> >+ {
> >+ return true;
> >+ }
> >+ }
> >+ return false;
> >+ }
> >+
> >+ /**
> >+ * CDI Spec. 5.2.4
> >+ */
> >+ private static boolean isAssignableFrom(ParameterizedType
> >injectionPointType, ParameterizedType beanType)
> >+ {
> >+ if (injectionPointType.getRawType() != beanType.getRawType())
> >+ {
> >+ return false;
> >+ }
> >+ Type[] injectionPointTypeArguments =
> >injectionPointType.getActualTypeArguments();
> >+ Type[] beanTypeArguments = beanType.getActualTypeArguments();
> >+ for (int i = 0; i < injectionPointTypeArguments.length; i++)
> >+ {
> >+ if (!isAssignableFrom(injectionPointTypeArguments[i],
> >beanTypeArguments[i]))
> >+ {
> >+ return false;
> >+ }
> >+ }
> >+ return true;
> >+ }
> >+
> >+ private static boolean isAssignableFrom(TypeVariable<?>
> >injectionPointType, Type beanType)
> >+ {
> >+ for (Type bounds: injectionPointType.getBounds())
> >+ {
> >+ if (!isAssignableFrom(bounds, beanType))
> >+ {
> >+ return false;
> >+ }
> >+ }
> >+ return true;
> >+ }
> >+
> >+ private static boolean isAssignableFrom(GenericArrayType
> >injectionPointType, Type beanType)
> >+ {
> >+ throw new UnsupportedOperationException("Not yet implementeds");
> >+ }
> >+
> >+ private static boolean isAssignableFrom(WildcardType
> >injectionPointType, Type beanType)
> >+ {
> >+ for (Type bounds: injectionPointType.getLowerBounds())
> >+ {
> >+ if (!isAssignableFrom(beanType, bounds))
> >+ {
> >+ return false;
> >+ }
> >+ }
> >+ for (Type bounds: injectionPointType.getUpperBounds())
> >+ {
> >+ if (!isAssignableFrom(bounds, beanType))
> >+ {
> >+ return false;
> >+ }
> >+ }
> >+ return true;
> >+ }
> >+
> >+ /**
> >+ * Resolves the actual type of the specified field for the type
> >hierarchy specified by the given subclass
> >+ */
> >+ public static Type resolveType(Class<?> subclass, Field field)
> >+ {
> >+ return resolveType(field.getGenericType(), new
> >TypeVariableResolver(subclass, field.getDeclaringClass()));
> >+ }
> >+
> >+ /**
> >+ * Resolves the actual return type of the specified method for the
> >type hierarchy specified by the given subclass
> >+ */
> >+ public static Type resolveReturnType(Class<?> subclass, Method
> >method)
> >+ {
> >+ return resolveType(method.getGenericReturnType(), new
> >TypeVariableResolver(subclass, method.getDeclaringClass()));
> >+ }
> >+
> >+ /**
> >+ * Resolves the actual parameter types of the specified constructor
> >for the type hierarchy specified by the given subclass
> >+ */
> >+ public static Type[] resolveParameterTypes(Class<?> subclass,
> >Constructor<?> constructor)
> >+ {
> >+ return resolveTypes(constructor.getGenericParameterTypes(), new
> >TypeVariableResolver(subclass, constructor.getDeclaringClass()));
> >+ }
> >+
> >+ /**
> >+ * Resolves the actual parameter types of the specified method for
> >the
> >type hierarchy specified by the given subclass
> >+ */
> >+ public static Type[] resolveParameterTypes(Class<?> subclass, Method
> >method)
> >+ {
> >+ return resolveTypes(method.getGenericParameterTypes(), new
> >TypeVariableResolver(subclass, method.getDeclaringClass()));
> >+ }
> >+
> >+ /**
> >+ * Resolves the actual type of the specified type for the type
> >hierarchy specified by the given subclass
> >+ */
> >+ public static Type resolveType(Type type, Class<?> subclass, Member
> >member)
> >+ {
> >+ return resolveType(type, new TypeVariableResolver(subclass,
> >member.getDeclaringClass()));
> >+ }
> >+
> >+ private static Type resolveType(Type type, TypeVariableResolver
> >resolver)
> >+ {
> >+ if (type instanceof Class)
> >+ {
> >+ return type;
> >+ }
> >+ else if (type instanceof ParameterizedType)
> >+ {
> >+ ParameterizedType parameterizedType =
> >(ParameterizedType)type;
> >+ Type[] resolvedTypes =
> >resolveTypes(parameterizedType.getActualTypeArguments(), resolver);
> >+ return new
> >OwbParametrizedTypeImpl(parameterizedType.getOwnerType(),
> >parameterizedType.getRawType(), resolvedTypes);
> >+ }
> >+ else if (type instanceof TypeVariable)
> >+ {
> >+ TypeVariable<?> variable = (TypeVariable<?>)type;
> >+ return resolver.resolve(variable);
> >+ }
> >+ else if (type instanceof WildcardType)
> >+ {
> >+ Type[] resolvedTypes = resolveTypes(((WildcardType)
> >type).getUpperBounds(), resolver);
> >+ return
> >resolveType(getMostSpecificType(getRawTypes(resolvedTypes, resolver),
> >resolvedTypes), resolver);
> >+ }
> >+ else if (type instanceof GenericArrayType)
> >+ {
> >+ Type componentType =
> >resolveType(((GenericArrayType)type).getGenericComponentType(),
resolver);
> >+ Class<?> componentClass = getRawType(componentType,
> >resolver);
> >+ return Array.newInstance(componentClass, 0).getClass();
> >+ }
> >+ else
> >+ {
> >+ throw new IllegalArgumentException("Unsupported type " +
> >type.getClass().getName());
> >+ }
> >+ }
> >+
> >+ public static Type[] resolveTypes(Type[] types, TypeVariableResolver
> >resolution)
> >+ {
> >+ Type[] resolvedTypeArguments = new Type[types.length];
> >+ for (int i = 0; i < types.length; i++)
> >+ {
> >+ resolvedTypeArguments[i] = resolveType(types[i],
resolution);
> >+ }
> >+ return resolvedTypeArguments;
> >+ }
> >+
> >+ public static Set<Type> getTypeClosure(Type type, Class<?>
> >owningClass, Class<?> declaringClass)
> >+ {
> >+ Set<Type> typeClosure = new HashSet<Type>();
> >+ typeClosure.add(Object.class);
> >+ fillTypeHierarchy(typeClosure, type, new
> >TypeVariableResolver(owningClass, declaringClass));
> >+ return typeClosure;
> >+ }
> >+
> >+ private static void fillTypeHierarchy(Set<Type> set, Type type,
> >TypeVariableResolver resolver)
> >+ {
> >+ if (type == null)
> >+ {
> >+ return;
> >+ }
> >+ Type resolvedType = GenericsUtil.resolveType(type, resolver);
> >+ set.add(resolvedType);
> >+ Class<?> resolvedClass = GenericsUtil.getRawType(resolvedType,
> >resolver);
> >+ if (resolvedClass.getSuperclass() != null)
> >+ {
> >+ fillTypeHierarchy(set, resolvedClass.getGenericSuperclass(),
> >resolver.add(resolvedClass));
> >+ }
> >+ for (Type interfaceType: resolvedClass.getGenericInterfaces())
> >+ {
> >+ fillTypeHierarchy(set, interfaceType,
> >resolver.add(resolvedClass, interfaceType));
> >+ }
> >+ }
> >+
> >+ static <T> Class<T> getRawType(Type type, TypeVariableResolver
> >resolver)
> >+ {
> >+ if (type instanceof Class)
> >+ {
> >+ return (Class<T>)type;
> >+ }
> >+ else if (type instanceof ParameterizedType)
> >+ {
> >+ return getRawType(((ParameterizedType) type).getRawType(),
> >resolver);
> >+ }
> >+ else if ((type instanceof TypeVariable) || (type instanceof
> >WildcardType) || (type instanceof GenericArrayType))
> >+ {
> >+ Type resolvedType = resolveType(type, resolver);
> >+ if (resolvedType instanceof TypeVariable)
> >+ {
> >+ TypeVariable<?> variable =
(TypeVariable<?>)resolvedType;
> >+ return
> >getRawType(resolveType(getRawType(variable.getBounds(), resolver),
> >resolver), resolver);
> >+ }
> >+ else
> >+ {
> >+ return getRawType(resolvedType, resolver);
> >+ }
> >+ }
> >+ else
> >+ {
> >+ throw new IllegalArgumentException("Unsupported type " +
> >type.getClass().getName());
> >+ }
> >+ }
> >+
> >+ private static Type getRawType(Type[] types, TypeVariableResolver
> >resolver)
> >+ {
> >+ Class<?>[] rawTypes = getRawTypes(types, resolver);
> >+ Class<?>[] classTypes = getClassTypes(rawTypes);
> >+ if (classTypes.length > 0)
> >+ {
> >+ return getMostSpecificType(classTypes, types);
> >+ }
> >+ else
> >+ {
> >+ return getMostSpecificType(rawTypes, types);
> >+ }
> >+ }
> >+
> >+ private static <T> Class<T>[] getRawTypes(Type[] types,
> >TypeVariableResolver resolver)
> >+ {
> >+ Class<T>[] rawTypes = new Class[types.length];
> >+ for (int i = 0; i < types.length; i++)
> >+ {
> >+ rawTypes[i] = getRawType(types[i], resolver);
> >+ }
> >+ return rawTypes;
> >+ }
> >+
> >+ private static Type getMostSpecificType(Class<?>[] types, Type[]
> >genericTypes)
> >+ {
> >+ Class<?> mostSpecificType = types[0];
> >+ int mostSpecificIndex = 0;
> >+ for (int i = 0; i < types.length; i++)
> >+ {
> >+ if (mostSpecificType.isAssignableFrom(types[i]))
> >+ {
> >+ mostSpecificType = types[i];
> >+ mostSpecificIndex = i;
> >+ }
> >+ }
> >+ return genericTypes[mostSpecificIndex];
> >+ }
> >+
> >+ private static Class<?>[] getClassTypes(Class<?>[] rawTypes)
> >+ {
> >+ List<Class<?>> classTypes = new ArrayList<Class<?>>();
> >+ for (Class<?> rawType : rawTypes)
> >+ {
> >+ if (!rawType.isInterface())
> >+ {
> >+ classTypes.add(rawType);
> >+ }
> >+ }
> >+ return classTypes.toArray(new Class[classTypes.size()]);
> >+ }
> >+
> >+ private static Type validate(Type type)
> >+ {
> >+ if (!(type instanceof Class)
> >+ && !(type instanceof ParameterizedType)
> >+ && !(type instanceof TypeVariable)
> >+ && !(type instanceof GenericArrayType)
> >+ && !(type instanceof WildcardType))
> >+ {
> >+ throw new IllegalArgumentException("Unsupported type " +
> >type.getClass());
> >+ }
> >+ return type;
> >+ }
> >+
> >+ /**
> >+ * resolves actual types of a TypeVariable for a specific type
> >hierarchy
> >+ */
> >+ private static class TypeVariableResolver
> >+ {
> >+ private List<TypeVariableDeclaration> declarations = new
> >ArrayList<TypeVariableDeclaration>();
> >+
> >+ private TypeVariableResolver(List<TypeVariableDeclaration>
> >implementation)
> >+ {
> >+ this.declarations = implementation;
> >+ }
> >+
> >+ public TypeVariableResolver(Class<?> subclass, Class<?>
> >declaringClass)
> >+ {
> >+ declarations.add(new TypeVariableDeclaration(subclass,
> >subclass.getGenericSuperclass()));
> >+ while (declaringClass != subclass &&
> >declaringClass.isAssignableFrom(subclass))
> >+ {
> >+ subclass = subclass.getSuperclass();
> >+ declarations.add(new TypeVariableDeclaration(subclass,
> >subclass.getGenericSuperclass()));
> >+ }
> >+ }
> >+
> >+ public Type resolve(TypeVariable<?> variable)
> >+ {
> >+ if (declarations.size() < 2)
> >+ {
> >+ return getRawType(variable.getBounds(), this);
> >+ }
> >+ int hierarchyIndex = declarations.size() - 1;
> >+ TypeVariableDeclaration typeVariableImplementation =
> >declarations.get(hierarchyIndex);
> >+ TypeVariable<?>[] typeParameters =
> >typeVariableImplementation.getDeclaredTypeParameters();
> >+ int typeIndex = -1;
> >+ for (int i = 0; i < typeParameters.length; i++)
> >+ {
> >+ if
> >(variable.getName().equals(typeParameters[i].getName()))
> >+ {
> >+ typeIndex = i;
> >+ break;
> >+ }
> >+ }
> >+ if (typeIndex == -1)
> >+ {
> >+ // type erasure
> >+ return Object.class;
> >+ }
> >+ TypeVariableDeclaration declaration =
> >declarations.get(hierarchyIndex - 1);
> >+ Type genericClass = declaration.getAssignment();
> >+ if (genericClass instanceof ParameterizedType)
> >+ {
> >+ ParameterizedType classType =
> >(ParameterizedType)genericClass;
> >+ return
> >resolveType(classType.getActualTypeArguments()[typeIndex], remove());
> >+ }
> >+ else
> >+ {
> >+ TypeVariable<?>[] typeVariables =
> >declaration.getDeclaredTypeParameters();
> >+ if (typeVariables.length > typeIndex)
> >+ {
> >+ return resolveType(typeVariables[typeIndex],
> >remove());
> >+ }
> >+ else
> >+ {
> >+ return Object.class; //type erasure
> >+ }
> >+ }
> >+ }
> >+
> >+ public TypeVariableResolver add(Class<?> type)
> >+ {
> >+ return add(type, type.getGenericSuperclass());
> >+ }
> >+
> >+ public TypeVariableResolver add(Class<?> declaringClass, Type
> >assignment)
> >+ {
> >+ List<TypeVariableDeclaration> declarations = new
> >ArrayList<TypeVariableDeclaration>(this.declarations);
> >+ declarations.add(new TypeVariableDeclaration(declaringClass,
> >assignment));
> >+ return new TypeVariableResolver(declarations);
> >+ }
> >+
> >+ public TypeVariableResolver remove()
> >+ {
> >+ List<TypeVariableDeclaration> declarations = new
> >ArrayList<TypeVariableDeclaration>(this.declarations);
> >+ declarations.remove(declarations.size() - 1);
> >+ return new TypeVariableResolver(declarations);
> >+ }
> >+ }
> >+
> >+ /**
> >+ * A declaration of type variables along with its assignments
> >+ */
> >+ private static class TypeVariableDeclaration
> >+ {
> >+ private Class<?> declaringClass;
> >+ private Type assignment;
> >+
> >+ public TypeVariableDeclaration(Class<?> declaringClass, Type
> >assignment)
> >+ {
> >+ this.declaringClass = declaringClass;
> >+ this.assignment = assignment;
> >+ }
> >+
> >+ public Type getAssignment()
> >+ {
> >+ return assignment;
> >+ }
> >+
> >+ public TypeVariable<?>[] getDeclaredTypeParameters()
> >+ {
> >+ return declaringClass.getTypeParameters();
> >+ }
> >+ }
> >+
> >+ private static class TypeErasureException extends Exception
> >+ {
> >+ public TypeErasureException()
> >+ {
> >+ super("generic type information not available");
> >+ }
> >+ }
> >+}
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
> >bBeansUtil.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>
>a/org/apache/webbeans/util/WebBeansUtil.java?rev=1502035&r1=1502034&r2=150
> >2035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
> >bBeansUtil.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
> >bBeansUtil.java
> >Wed Jul 10 22:48:58 2013
> >@@ -1058,16 +1058,7 @@ public final class WebBeansUtil
> > {
> > Type type = injectionPoint.getType();
> >
> >- Class<?> candidateClazz = null;
> >- if(type instanceof Class)
> >- {
> >- candidateClazz = (Class<?>)type;
> >- }
> >- else if(type instanceof ParameterizedType)
> >- {
> >- ParameterizedType pt = (ParameterizedType)type;
> >- candidateClazz = (Class<?>)pt.getRawType();
> >- }
> >+ Class<?> candidateClazz = ClassUtil.getClass(type);
> >
> > if(!candidateClazz.isAssignableFrom(Instance.class))
> > {
> >
> >Modified:
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/decorators/tests/GenericDecoratorTest.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>
>a/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java?
> >rev=1502035&r1=1502034&r2=1502035&view=diff
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/decorators/tests/GenericDecoratorTest.java
> >(original)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/decorators/tests/GenericDecoratorTest.java
> >Wed Jul 10 22:48:58 2013
> >@@ -86,5 +86,4 @@ public class GenericDecoratorTest extend
> > DecoratedBean decoratedBean = getInstance(DecoratedBean.class);
> > Assert.assertTrue(decoratedBean.isDecoratorCalled());
> > }
> >-
> >}
> >
> >Added:
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Bar.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>
>a/org/apache/webbeans/newtests/injection/generics/Bar.java?rev=1502035&vie
> >w=auto
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Bar.java
> >(added)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Bar.java
> >Wed Jul 10 22:48:58 2013
> >@@ -0,0 +1,77 @@
> >+/*
> >+ * Licensed to the Apache Software Foundation (ASF) under one
> >+ * or more contributor license agreements. See the NOTICE file
> >+ * distributed with this work for additional information
> >+ * regarding copyright ownership. The ASF licenses this file
> >+ * to you 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.apache.webbeans.newtests.injection.generics;
> >+
> >+import java.util.List;
> >+
> >+import javax.enterprise.event.Observes;
> >+import javax.enterprise.inject.Typed;
> >+import javax.inject.Inject;
> >+
> >+@Typed
> >+public class Bar<A, B> {
> >+
> >+ @Inject
> >+ @GenericQualifier
> >+ private Baz<A> baz;
> >+
> >+ @Inject
> >+ @GenericQualifier
> >+ private A a;
> >+
> >+ @Inject
> >+ private Baz<List<B>> bBazList;
> >+ private A[] aArray;
> >+ private Baz<A> aBazEvent;
> >+ private A aObserverInjectionPoint;
> >+
> >+ @Inject
> >+ public void setAArray(A[] aArray) {
> >+ this.aArray = aArray;
> >+ }
> >+
> >+ public void observeBaz(@Observes Baz<A> baz, @GenericQualifier A a)
{
> >+ this.aBazEvent = baz;
> >+ this.aObserverInjectionPoint = a;
> >+ }
> >+
> >+ public Baz<A> getBaz() {
> >+ return this.baz;
> >+ }
> >+
> >+ public Baz<List<B>> getBBazList() {
> >+ return this.bBazList;
> >+ }
> >+
> >+ public A getA() {
> >+ return this.a;
> >+ }
> >+
> >+ public A[] getAArray() {
> >+ return this.aArray;
> >+ }
> >+
> >+ public Baz<A> getABazEvent() {
> >+ return this.aBazEvent;
> >+ }
> >+
> >+ public A getAObserverInjectionPoint() {
> >+ return this.aObserverInjectionPoint;
> >+ }
> >+}
> >\ No newline at end of file
> >
> >Added:
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/BarVetoExtension.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>
>a/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java?re
> >v=1502035&view=auto
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/BarVetoExtension.java
> >(added)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/BarVetoExtension.java
> >Wed Jul 10 22:48:58 2013
> >@@ -0,0 +1,34 @@
> >+/*
> >+ * Licensed to the Apache Software Foundation (ASF) under one
> >+ * or more contributor license agreements. See the NOTICE file
> >+ * distributed with this work for additional information
> >+ * regarding copyright ownership. The ASF licenses this file
> >+ * to you 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.apache.webbeans.newtests.injection.generics;
> >+
> >+import javax.enterprise.event.Observes;
> >+import javax.enterprise.inject.spi.Extension;
> >+import javax.enterprise.inject.spi.ProcessAnnotatedType;
> >+
> >+public class BarVetoExtension implements Extension {
> >+
> >+ public void vetoBar(@Observes ProcessAnnotatedType<?>
> >annotatedTypeEvent)
> >+ {
> >+ if
> >(annotatedTypeEvent.getAnnotatedType().getJavaClass().equals(Bar.class))
> >+ {
> >+ annotatedTypeEvent.veto();
> >+ }
> >+ }
> >+}
> >
> >Added:
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Baz.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>
>a/org/apache/webbeans/newtests/injection/generics/Baz.java?rev=1502035&vie
> >w=auto
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Baz.java
> >(added)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/Baz.java
> >Wed Jul 10 22:48:58 2013
> >@@ -0,0 +1,23 @@
> >+/*
> >+ * Licensed to the Apache Software Foundation (ASF) under one
> >+ * or more contributor license agreements. See the NOTICE file
> >+ * distributed with this work for additional information
> >+ * regarding copyright ownership. The ASF licenses this file
> >+ * to you 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.apache.webbeans.newtests.injection.generics;
> >+
> >+public class Baz<T> {
> >+
> >+}
> >
> >Added:
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/BazSubclass.java
> >URL:
> >
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>
>a/org/apache/webbeans/newtests/injection/generics/BazSubclass.java?rev=150
> >2035&view=auto
>
>==========================================================================
> >====
> >---
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/BazSubclass.java
> >(added)
> >+++
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
> >s/injection/generics/BazSubclass.java
> >Wed Jul 10 22:48:58 2013
> >@@ -0,0 +1,27 @@
> >+/*
> >+ * Licensed to the Apache Software Foundation (ASF) under one
> >+ * or more contributor license agreements. See the NOTICE file
> >+ * distributed with this work for additional information
> >+ * regarding copyright ownership. The ASF licenses this file
> >+ * to you 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.apache.webbeans.newtests.injection.generics;
> >+
> >+
> >+public class BazSubclass extends Baz<String> {
> >+
> >+ public BazSubclass(String string)
> >+ {
> >+ }
> >+}
Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
Posted by Mark Struberg <st...@yahoo.de>.
txs Arne, no need to excuse!
"Wo gehobelt wird fallen Späne"
LieGrue,
strub
________________________________
From: Arne Limburg <ar...@openknowledge.de>
To: "dev@openwebbeans.apache.org" <de...@openwebbeans.apache.org>
Sent: Thursday, 11 July 2013, 22:50
Subject: Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
Sorry guys,
I extended a test of OWB to reproduce the problem and fixed it.
Should work fine now.
Plz let me know if anything does not work.
Cheers,
Arne
Am 11.07.13 15:57 schrieb "Mark Struberg" unter <st...@yahoo.de>:
>yikes, this also stales my development team :/
>
>Arne, I will rollback this commit and start a new deployment.
>
>LieGrue,
>strub
>
>
>
>
>________________________________
> From: Romain Manni-Bucau <rm...@gmail.com>
>To: openwebbeans-dev <de...@openwebbeans.apache.org>
>Sent: Thursday, 11 July 2013, 12:51
>Subject: Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>webbeans-impl/src/main/java/org/apache/webbeans/component/
>webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
>webbeans-impl/src/main/java/org/apache/webbeans/config/
>webbeans-impl/sr...
>
>
>Hi Arne,
>
>this commit broke openejb CDi 1.0 TCKs
>
>basically
>org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEventT
>est
>is no more passing, any idea?
>
>basically we observes now too much events.
>
>if you want to give a try on openejb just checkout tomee trunk then build
>(mvn clean install -pl tck/cdi-embedded -am -Dmaven.test.skip=true) then
>fo
>in tck/cdi-embedded module, update the pom to point to failing.xml testng
>config:
>
><suiteXmlFile>src/test/resources/failing.xml</suiteXmlFile>
>
>and put in this file:
>
><?xml version="1.0" encoding="UTF-8"?>
><suite name="CDI TCK" verbose="0">
> <test name="CDI TCK">
> <classes>
> <class
>name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.Container
>EventTest"/>
> </classes>
> </test>
></suite>
>
>then simply run mvn clean install on this module and you'll get the
>failure
>
>
>any help is welcomed ;)
>
>*Romain Manni-Bucau*
>*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
>*Blog:
>**http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
>*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
>*Github: https://github.com/rmannibucau*
>
>
>
>---------- Forwarded message ----------
>From: <ar...@apache.org>
>Date: 2013/7/11
>Subject: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>webbeans-impl/src/main/java/org/apache/webbeans/component/
>webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
>webbeans-impl/src/main/java/org/apache/webbeans/config/
>webbeans-impl/sr...
>To: commits@openwebbeans.apache.org
>
>
>Author: arne
>Date: Wed Jul 10 22:48:58 2013
>New Revision: 1502035
>
>URL: http://svn.apache.org/r1502035
>Log:
>OWB-878: Re-implemented generic handling
>
>Added:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
>nericsUtil.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/inject/
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/inject/generic/
> - copied from r1502033,
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/inject/generic/
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Bar.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BarVetoExtension.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Baz.java
>
>openwebbeans/trunk/webbens-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BazSubclass.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Foo.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/GenericBeanTest.java
> - copied, changed from r1502033,
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/inject/generic/GenericBeanTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/GenericFactory.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/GenericQualifier.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/GenericsTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/util/Ge
>nericsUtilTest.java
>Removed:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>BeanTypeSetResolver.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorResolverRules.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/inject/generic/GenericBeanTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/inject/generic/
>Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/AbstractProducerBean.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerFieldBean.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerMethodBean.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/DecoratorBeanBuilder.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/InterceptorBeanBuilder.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/MethodProducerFactory.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerFieldBeansBuilder.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerMethodBeansBuilder.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>OwbParametrizedTypeImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/BeanManagerImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionResolver.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorsManager.java
>
>openwebbeans/trunk/wbbeans-impl/src/main/java/org/apache/webbeans/event/O
>bserverMethodImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointFactory.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotated.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotatedMember.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedConstructorImpl.java
>
>openwebbeans/trunk/ebbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedFieldImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedMethodImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedParameterImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedTypeImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
>assUtil.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/decorators/tests/GenericDecoratorTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/promethods/beans/MethodTypeProduces1.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/clazzClazzTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/inject/parametrized/GenericClassTest.java
>
>openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plug
>in/OpenWebBeansJsfPlugin.java
>
>openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/
>plugin/OpenWebBeansJsfPlugin.java
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/AbstractProducerBean.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/AbstractProducerBean.java?rev=1502035&r1=1
>502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/AbstractProducerBean.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/AbstractProducerBean.java
>Wed Jul 10 2:48:58 2013
>@@ -67,7 +67,7 @@ public class AbstractProducerBean<T> ext
>
> @Override
> public Class<T> getReturnType()
>- {
>+ {
> return returnType;
> }
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerFieldBean.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/ProducerFieldBean.java?rev=1502035&r1=1502
>034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerFieldBean.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerFieldBean.java
>Wed Jul 10 22:48:58 2013
>@@ -24,7 +24,6 @@ import java.lang.reflect.Field;
>import javax.enterprise.context.spi.CreationalContext;
>
>import org.apache.webbeans.component.spi.ProducerFactory;
>-import org.apache.webbeans.util.ClassUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>
>/**
>@@ -108,7 +107,7 @@ public class ProducerFieldBean<T> extend
> " with passivating scope @%s" +
> " must be Serializable";
>
>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope
>(),
>- ClassUtil.isClassAssignable(Serializable.class,
>getReturnType()), errorMessage, producerField.getName(),
>+ getReturnType() instanceof Serializable, errorMessage,
>producerField.getName(),
> getBeanClass().getName(), getScope().getName());
> }
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerMethodBean.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/ProducerMethodBean.java?rev=1502035&r1=150
>2034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerMethodBean.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerMethodBean.java
>Wed Jul 10 22:48:58 2013
>@@ -25,7 +25,6 @@ import javax.enterprise.context.spi.Crea
>
>import org.apache.webbeans.component.creation.MethodProducerFactory;
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>-import org.apache.webbeans.util.ClassUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>
>/**
>@@ -150,7 +149,7 @@ public class ProducerMethodBean<T> exten
> " with passivating scope @%s" +
> " must be Serializable";
>
>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope
>(),
>- ClassUtil.isClassAssignable(Serializable.class,
>getReturnType()), errorMessage, creatorMethod.getName(),
>getBeanClass().getName(),
>+ getReturnType() instanceof Serializable, errorMessage,
>creatorMethod.getName(), getBeanClass().getName(),
> getScope().getName());
>
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/DecoratorBeanBuilder.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=150
>2035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/DecoratorBeanBuilder.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/DecoratorBeanBuilder.java
>Wed Jul 10 22:48:58 2013
>@@ -29,11 +29,12 @@ import javax.enterprise.inject.spi.Annot
>import javax.enterprise.inject.spi.AnnotatedType;
>import javax.enterprise.inject.spi.InjectionPoint;
>import javax.inject.Inject;
>+
>+import java.io.Serializable;
>import java.lang.annotation.Annotation;
>import java.lang.reflect.AnnotatedElement;
>import java.lang.reflect.Constructor;
>import java.lang.reflect.Type;
>-import java.lang.reflect.TypeVariable;
>import java.util.ArrayList;
>import java.util.HashSet;
>import java.util.Iterator;
>@@ -46,13 +47,12 @@ import org.apache.webbeans.component.Bea
>import org.apache.webbeans.component.DecoratorBean;
>import org.apache.webbeans.component.WebBeansType;
>import org.apache.webbeans.config.OWBLogConst;
>-import org.apache.webbeans.config.OwbParametrizedTypeImpl;
>import org.apache.webbeans.config.WebBeansContext;
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>import org.apache.webbeans.logger.WebBeansLoggerFacade;
>import org.apache.webbeans.util.Asserts;
>import org.apache.webbeans.util.ClassUtil;
>-
>+import org.apache.webbeans.util.GenericsUtil;
>
>/**
> * Bean builder for {@link
>org.apache.webbeans.component.InterceptorBean}s.
>@@ -165,57 +165,15 @@ public class DecoratorBeanBuilder<T>
>
> private void defineDecoratedTypes()
> {
>- // remove them first to avoid to loop over them
>- decoratedTypes.remove(Object.class);
>- decoratedTypes.remove(java.io.Serializable.class); /* 8.1 */
>-
>- Type beanClass = annotatedType.getJavaClass();
>- do
>- {
>- final Class<?> clazz = ClassUtil.getClass(beanClass);
>- final Type toRemove;
>- if (ClassUtil.isDefinitionContainsTypeVariables(beanClass))
>- {
>- final OwbParametrizedTypeImpl pt = new
>OwbParametrizedTypeImpl(clazz.getDeclaringClass(), clazz);
>- final TypeVariable<?>[] tvs = clazz.getTypeParameters();
>- for(TypeVariable<?> tv : tvs)
>- {
>- pt.addTypeArgument(tv);
>- }
>- toRemove = pt;
>- //X TODO generic support setDecoratorGenericType(pt);
>- }
>- else
>- {
>- toRemove = beanClass;
>- //X TODO generic support
>setDecoratorGenericType(beanClass);
>- }
>-
>- final Iterator<Type> iterator = decoratedTypes.iterator();
>- while (iterator.hasNext())
>- {
>- final Type next = iterator.next();
>-
>- // if raw class is the same and is assignable (geneics
>handling)
>- if (ClassUtil.getClass(next) == clazz &&
>ClassUtil.isAssignable(toRemove, next))
>- {
>- iterator.remove();
>- }
>- }
>-
>- beanClass = clazz.getGenericSuperclass();
>- } while (beanClass != Object.class);
>-
>-
>+ decoratedTypes.remove(Serializable.class); /* 8.1 */
> for (Iterator<Type> i = decoratedTypes.iterator(); i.hasNext(); )
> {
> Type t = i.next();
>- if (t instanceof Class<?> &&
>ignoredDecoratorInterfaces.contains(((Class) t).getName()))
>+ if (!ClassUtil.getClass(t).isInterface() || (t instanceof
>Class<?> && ignoredDecoratorInterfaces.contains(((Class) t).getName())))
> {
> i.remove();
> }
> }
>-
> }
>
> private void defineDelegate(Set<InjectionPoint> injectionPoints)
>@@ -258,7 +216,7 @@ public class DecoratorBeanBuilder<T>
> }
> }
>
>- delgateType = ipFound.getType();
>+ delegateType = GenericsUtil.resolveType(ipFound.getType(),
>annotatedType.getJavaClass(), ipFound.getMember());
> delegateQualifiers = ipFound.getQualifiers();
>
> for (Type decType : decoratedTypes)
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/InterceptorBeanBuilder.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1
>502035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/InterceptorBeanBuilder.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/InterceptorBeanBuilder.java
>Wed Jul 10 22:48:58 2013
>@@ -317,11 +317,11 @@ public abstract class InterceptorBeanBui
> {
> if (clazz == null)
> {
>- clazz =
>annotatedMethod.getDeclaringType().getJavaClass();
>+ clazz =
>annotatedMethod.getJavaMember().getDeclaringClass();
> }
>
> // check for same class -> Exception
>- if (alreadyDefined.getDeclaringType().getJavaClass() ==
>clazz)
>+ if (alreadyDefined.getJavaMember().getDeclaringClass() ==
>clazz)
> {
> throw new WebBeansConfigurationException("Only one
>Interceptor of a certain type is allowed per class, but multiple found in
>class "
> +
>annotatedMethod.getDeclaringType().getJavaClass().getName()
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/MethodProducerFactory.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/MethodProducerFactory.java?rev=15
>02035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/MethodProducerFactory.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/MethodProducerFactory.java
>Wed Jul 10 22:48:58 2013
>@@ -41,7 +41,7 @@ import org.apache.webbeans.exception.Web
>import org.apache.webbeans.portable.ProducerMethodProducer;
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>-import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>
>public class MethodProducerFactory<P> implements ProducerFactory<P>
>{
>@@ -98,7 +98,7 @@ public class MethodProducerFactory<P> im
> {
> if
>(annotatedParameter.isAnnotationPresent(Disposes.class))
> {
>- if
>(!ClassUtil.isAssignable(annotatedParameter.getBaseType(),
>producerMethod.getBaseType()))
>+ if
>(!GenericsUtil.satisfiesDependency(producerMethod.getBaseType(),
>annotatedParameter.getBaseType()))
> {
> continue;
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerFieldBeansBuilder.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java?re
>v=1502035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerFieldBeansBuilder.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerFieldBeansBuilder.java
>Wed Jul 10 22:48:58 2013
>@@ -77,7 +77,7 @@ public class ProducerFieldBeansBuilder<T
> Set<AnnotatedField<? super T>> annotatedFields =
>annotatedType.getFields();
> for(AnnotatedField<? super T> annotatedField: annotatedFields)
> {
>- if(annotatedField.isAnnotationPresent(Produces.class) &&
>annotatedField.getDeclaringType().getJavaClass().equals(annotatedType.getJ
>avaClass()))
>+ if(annotatedField.isAnnotationPresent(Produces.class) &&
>annotatedField.getJavaMember().getDeclaringClass().equals(annotatedType.ge
>tJavaClass()))
> {
> Type genericType = annotatedField.getBaseType();
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerMethodBeansBuilder.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java?r
>ev=1502035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerMethodBeansBuilder.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerMethodBeansBuilder.java
>Wed Jul 10 22:48:58 2013
>@@ -26,7 +26,7 @@ import org.apache.webbeans.config.WebBea
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>-import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>
>import javax.enterprise.event.Observes;
>@@ -77,7 +77,7 @@ public class ProducerMethodBeansBuilder<
> {
> boolean enterprise =
>EnterpriseBeanMarker.class.isInstance(bean);
> if(annotatedMethod.isAnnotationPresent(Produces.class) &&
>-
>(annotatedMethod.getDeclaringType().getJavaClass().equals(annotatedType.ge
>tJavaClass())
>+
>(annotatedMethod.getJavaMember().getDeclaringClass().equals(annotatedType.
>getJavaClass())
> || (enterprise &&
>annotatedType.getJavaClass().isAssignableFrom(annotatedType.getJavaClass()
>))))
> {
> checkProducerMethodForDeployment(annotatedMethod);
>@@ -126,7 +126,7 @@ public class ProducerMethodBeansBuilder<
> boolean found = false;
> for (final ProducerMethodBean<?> producer :
>producerBeans)
> {
>- if (ClassUtil.isAssignable(param.getBaseType(),
>producer.getCreatorMethod().getGenericReturnType()))
>+ if
>(GenericsUtil.satisfiesDependency(producer.getCreatorMethod().getGenericRe
>turnType(),
>param.getBaseType()))
> {
> found = true;
> break;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>OwbParametrizedTypeImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/config/OwbParametrizedTypeImpl.java?rev=1502035&r1=1
>502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>OwbParametrizedTypeImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>OwbParametrizedTypeImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -20,9 +20,7 @@ package org.apache.webbeans.config;
>
>import java.lang.reflect.ParameterizedType;
>import java.lang.reflect.Type;
>-import java.util.ArrayList;
>import java.util.Arrays;
>-import java.util.List;
>
>/**
> * Custom parametrized type implementation.
>@@ -38,30 +36,26 @@ public class OwbParametrizedTypeImpl imp
> private final Type rawType;
>
> /**Actual type arguments*/
>- private final List<Type> types = new ArrayList<Type>();
>+ private final Type[] types;
>
> /**
> * New instance.
> * @param owner owner
> * @param raw raw
> */
>- public OwbParametrizedTypeImpl(Type owner, Type raw)
>+ public OwbParametrizedTypeImpl(Type owner, Type raw, Type... types)
> {
> this.owner = owner;
>- rawType = raw;
>+ this.rawType = raw;
>+ this.types = types;
> }
>
> @Override
> public Type[] getActualTypeArguments()
> {
>- return types.toArray(new Type[types.size()]);
>+ return types.clone();
> }
>
>- public void addTypeArgument(Type type)
>- {
>- types.add(type);
>- }
>-
> @Override
> public Type getOwnerType()
> {
>@@ -82,12 +76,7 @@ public class OwbParametrizedTypeImpl imp
> @Override
> public int hashCode()
> {
>- final int prime = 31;
>- int result = 1;
>- result = prime * result +
>Arrays.hashCode(getActualTypeArguments());
>- result = prime * result + ((owner == null) ? 0 :
>owner.hashCode());
>- result = prime * result + ((rawType == null) ? 0 :
>rawType.hashCode());
>- return result;
>+ return Arrays.hashCode(types) ^ (owner == null ? 0 :
>owner.hashCode()) ^ (rawType == null ? 0 : rawType.hashCode());
> }
>
> /* (non-Javadoc)
>@@ -96,47 +85,24 @@ public class OwbParametrizedTypeImpl imp
> @Override
> public boolean equals(Object obj)
> {
>- if (this == obj)
>- {
>- return true;
>- }
>- if (obj == null)
>- {
>- return false;
>- }
>- if (getClass() != obj.getClass())
>- {
>- return false;
>- }
>- OwbParametrizedTypeImpl other = (OwbParametrizedTypeImpl) obj;
>- if (!Arrays.equals(getActualTypeArguments(),
>other.getActualTypeArguments()))
>- {
>- return false;
>- }
>- if (owner == null)
>- {
>- if (other.owner != null)
>- {
>- return false;
>- }
>- }
>- else if (!owner.equals(other.owner))
>- {
>- return false;
>- }
>- if (rawType == null)
>- {
>- if (other.rawType != null)
>- {
>- return false;
>- }
>- }
>- else if (!rawType.equals(other.rawType))
>- {
>- return false;
>- }
>-
>- return true;
>+ if (this == obj)
>+ {
>+ return true;
>+ }
>+ else if (obj instanceof ParameterizedType)
>+ {
>+ ParameterizedType that = (ParameterizedType) obj;
>+ Type thatOwnerType = that.getOwnerType();
>+ Type thatRawType = that.getRawType();
>+ return (owner == null ? thatOwnerType == null :
>owner.equals(thatOwnerType))
>+ && (rawType == null ? thatRawType == null :
>rawType.equals(thatRawType))
>+ && Arrays.equals(types, that.getActualTypeArguments());
>+ }
>+ else
>+ {
>+ return false;
>+ }
>+
> }
>
> public String toString()
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/BeanManagerImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/container/BeanManagerImpl.java?rev=1502035&r1=150203
>4&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/BeanManagerImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/BeanManagerImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -86,6 +86,7 @@ import org.apache.webbeans.spi.plugins.O
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>import org.apache.webbeans.xml.WebBeansXMLConfigurator;
>
>@@ -688,7 +689,7 @@ public class BeanManagerImpl extends Abs
> //Check type if bean type is given
> if(beanType != null)
> {
>- if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
>beanType,
>bean instanceof NewBean) && !ClassUtil.isAssignable(bean.getBeanClass(),
>beanType))
>+ if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
>beanType,
>bean instanceof NewBean) && !GenericsUtil.satisfiesDependency(beanType,
>bean.getBeanClass()))
> {
> throw new IllegalArgumentException("Given bean type : " +
>beanType + " is not applicable for the bean instance : " + bean);
> }
>@@ -747,7 +748,7 @@ public class BeanManagerImpl extends Abs
> {
> Type beanApiType = itBeanApiTypes.next();
>
>- if(ClassUtil.isAssignable(beanApiType, givenType))
>+ if(GenericsUtil.satisfiesDependency(givenType, beanApiType))
> {
> return true;
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionResolver.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/container/InjectionResolver.java?rev=1502035&r1=1502
>034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionResolver.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionResolver.java
>Wed Jul 10 22:48:58 2013
>@@ -50,6 +50,7 @@ import org.apache.webbeans.spi.ScannerSe
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>import org.apache.webbeans.util.InjectionExceptionUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>import static
>org.apache.webbeans.util.InjectionExceptionUtil.throwAmbiguousResolutionEx
>ception;
>@@ -500,7 +501,7 @@ public class InjectionResolver
> for (Type componentApiType : component.getTypes())
> {
>
>- if (ClassUtil.isAssignable(componentApiType,
>injectionPointType))
>+ if
>(GenericsUtil.satisfiesDependency(injectionPointType, componentApiType))
> {
> resolvedComponents.add(component);
> break;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorsManager.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/decorator/DecoratorsManager.java?rev=1502035&r1=1502
>034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorsManager.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorsManager.java
>Wed Jul 10 22:48:58 2013
>@@ -35,6 +35,7 @@ import org.apache.webbeans.config.WebBea
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>+import org.apache.webbeans.util.GenericsUtil;
>
>public class DecoratorsManager
>{
>@@ -176,6 +177,7 @@ public class DecoratorsManager
>
> private boolean isDecoratorMatch(Decorator<?> decorator, Set<Type>
>apiTypes, Set<Annotation> annotations)
> {
>+ // 8.3.1
> if (!apiTypesMatchDelegateType(decorator, apiTypes))
> {
> return false;
>@@ -218,7 +220,7 @@ public class DecoratorsManager
> boolean ok = false;
> for (Type apiType : apiTypes)
> {
>- if
>(DecoratorResolverRules.compareType(decorator.getDelegateType(), apiType))
>+ if
>(GenericsUtil.satisfiesDependency(decorator.getDelegateType(), apiType))
> {
> ok = true;
> break;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
>bserverMethodImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1502035&r1=1502034
>&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
>bserverMethodImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
>bserverMethodImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -324,7 +324,7 @@ public class ObserverMethodImpl<T> imple
>
>annotationManager.getQualifierAnnotations(AnnotationUtil.
> asArray(parameter.getAnnotations()));
>
>- InjectionPoint point =
>InjectionPointFactory.getPartialInjectionPoint(bean,
>parameter.getBaseType(), parameter, bindingTypes);
>+ InjectionPoint point =
>InjectionPointFactory.getPartialInjectionPoint(bean, parameter,
>bindingTypes);
>
> //Get observer parameter instance
> @SuppressWarnings("unchecked")
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointFactory.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1502035&r
>1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointFactory.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointFactory.java
>Wed Jul 10 22:48:58 2013
>@@ -21,7 +21,6 @@ package org.apache.webbeans.inject.impl;
>import java.lang.annotation.Annotation;
>import java.lang.reflect.Method;
>import java.lang.reflect.Modifier;
>-import java.lang.reflect.Type;
>import java.lang.reflect.TypeVariable;
>import java.util.ArrayList;
>import java.util.Arrays;
>@@ -131,7 +130,7 @@ public class InjectionPointFactory
> }
> }
>
>- return new InjectionPointImpl(owner, annotField.getBaseType(),
>Arrays.asList(qualifierAnnots), annotField);
>+ return new InjectionPointImpl(owner,
>Arrays.asList(qualifierAnnots), annotField);
> }
>
> public <X> InjectionPoint buildInjectionPoint(Bean<?> owner,
>AnnotatedParameter<X> parameter)
>@@ -139,7 +138,7 @@ public class InjectionPointFactory
> Asserts.assertNotNull(parameter, "parameter parameter can not be
>null");
> Set<Annotation> anns = parameter.getAnnotations();
> Annotation[] qualifierAnnots =
>webBeansContext.getAnnotationManager().getQualifierAnnotations(anns.toArra
>y(new
>Annotation[anns.size()]));
>- return new InjectionPointImpl(owner, parameter.getBaseType(),
>Arrays.asList(qualifierAnnots), parameter);
>+ return new InjectionPointImpl(owner,
>Arrays.asList(qualifierAnnots), parameter);
> }
>
> public <X> List<InjectionPoint> buildInjectionPoints(Bean<?> owner,
>AnnotatedCallable<X> callable)
>@@ -165,9 +164,9 @@ public class InjectionPointFactory
> }
> }
>
>- public static InjectionPoint getPartialInjectionPoint(Bean<?>
>owner,Type type, AnnotatedParameter<?> parameter, Annotation...bindings)
>+ public static InjectionPoint getPartialInjectionPoint(Bean<?> owner,
>AnnotatedParameter<?> parameter, Annotation...bindings)
> {
>- return new InjectionPointImpl(owner, type,
>Arrays.asList(bindings), parameter);
>+ return new InjectionPointImpl(owner, Arrays.asList(bindings),
>parameter);
> }
>
> private void validateInitializerConstructor(AnnotatedConstructor<?>
>constructor)
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1502035&r1=1
>502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -71,15 +71,15 @@ class InjectionPointImpl implements Inje
>
> private boolean delegate;
>
>- InjectionPointImpl(Bean<?> ownerBean, Type type,
>Collection<Annotation> qualifiers, AnnotatedField<?> annotatedField)
>+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
>qualifiers, AnnotatedField<?> annotatedField)
> {
>- this(ownerBean, type, qualifiers, annotatedField,
>+ this(ownerBean, annotatedField.getBaseType(), qualifiers,
>annotatedField,
> annotatedField.getJavaMember(),
>annotatedField.isAnnotationPresent(Delegate.class),
>Modifier.isTransient(annotatedField.getJavaMember().getModifiers()));
> }
>
>- InjectionPointImpl(Bean<?> ownerBean, Type type,
>Collection<Annotation> qualifiers, AnnotatedParameter<?> parameter)
>+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
>qualifiers, AnnotatedParameter<?> parameter)
> {
>- this(ownerBean, type, qualifiers, parameter,
>parameter.getDeclaringCallable().getJavaMember(),
>parameter.isAnnotationPresent(Delegate.class), false);
>+ this(ownerBean, parameter.getBaseType(), qualifiers, parameter,
>parameter.getDeclaringCallable().getJavaMember(),
>parameter.isAnnotationPresent(Delegate.class), false);
> }
>
> private InjectionPointImpl(Bean<?> ownerBean, Type type,
>Collection<Annotation> qualifiers, Annotated annotated, Member member,
>boolean delegate, boolean isTransient)
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotated.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1502035&r1=15020
>34&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotated.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotated.java
>Wed Jul 10 22:48:58 2013
>@@ -32,6 +32,7 @@ import org.apache.webbeans.config.WebBea
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>
>/**
> * Abstract implementation of the {@link Annotated} contract.
>@@ -52,7 +53,7 @@ abstract class AbstractAnnotated impleme
> private final WebBeansContext webBeansContext;
>
> /**
>- * Createa a new annotated element.
>+ * Creates a new annotated element.
> *
> * @param webBeansContext our WebBeansContext
> * @param baseType annotated element type
>@@ -142,18 +143,19 @@ abstract class AbstractAnnotated impleme
> {
> if (typeClosures == null)
> {
>- initTypeClosures();
>+ initTypeClosure();
> }
> return typeClosures;
> }
>
>- private synchronized void initTypeClosures()
>+ protected abstract Class<?> getOwningClass();
>+ protected abstract Class<?> getDeclaringClass();
>+
>+ private synchronized void initTypeClosure()
> {
> if (typeClosures == null)
> {
>- typeClosures = new HashSet<Type>();
>- typeClosures.add(Object.class);
>- ClassUtil.setTypeHierarchy(typeClosures, baseType);
>+ typeClosures = GenericsUtil.getTypeClosure(baseType,
>getOwningClass(), getDeclaringClass());
> Set<String> ignoredInterfaces =
>webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
> for (Iterator<Type> i = typeClosures.iterator();
>i.hasNext(); )
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotatedMember.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AbstractAnnotatedMember.java?rev=1502035&r1
>=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotatedMember.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotatedMember.java
>Wed Jul 10 22:48:58 2013
>@@ -42,7 +42,6 @@ abstract class AbstractAnnotatedMember<X
> /**Member type*/
> protected final Member javaMember;
>
>- @SuppressWarnings("unchecked")
> AbstractAnnotatedMember(WebBeansContext webBeansContext, Type
>baseType, Member javaMember, AnnotatedType<X> declaringType)
> {
> super(webBeansContext, baseType);
>@@ -83,6 +82,18 @@ abstract class AbstractAnnotatedMember<X
> return Modifier.isStatic(javaMember.getModifiers());
> }
>
>+ @Override
>+ protected Class<?> getOwningClass()
>+ {
>+ return declaringType.getJavaClass();
>+ }
>+
>+ @Override
>+ protected Class<?> getDeclaringClass()
>+ {
>+ return javaMember.getDeclaringClass();
>+ }
>+
> public String toString()
> {
> StringBuilder builder = new StringBuilder(super.toString());
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedConstructorImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedConstructorImpl.java?rev=1502035&r
>1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedConstructorImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedConstructorImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -19,6 +19,7 @@
>package org.apache.webbeans.portable;
>
>import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.util.GenericsUtil;
>
>import java.lang.reflect.Constructor;
>
>@@ -43,7 +44,7 @@ public class AnnotatedConstructorImpl<X>
> {
> super(webBeansContext, javaMember.getDeclaringClass(),
>javaMember,
>declaringType);
> setAnnotations(javaMember.getDeclaredAnnotations());
>- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
>javaMember.getParameterAnnotations());
>+
>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.ge
>tJavaClass(),
>javaMember), javaMember.getParameterAnnotations());
> }
>
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedFieldImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedFieldImpl.java?rev=1502035&r1=1502
>034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedFieldImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedFieldImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -19,6 +19,7 @@
>package org.apache.webbeans.portable;
>
>import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.util.GenericsUtil;
>
>import java.lang.reflect.Field;
>
>@@ -43,7 +44,7 @@ public class AnnotatedFieldImpl<X> exten
> */
> AnnotatedFieldImpl(WebBeansContext webBeansContext, Field javaMember,
>AnnotatedType<X> declaringType)
> {
>- super(webBeansContext, javaMember.getGenericType(),
>javaMember,declaringType);
>+ super(webBeansContext,
>GenericsUtil.resolveType(declaringType.getJavaClass(), javaMember),
>javaMember,declaringType);
>
> setAnnotations(javaMember.getDeclaredAnnotations());
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedMethodImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedMethodImpl.java?rev=1502035&r1=150
>2034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedMethodImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedMethodImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -19,6 +19,7 @@
>package org.apache.webbeans.portable;
>
>import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.util.GenericsUtil;
>
>import java.lang.reflect.Method;
>
>@@ -41,11 +42,11 @@ class AnnotatedMethodImpl<X> extends Abs
> * @param declaringType declaring type
> * @param javaMember method
> */
>- AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
>javaMember,AnnotatedType<X> declaringType)
>+ AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
>javaMember, AnnotatedType<X> declaringType)
> {
>- super(webBeansContext, javaMember.getGenericReturnType(),
>javaMember,declaringType);
>+ super(webBeansContext,
>GenericsUtil.resolveReturnType(declaringType.getJavaClass(), javaMember),
>javaMember,declaringType);
> setAnnotations(javaMember.getDeclaredAnnotations());
>- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
>javaMember.getParameterAnnotations());
>+
>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.ge
>tJavaClass(),
>javaMember), javaMember.getParameterAnnotations());
> }
>
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedParameterImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedParameterImpl.java?rev=1502035&r1=
>1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedParameterImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedParameterImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -75,4 +75,16 @@ class AnnotatedParameterImpl<X> extends
>
> return builder.toString();
> }
>+
>+ @Override
>+ protected Class<?> getOwningClass()
>+ {
>+ return declaringCallable.getDeclaringType().getJavaClass();
>+ }
>+
>+ @Override
>+ protected Class<?> getDeclaringClass()
>+ {
>+ return declaringCallable.getJavaMember().getDeclaringClass();
>+ }
>}
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedTypeImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1502035&r1=15020
>34&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedTypeImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedTypeImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -132,6 +132,18 @@ class AnnotatedTypeImpl<X>
> return getState().methods;
> }
>
>+ @Override
>+ protected Class<?> getOwningClass()
>+ {
>+ return getJavaClass();
>+ }
>+
>+ @Override
>+ protected Class<?> getDeclaringClass()
>+ {
>+ return getJavaClass();
>+ }
>+
> private State getState()
> {
> State result = state;
>@@ -153,7 +165,6 @@ class AnnotatedTypeImpl<X>
> return result;
> }
>
>-
> private class State
> {
>
>@@ -230,12 +241,15 @@ class AnnotatedTypeImpl<X>
>
> if (supertype != null)
> {
>- fields.addAll(supertype.getFields());
>+ for (AnnotatedField<? super X> field:
>supertype.getFields())
>+ {
>+ fields.add(new
>AnnotatedFieldImpl<X>(getWebBeansContext(), field.getJavaMember(),
>AnnotatedTypeImpl.this));
>+ }
> for (AnnotatedMethod<? super X> method :
>supertype.getMethods())
> {
> if (!isOverridden(method))
> {
>- methods.add(method);
>+ methods.add(new
>AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(),
>AnnotatedTypeImpl.this));
> }
> }
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
>assUtil.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/util/ClassUtil.java?rev=1502035&r1=1502034&r2=150203
>5&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
>assUtil.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
>assUtil.java
>Wed Jul 10 22:48:58 2013
>@@ -18,14 +18,6 @@
> */
>package org.apache.webbeans.util;
>
>-import org.apache.webbeans.config.BeanTypeSetResolver;
>-import org.apache.webbeans.exception.WebBeansException;
>-import org.apache.webbeans.exception.inject.DefinitionException;
>-
>-import javax.enterprise.event.Event;
>-import javax.enterprise.inject.spi.Bean;
>-import javax.enterprise.inject.spi.InjectionPoint;
>-import javax.inject.Provider;
>import java.lang.reflect.GenericArrayType;
>import java.lang.reflect.Method;
>import java.lang.reflect.Modifier;
>@@ -41,6 +33,11 @@ import java.util.List;
>import java.util.Map;
>import java.util.Set;
>
>+import javax.enterprise.inject.spi.InjectionPoint;
>+
>+import org.apache.webbeans.exception.WebBeansException;
>+import org.apache.webbeans.exception.inject.DefinitionException;
>+
>/**
> * Utility classes with respect to the class operations.
> *
>@@ -124,21 +121,24 @@ public final class ClassUtil
> return clazz.isMemberClass();
> }
>
>- public static Class<?> getPrimitiveWrapper(Class<?> clazz)
>+ public static boolean isSame(Type type1, Type type2)
> {
>- Asserts.nullCheckForClass(clazz);
>-
>- return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
>-
>+ if ((type1 instanceof Class) && ((Class<?>)type1).isPrimitive())
>+ {
>+ type1 = PRIMITIVE_TO_WRAPPERS_MAP.get(type1);
>+ }
>+ if ((type2 instanceof Class) && ((Class<?>)type2).isPrimitive())
>+ {
>+ type2 = PRIMITIVE_TO_WRAPPERS_MAP.get(type2);
>+ }
>+ return type1 == type2;
> }
>
>- public static Class<?> identityOrGetPrimitiveWrapper(Class<?> clazz)
>+ public static Class<?> getPrimitiveWrapper(Class<?> clazz)
> {
>- if (clazz.isPrimitive())
>- {
>- return getPrimitiveWrapper(clazz);
>- }
>- return clazz;
>+ Asserts.nullCheckForClass(clazz);
>+
>+ return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
>
> }
>
>@@ -326,7 +326,6 @@ public final class ClassUtil
> return getObjectMethodNames().contains(methodName);
> }
>
>-
> /**
> * Returns true if type is an instance of
><code>ParameterizedType</code>
> * else otherwise.
>@@ -426,131 +425,6 @@ public final class ClassUtil
> }
>
> /**
>- * See specification 5.2.3.
>- * @param beanType bean type
>- * @param requiredType required type
>- * @return true if assignable
>- */
>- public static boolean isAssignable(Type beanType, Type requiredType)
>- {
>- Asserts.assertNotNull(beanType, "beanType parameter can not be
>null");
>- Asserts.assertNotNull(requiredType, "requiredType parameter can
>not be null");
>-
>- //Bean and required types are ParametrizedType
>- if (beanType instanceof ParameterizedType && requiredType
>instanceof ParameterizedType)
>- {
>- return isAssignableForParametrized((ParameterizedType)
>beanType, (ParameterizedType) requiredType);
>- }
>- //Both type is class type
>- else if (beanType instanceof Class && requiredType instanceof
>Class)
>- {
>- Class<?> clzBeanType = (Class<?>)beanType;
>- Class<?> clzReqType = (Class<?>)requiredType;
>-
>- if(clzBeanType.isPrimitive())
>- {
>- clzBeanType = getPrimitiveWrapper(clzBeanType);
>- }
>-
>- if(clzReqType.isPrimitive())
>- {
>- clzReqType = getPrimitiveWrapper(clzReqType);
>- }
>-
>- return clzReqType.equals(clzBeanType);
>- }
>- //Bean type is Parametrized and required type is class type
>- else if(beanType instanceof ParameterizedType && requiredType
>instanceof Class)
>- {
>- boolean ok = true;
>- ParameterizedType ptBean = (ParameterizedType)beanType;
>- Class<?> clazzBeanType =
>identityOrGetPrimitiveWrapper((Class<?>)ptBean.getRawType());
>- Class<?> clazzReqType =
>identityOrGetPrimitiveWrapper((Class<?>)requiredType);
>- if(clazzBeanType.equals(clazzReqType))
>- {
>- Type[] beanTypeArgs = ptBean.getActualTypeArguments();
>- for(Type actual : beanTypeArgs)
>- {
>- if(!ClassUtil.isUnboundedTypeVariable(actual))
>- {
>- if(actual instanceof Class)
>- {
>- Class<?> clazz = (Class<?>)actual;
>- if(!clazz.equals(Object.class))
>- {
>- ok = false;
>- break;
>- }
>- }
>- else
>- {
>- ok = false;
>- break;
>- }
>- }
>- }
>- }
>- else
>- {
>- ok = false;
>- }
>-
>-
>- return ok;
>- }
>- //Bean type is class and required type is parametrized
>- else if(beanType instanceof Class && requiredType instanceof
>ParameterizedType)
>- {
>- final Class<?> clazzBeanType = (Class<?>)beanType;
>- final ParameterizedType ptReq =
>(ParameterizedType)requiredType;
>- final Class<?> clazzReqType = (Class<?>)ptReq.getRawType();
>- final Type genericSuperClass =
>clazzBeanType.getGenericSuperclass();
>-
>- if (Provider.class.isAssignableFrom(clazzReqType) ||
>- Event.class.isAssignableFrom(clazzReqType))
>- {
>- if (isClassAssignable(clazzReqType, clazzBeanType))
>- {
>- return true;
>- }
>- }
>- else if (Bean.class.isAssignableFrom(clazzReqType))
>- {
>- // May be Bean, Interceptor or Decorator and thus must
>match directly
>- if (clazzReqType.equals(clazzBeanType))
>- {
>- return true;
>- }
>- }
>- else if (genericSuperClass instanceof ParameterizedType)
>- {
>- final Type[] params = ((ParameterizedType)
>genericSuperClass).getActualTypeArguments();
>- final Type[] requiredParams = ((ParameterizedType)
>requiredType).getActualTypeArguments();
>- if (params.length != requiredParams.length)
>- {
>- return false;
>- }
>-
>- for (int i = 0; i < params.length; i++)
>- {
>- if (!isAssignable(params[i], requiredParams[i]))
>- {
>- return false;
>- }
>- }
>-
>- return isClassAssignable(clazzReqType, clazzBeanType);
>- }
>-
>- return false;
>- }
>- else
>- {
>- return false;
>- }
>- }
>-
>- /**
> * Checks that event is applicable
> * for the given observer type.
> * @param eventType event type
>@@ -718,7 +592,13 @@ public final class ClassUtil
> ok++;
> }
> }
>-
>+ else if (requiredTypeArg instanceof ParameterizedType &&
>beanTypeArg instanceof TypeVariable)
>+ {
>+ if
>(checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(beanTypeArg,
>requiredTypeArg))
>+ {
>+ ok++;
>+ }
>+ }
> //Both type is actual type
> else if((beanTypeArg instanceof Class) && (requiredTypeArg
>instanceof Class))
> {
>@@ -874,6 +754,7 @@ public final class ClassUtil
> Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
>
> TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
>+ //TODO respect other bounds
> Type tvBound = tvBeanTypeArg.getBounds()[0];
>
> if(tvBound instanceof Class)
>@@ -891,6 +772,13 @@ public final class ClassUtil
>
> return true;
> }
>+
>+ public static boolean
>checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(Type beanTypeArg,
>Type requiredTypeArg)
>+ {
>+ ParameterizedType requiredType =
>(ParameterizedType)requiredTypeArg;
>+ //TODO respect parameters of required type
>+ return checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg,
>requiredType.getRawType());
>+ }
>
> public static boolean
>checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(Type beanTypeArg, Type
>requiredTypeArg)
> {
>@@ -972,16 +860,6 @@ public final class ClassUtil
> }
> }
>
>-
>- public static Set<Type> setTypeHierarchy(Set<Type> set, Type clazz)
>- {
>- BeanTypeSetResolver resolver = new BeanTypeSetResolver(clazz);
>- resolver.startConfiguration();
>- set.addAll(resolver.getHierarchy());
>-
>- return set;
>- }
>-
> /**
> * Return raw class type for given type.
> * @param type base type instance
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
>nericsUtil.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/util/GenericsUtil.java?rev=1502035&view=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
>nericsUtil.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
>nericsUtil.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,625 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.util;
>+
>+import java.lang.reflect.Array;
>+import java.lang.reflect.Constructor;
>+import java.lang.reflect.Field;
>+import java.lang.reflect.GenericArrayType;
>+import java.lang.reflect.Member;
>+import java.lang.reflect.Method;
>+import java.lang.reflect.ParameterizedType;
>+import java.lang.reflect.Type;
>+import java.lang.reflect.TypeVariable;
>+import java.lang.reflect.WildcardType;
>+import java.util.ArrayList;
>+import java.util.HashSet;
>+import java.util.List;
>+import java.util.Set;
>+
>+import org.apache.webbeans.config.OwbParametrizedTypeImpl;
>+import org.apache.webbeans.exception.inject.DefinitionException;
>+
>+/**
>+ * Utility classes for generic type operations.
>+ */
>+public final class GenericsUtil
>+{
>+ public static boolean satisfiesDependency(Type injectionPointType,
>Type beanType)
>+ {
>+ validate(injectionPointType);
>+ if (injectionPointType instanceof TypeVariable ||
>injectionPointType instanceof WildcardType || injectionPointType
>instanceof
>GenericArrayType)
>+ {
>+ throw new DefinitionException("Injection point cannot define
>Type Variable " + injectionPointType);
>+ }
>+ if (beanType instanceof TypeVariable || beanType instanceof
>WildcardType || beanType instanceof GenericArrayType)
>+ {
>+ return isAssignableFrom(injectionPointType, beanType);
>+ }
>+ else
>+ {
>+ Type injectionPointRawType = injectionPointType instanceof
>ParameterizedType? ((ParameterizedType)injectionPointType).getRawType():
>injectionPointType;
>+ Type beanRawType = beanType instanceof ParameterizedType?
>((ParameterizedType)beanType).getRawType(): beanType;
>+
>+ return ClassUtil.isSame(injectionPointRawType, beanRawType)?
>isAssignableFrom(injectionPointType, beanType): false;
>+ }
>+ }
>+
>+ /**
>+ * 5.2.3 and 5.2.4
>+ */
>+ public static boolean isAssignableFrom(Type requiredType, Type
>beanType)
>+ {
>+ if (requiredType instanceof Class)
>+ {
>+ return isAssignableFrom((Class<?>)requiredType, beanType);
>+ }
>+ else if (requiredType instanceof ParameterizedType)
>+ {
>+ return isAssignableFrom((ParameterizedType)requiredType,
>beanType);
>+ }
>+ else if (requiredType instanceof TypeVariable)
>+ {
>+ return isAssignableFrom((TypeVariable<?>)requiredType,
>beanType);
>+ }
>+ else if (requiredType instanceof GenericArrayType)
>+ {
>+ return isAssignableFrom((GenericArrayType)requiredType,
>beanType);
>+ }
>+ else if (requiredType instanceof WildcardType)
>+ {
>+ return isAssignableFrom((WildcardType)requiredType,
>beanType);
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>requiredType.getClass());
>+ }
>+ }
>+
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>Type beanType)
>+ {
>+ if (beanType instanceof Class)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(Class<?>)beanType);
>+ }
>+ else if (beanType instanceof TypeVariable)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(TypeVariable<?>)beanType);
>+ }
>+ else if (beanType instanceof ParameterizedType)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(ParameterizedType)beanType);
>+ }
>+ else if (beanType instanceof GenericArrayType)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(GenericArrayType)beanType);
>+ }
>+ else if (beanType instanceof WildcardType)
>+ {
>+ return isAssignableFrom((Type)injectionPointType,
>(WildcardType)beanType);
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>injectionPointType.getClass());
>+ }
>+ }
>+
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>Class<?> beanType)
>+ {
>+ return ClassUtil.isClassAssignable(injectionPointType, beanType);
>+ }
>+
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>TypeVariable<?> beanType)
>+ {
>+ for (Type bounds: beanType.getBounds())
>+ {
>+ if (isAssignableFrom(injectionPointType, bounds))
>+ {
>+ return true;
>+ }
>+ }
>+ return false;
>+ }
>+
>+ /**
>+ * CDI Spec. 5.2.4: "A parameterized bean type is considered
>assignable to a raw required type
>+ * if the raw types are identical and all type parameters of the bean
>type are either unbounded type variables or java.lang.Object."
>+ */
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>ParameterizedType beanType)
>+ {
>+ if (beanType.getRawType() != injectionPointType)
>+ {
>+ return false; //raw types don't match
>+ }
>+ for (Type typeArgument: beanType.getActualTypeArguments())
>+ {
>+ if (typeArgument == Object.class)
>+ {
>+ continue;
>+ }
>+ if (!(typeArgument instanceof TypeVariable))
>+ {
>+ return false; //neither object nor type variable
>+ }
>+ TypeVariable<?> typeVariable = (TypeVariable<?>)typeArgument;
>+ for (Type bounds: typeVariable.getBounds())
>+ {
>+ if (bounds != Object.class)
>+ {
>+ return false; //bound type variable
>+ }
>+ }
>+ }
>+ return true;
>+ }
>+
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>GenericArrayType beanType)
>+ {
>+ if (!injectionPointType.isArray())
>+ {
>+ return false;
>+ }
>+ return isAssignableFrom(injectionPointType.getComponentType(),
>beanType.getGenericComponentType());
>+ }
>+
>+ private static boolean isAssignableFrom(Type injectionPointType,
>WildcardType beanType)
>+ {
>+ for (Type bounds: beanType.getLowerBounds())
>+ {
>+ if (!isAssignableFrom(bounds, injectionPointType))
>+ {
>+ return false;
>+ }
>+ }
>+ for (Type bounds: beanType.getUpperBounds())
>+ {
>+ if (isAssignableFrom(injectionPointType, bounds))
>+ {
>+ return true;
>+ }
>+ }
>+ return false;
>+ }
>+
>+ private static boolean isAssignableFrom(ParameterizedType
>injectionPointType, Type beanType)
>+ {
>+ if (beanType instanceof Class)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(Class<?>)beanType);
>+ }
>+ else if (beanType instanceof TypeVariable)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(TypeVariable<?>)beanType);
>+ }
>+ else if (beanType instanceof ParameterizedType)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(ParameterizedType)beanType);
>+ }
>+ else if (beanType instanceof WildcardType)
>+ {
>+ return isAssignableFrom((Type)injectionPointType,
>(WildcardType)beanType);
>+ }
>+ else if (beanType instanceof GenericArrayType)
>+ {
>+ return false;
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>injectionPointType.getClass());
>+ }
>+ }
>+
>+ private static boolean isAssignableFrom(ParameterizedType
>injectionPointType, Class<?> beanType)
>+ {
>+ return isAssignableFrom(injectionPointType.getRawType(),
>beanType);
>+ }
>+
>+ private static boolean isAssignableFrom(ParameterizedType
>injectionPointType, TypeVariable<?> beanType)
>+ {
>+ for (Type bounds: beanType.getBounds())
>+ {
>+ if (isAssignableFrom(injectionPointType, bounds))
>+ {
>+ return true;
>+ }
>+ }
>+ return false;
>+ }
>+
>+ /**
>+ * CDI Spec. 5.2.4
>+ */
>+ private static boolean isAssignableFrom(ParameterizedType
>injectionPointType, ParameterizedType beanType)
>+ {
>+ if (injectionPointType.getRawType() != beanType.getRawType())
>+ {
>+ return false;
>+ }
>+ Type[] injectionPointTypeArguments =
>injectionPointType.getActualTypeArguments();
>+ Type[] beanTypeArguments = beanType.getActualTypeArguments();
>+ for (int i = 0; i < injectionPointTypeArguments.length; i++)
>+ {
>+ if (!isAssignableFrom(injectionPointTypeArguments[i],
>beanTypeArguments[i]))
>+ {
>+ return false;
>+ }
>+ }
>+ return true;
>+ }
>+
>+ private static boolean isAssignableFrom(TypeVariable<?>
>injectionPointType, Type beanType)
>+ {
>+ for (Type bounds: injectionPointType.getBounds())
>+ {
>+ if (!isAssignableFrom(bounds, beanType))
>+ {
>+ return false;
>+ }
>+ }
>+ return true;
>+ }
>+
>+ private static boolean isAssignableFrom(GenericArrayType
>injectionPointType, Type beanType)
>+ {
>+ throw new UnsupportedOperationException("Not yet implementeds");
>+ }
>+
>+ private static boolean isAssignableFrom(WildcardType
>injectionPointType, Type beanType)
>+ {
>+ for (Type bounds: injectionPointType.getLowerBounds())
>+ {
>+ if (!isAssignableFrom(beanType, bounds))
>+ {
>+ return false;
>+ }
>+ }
>+ for (Type bounds: injectionPointType.getUpperBounds())
>+ {
>+ if (!isAssignableFrom(bounds, beanType))
>+ {
>+ return false;
>+ }
>+ }
>+ return true;
>+ }
>+
>+ /**
>+ * Resolves the actual type of the specified field for the type
>hierarchy specified by the given subclass
>+ */
>+ public static Type resolveType(Class<?> subclass, Field field)
>+ {
>+ return resolveType(field.getGenericType(), new
>TypeVariableResolver(subclass, field.getDeclaringClass()));
>+ }
>+
>+ /**
>+ * Resolves the actual return type of the specified method for the
>type hierarchy specified by the given subclass
>+ */
>+ public static Type resolveReturnType(Class<?> subclass, Method
>method)
>+ {
>+ return resolveType(method.getGenericReturnType(), new
>TypeVariableResolver(subclass, method.getDeclaringClass()));
>+ }
>+
>+ /**
>+ * Resolves the actual parameter types of the specified constructor
>for the type hierarchy specified by the given subclass
>+ */
>+ public static Type[] resolveParameterTypes(Class<?> subclass,
>Constructor<?> constructor)
>+ {
>+ return resolveTypes(constructor.getGenericParameterTypes(), new
>TypeVariableResolver(subclass, constructor.getDeclaringClass()));
>+ }
>+
>+ /**
>+ * Resolves the actual parameter types of the specified method for
>the
>type hierarchy specified by the given subclass
>+ */
>+ public static Type[] resolveParameterTypes(Class<?> subclass, Method
>method)
>+ {
>+ return resolveTypes(method.getGenericParameterTypes(), new
>TypeVariableResolver(subclass, method.getDeclaringClass()));
>+ }
>+
>+ /**
>+ * Resolves the actual type of the specified type for the type
>hierarchy specified by the given subclass
>+ */
>+ public static Type resolveType(Type type, Class<?> subclass, Member
>member)
>+ {
>+ return resolveType(type, new TypeVariableResolver(subclass,
>member.getDeclaringClass()));
>+ }
>+
>+ private static Type resolveType(Type type, TypeVariableResolver
>resolver)
>+ {
>+ if (type instanceof Class)
>+ {
>+ return type;
>+ }
>+ else if (type instanceof ParameterizedType)
>+ {
>+ ParameterizedType parameterizedType =
>(ParameterizedType)type;
>+ Type[] resolvedTypes =
>resolveTypes(parameterizedType.getActualTypeArguments(), resolver);
>+ return new
>OwbParametrizedTypeImpl(parameterizedType.getOwnerType(),
>parameterizedType.getRawType(), resolvedTypes);
>+ }
>+ else if (type instanceof TypeVariable)
>+ {
>+ TypeVariable<?> variable = (TypeVariable<?>)type;
>+ return resolver.resolve(variable);
>+ }
>+ else if (type instanceof WildcardType)
>+ {
>+ Type[] resolvedTypes = resolveTypes(((WildcardType)
>type).getUpperBounds(), resolver);
>+ return
>resolveType(getMostSpecificType(getRawTypes(resolvedTypes, resolver),
>resolvedTypes), resolver);
>+ }
>+ else if (type instanceof GenericArrayType)
>+ {
>+ Type componentType =
>resolveType(((GenericArrayType)type).getGenericComponentType(), resolver);
>+ Class<?> componentClass = getRawType(componentType,
>resolver);
>+ return Array.newInstance(componentClass, 0).getClass();
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>type.getClass().getName());
>+ }
>+ }
>+
>+ public static Type[] resolveTypes(Type[] types, TypeVariableResolver
>resolution)
>+ {
>+ Type[] resolvedTypeArguments = new Type[types.length];
>+ for (int i = 0; i < types.length; i++)
>+ {
>+ resolvedTypeArguments[i] = resolveType(types[i], resolution);
>+ }
>+ return resolvedTypeArguments;
>+ }
>+
>+ public static Set<Type> getTypeClosure(Type type, Class<?>
>owningClass, Class<?> declaringClass)
>+ {
>+ Set<Type> typeClosure = new HashSet<Type>();
>+ typeClosure.add(Object.class);
>+ fillTypeHierarchy(typeClosure, type, new
>TypeVariableResolver(owningClass, declaringClass));
>+ return typeClosure;
>+ }
>+
>+ private static void fillTypeHierarchy(Set<Type> set, Type type,
>TypeVariableResolver resolver)
>+ {
>+ if (type == null)
>+ {
>+ return;
>+ }
>+ Type resolvedType = GenericsUtil.resolveType(type, resolver);
>+ set.add(resolvedType);
>+ Class<?> resolvedClass = GenericsUtil.getRawType(resolvedType,
>resolver);
>+ if (resolvedClass.getSuperclass() != null)
>+ {
>+ fillTypeHierarchy(set, resolvedClass.getGenericSuperclass(),
>resolver.add(resolvedClass));
>+ }
>+ for (Type interfaceType: resolvedClass.getGenericInterfaces())
>+ {
>+ fillTypeHierarchy(set, interfaceType,
>resolver.add(resolvedClass, interfaceType));
>+ }
>+ }
>+
>+ static <T> Class<T> getRawType(Type type, TypeVariableResolver
>resolver)
>+ {
>+ if (type instanceof Class)
>+ {
>+ return (Class<T>)type;
>+ }
>+ else if (type instanceof ParameterizedType)
>+ {
>+ return getRawType(((ParameterizedType) type).getRawType(),
>resolver);
>+ }
>+ else if ((type instanceof TypeVariable) || (type instanceof
>WildcardType) || (type instanceof GenericArrayType))
>+ {
>+ Type resolvedType = resolveType(type, resolver);
>+ if (resolvedType instanceof TypeVariable)
>+ {
>+ TypeVariable<?> variable = (TypeVariable<?>)resolvedType;
>+ return
>getRawType(resolveType(getRawType(variable.getBounds(), resolver),
>resolver), resolver);
>+ }
>+ else
>+ {
>+ return getRawType(resolvedType, resolver);
>+ }
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>type.getClass().getName());
>+ }
>+ }
>+
>+ private static Type getRawType(Type[] types, TypeVariableResolver
>resolver)
>+ {
>+ Class<?>[] rawTypes = getRawTypes(types, resolver);
>+ Class<?>[] classTypes = getClassTypes(rawTypes);
>+ if (classTypes.length > 0)
>+ {
>+ return getMostSpecificType(classTypes, types);
>+ }
>+ else
>+ {
>+ return getMostSpecificType(rawTypes, types);
>+ }
>+ }
>+
>+ private static <T> Class<T>[] getRawTypes(Type[] types,
>TypeVariableResolver resolver)
>+ {
>+ Class<T>[] rawTypes = new Class[types.length];
>+ for (int i = 0; i < types.length; i++)
>+ {
>+ rawTypes[i] = getRawType(types[i], resolver);
>+ }
>+ return rawTypes;
>+ }
>+
>+ private static Type getMostSpecificType(Class<?>[] types, Type[]
>genericTypes)
>+ {
>+ Class<?> mostSpecificType = types[0];
>+ int mostSpecificIndex = 0;
>+ for (int i = 0; i < types.length; i++)
>+ {
>+ if (mostSpecificType.isAssignableFrom(types[i]))
>+ {
>+ mostSpecificType = types[i];
>+ mostSpecificIndex = i;
>+ }
>+ }
>+ return genericTypes[mostSpecificIndex];
>+ }
>+
>+ private static Class<?>[] getClassTypes(Class<?>[] rawTypes)
>+ {
>+ List<Class<?>> classTypes = new ArrayList<Class<?>>();
>+ for (Class<?> rawType : rawTypes)
>+ {
>+ if (!rawType.isInterface())
>+ {
>+ classTypes.add(rawType);
>+ }
>+ }
>+ return classTypes.toArray(new Class[classTypes.size()]);
>+ }
>+
>+ private static Type validate(Type type)
>+ {
>+ if (!(type instanceof Class)
>+ && !(type instanceof ParameterizedType)
>+ && !(type instanceof TypeVariable)
>+ && !(type instanceof GenericArrayType)
>+ && !(type instanceof WildcardType))
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>type.getClass());
>+ }
>+ return type;
>+ }
>+
>+ /**
>+ * resolves actual types of a TypeVariable for a specific type
>hierarchy
>+ */
>+ private static class TypeVariableResolver
>+ {
>+ private List<TypeVariableDeclaration> declarations = new
>ArrayList<TypeVariableDeclaration>();
>+
>+ private TypeVariableResolver(List<TypeVariableDeclaration>
>implementation)
>+ {
>+ this.declarations = implementation;
>+ }
>+
>+ public TypeVariableResolver(Class<?> subclass, Class<?>
>declaringClass)
>+ {
>+ declarations.add(new TypeVariableDeclaration(subclass,
>subclass.getGenericSuperclass()));
>+ while (declaringClass != subclass &&
>declaringClass.isAssignableFrom(subclass))
>+ {
>+ subclass = subclass.getSuperclass();
>+ declarations.add(new TypeVariableDeclaration(subclass,
>subclass.getGenericSuperclass()));
>+ }
>+ }
>+
>+ public Type resolve(TypeVariable<?> variable)
>+ {
>+ if (declarations.size() < 2)
>+ {
>+ return getRawType(variable.getBounds(), this);
>+ }
>+ int hierarchyIndex = declarations.size() - 1;
>+ TypeVariableDeclaration typeVariableImplementation =
>declarations.get(hierarchyIndex);
>+ TypeVariable<?>[] typeParameters =
>typeVariableImplementation.getDeclaredTypeParameters();
>+ int typeIndex = -1;
>+ for (int i = 0; i < typeParameters.length; i++)
>+ {
>+ if
>(variable.getName().equals(typeParameters[i].getName()))
>+ {
>+ typeIndex = i;
>+ break;
>+ }
>+ }
>+ if (typeIndex == -1)
>+ {
>+ // type erasure
>+ return Object.class;
>+ }
>+ TypeVariableDeclaration declaration =
>declarations.get(hierarchyIndex - 1);
>+ Type genericClass = declaration.getAssignment();
>+ if (genericClass instanceof ParameterizedType)
>+ {
>+ ParameterizedType classType =
>(ParameterizedType)genericClass;
>+ return
>resolveType(classType.getActualTypeArguments()[typeIndex], remove());
>+ }
>+ else
>+ {
>+ TypeVariable<?>[] typeVariables =
>declaration.getDeclaredTypeParameters();
>+ if (typeVariables.length > typeIndex)
>+ {
>+ return resolveType(typeVariables[typeIndex],
>remove());
>+ }
>+ else
>+ {
>+ return Object.class; //type erasure
>+ }
>+ }
>+ }
>+
>+ public TypeVariableResolver add(Class<?> type)
>+ {
>+ return add(type, type.getGenericSuperclass());
>+ }
>+
>+ public TypeVariableResolver add(Class<?> declaringClass, Type
>assignment)
>+ {
>+ List<TypeVariableDeclaration> declarations = new
>ArrayList<TypeVariableDeclaration>(this.declarations);
>+ declarations.add(new TypeVariableDeclaration(declaringClass,
>assignment));
>+ return new TypeVariableResolver(declarations);
>+ }
>+
>+ public TypeVariableResolver remove()
>+ {
>+ List<TypeVariableDeclaration> declarations = new
>ArrayList<TypeVariableDeclaration>(this.declarations);
>+ declarations.remove(declarations.size() - 1);
>+ return new TypeVariableResolver(declarations);
>+ }
>+ }
>+
>+ /**
>+ * A declaration of type variables along with its assignments
>+ */
>+ private static class TypeVariableDeclaration
>+ {
>+ private Class<?> declaringClass;
>+ private Type assignment;
>+
>+ public TypeVariableDeclaration(Class<?> declaringClass, Type
>assignment)
>+ {
>+ this.declaringClass = declaringClass;
>+ this.assignment = assignment;
>+ }
>+
>+ public Type getAssignment()
>+ {
>+ return assignment;
>+ }
>+
>+ public TypeVariable<?>[] getDeclaredTypeParameters()
>+ {
>+ return declaringClass.getTypeParameters();
>+ }
>+ }
>+
>+ private static class TypeErasureException extends Exception
>+ {
>+ public TypeErasureException()
>+ {
>+ super("generic type information not available");
>+ }
>+ }
>+}
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/util/WebBeansUtil.java?rev=1502035&r1=1502034&r2=150
>2035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>Wed Jul 10 22:48:58 2013
>@@ -1058,16 +1058,7 @@ public final class WebBeansUtil
> {
> Type type = injectionPoint.getType();
>
>- Class<?> candidateClazz = null;
>- if(type instanceof Class)
>- {
>- candidateClazz = (Class<?>)type;
>- }
>- else if(type instanceof ParameterizedType)
>- {
>- ParameterizedType pt = (ParameterizedType)type;
>- candidateClazz = (Class<?>)pt.getRawType();
>- }
>+ Class<?> candidateClazz = ClassUtil.getClass(type);
>
> if(!candidateClazz.isAssignableFrom(Instance.class))
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/decorators/tests/GenericDecoratorTest.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java?
>rev=1502035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/decorators/tests/GenericDecoratorTest.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/decorators/tests/GenericDecoratorTest.java
>Wed Jul 10 22:48:58 2013
>@@ -86,5 +86,4 @@ public class GenericDecoratorTest extend
> DecoratedBean decoratedBean = getInstance(DecoratedBean.class);
> Assert.assertTrue(decoratedBean.isDecoratorCalled());
> }
>-
>}
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Bar.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/injection/generics/Bar.java?rev=1502035&vie
>w=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Bar.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Bar.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,77 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.newtests.injection.generics;
>+
>+import java.util.List;
>+
>+import javax.enterprise.event.Observes;
>+import javax.enterprise.inject.Typed;
>+import javax.inject.Inject;
>+
>+@Typed
>+public class Bar<A, B> {
>+
>+ @Inject
>+ @GenericQualifier
>+ private Baz<A> baz;
>+
>+ @Inject
>+ @GenericQualifier
>+ private A a;
>+
>+ @Inject
>+ private Baz<List<B>> bBazList;
>+ private A[] aArray;
>+ private Baz<A> aBazEvent;
>+ private A aObserverInjectionPoint;
>+
>+ @Inject
>+ public void setAArray(A[] aArray) {
>+ this.aArray = aArray;
>+ }
>+
>+ public void observeBaz(@Observes Baz<A> baz, @GenericQualifier A a) {
>+ this.aBazEvent = baz;
>+ this.aObserverInjectionPoint = a;
>+ }
>+
>+ public Baz<A> getBaz() {
>+ return this.baz;
>+ }
>+
>+ public Baz<List<B>> getBBazList() {
>+ return this.bBazList;
>+ }
>+
>+ public A getA() {
>+ return this.a;
>+ }
>+
>+ public A[] getAArray() {
>+ return this.aArray;
>+ }
>+
>+ public Baz<A> getABazEvent() {
>+ return this.aBazEvent;
>+ }
>+
>+ public A getAObserverInjectionPoint() {
>+ return this.aObserverInjectionPoint;
>+ }
>+}
>\ No newline at end of file
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BarVetoExtension.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java?re
>v=1502035&view=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BarVetoExtension.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BarVetoExtension.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,34 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.newtests.injection.generics;
>+
>+import javax.enterprise.event.Observes;
>+import javax.enterprise.inject.spi.Extension;
>+import javax.enterprise.inject.spi.ProcessAnnotatedType;
>+
>+public class BarVetoExtension implements Extension {
>+
>+ public void vetoBar(@Observes ProcessAnnotatedType<?>
>annotatedTypeEvent)
>+ {
>+ if
>(annotatedTypeEvent.getAnnotatedType().getJavaClass().equals(Bar.class))
>+ {
>+ annotatedTypeEvent.veto();
>+ }
>+ }
>+}
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Baz.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/injection/generics/Baz.java?rev=1502035&vie
>w=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Baz.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Baz.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,23 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.newtests.injection.generics;
>+
>+public class Baz<T> {
>+
>+}
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BazSubclass.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/injection/generics/BazSubclass.java?rev=150
>2035&view=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BazSubclass.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BazSubclass.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,27 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.newtests.injection.generics;
>+
>+
>+public class BazSubclass extends Baz<String> {
>+
>+ public BazSubclass(String string)
>+ {
>+ }
>+}
Re: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbean...
Posted by Arne Limburg <ar...@openknowledge.de>.
Sorry guys,
I extended a test of OWB to reproduce the problem and fixed it.
Should work fine now.
Plz let me know if anything does not work.
Cheers,
Arne
Am 11.07.13 15:57 schrieb "Mark Struberg" unter <st...@yahoo.de>:
>yikes, this also stales my development team :/
>
>Arne, I will rollback this commit and start a new deployment.
>
>LieGrue,
>strub
>
>
>
>
>________________________________
> From: Romain Manni-Bucau <rm...@gmail.com>
>To: openwebbeans-dev <de...@openwebbeans.apache.org>
>Sent: Thursday, 11 July 2013, 12:51
>Subject: Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>webbeans-impl/src/main/java/org/apache/webbeans/component/
>webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
>webbeans-impl/src/main/java/org/apache/webbeans/config/
>webbeans-impl/sr...
>
>
>Hi Arne,
>
>this commit broke openejb CDi 1.0 TCKs
>
>basically
>org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEventT
>est
>is no more passing, any idea?
>
>basically we observes now too much events.
>
>if you want to give a try on openejb just checkout tomee trunk then build
>(mvn clean install -pl tck/cdi-embedded -am -Dmaven.test.skip=true) then
>fo
>in tck/cdi-embedded module, update the pom to point to failing.xml testng
>config:
>
><suiteXmlFile>src/test/resources/failing.xml</suiteXmlFile>
>
>and put in this file:
>
><?xml version="1.0" encoding="UTF-8"?>
><suite name="CDI TCK" verbose="0">
> <test name="CDI TCK">
> <classes>
> <class
>name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.Container
>EventTest"/>
> </classes>
> </test>
></suite>
>
>then simply run mvn clean install on this module and you'll get the
>failure
>
>
>any help is welcomed ;)
>
>*Romain Manni-Bucau*
>*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
>*Blog:
>**http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
>*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
>*Github: https://github.com/rmannibucau*
>
>
>
>---------- Forwarded message ----------
>From: <ar...@apache.org>
>Date: 2013/7/11
>Subject: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
>webbeans-impl/src/main/java/org/apache/webbeans/component/
>webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
>webbeans-impl/src/main/java/org/apache/webbeans/config/
>webbeans-impl/sr...
>To: commits@openwebbeans.apache.org
>
>
>Author: arne
>Date: Wed Jul 10 22:48:58 2013
>New Revision: 1502035
>
>URL: http://svn.apache.org/r1502035
>Log:
>OWB-878: Re-implemented generic handling
>
>Added:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
>nericsUtil.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/inject/
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/inject/generic/
> - copied from r1502033,
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/inject/generic/
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Bar.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BarVetoExtension.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Baz.java
>
>openwebbeans/trunk/webbens-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BazSubclass.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Foo.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/GenericBeanTest.java
> - copied, changed from r1502033,
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/inject/generic/GenericBeanTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/GenericFactory.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/GenericQualifier.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/GenericsTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/util/Ge
>nericsUtilTest.java
>Removed:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>BeanTypeSetResolver.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorResolverRules.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/inject/generic/GenericBeanTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/inject/generic/
>Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/AbstractProducerBean.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerFieldBean.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerMethodBean.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/DecoratorBeanBuilder.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/InterceptorBeanBuilder.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/MethodProducerFactory.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerFieldBeansBuilder.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerMethodBeansBuilder.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>OwbParametrizedTypeImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/BeanManagerImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionResolver.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorsManager.java
>
>openwebbeans/trunk/wbbeans-impl/src/main/java/org/apache/webbeans/event/O
>bserverMethodImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointFactory.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotated.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotatedMember.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedConstructorImpl.java
>
>openwebbeans/trunk/ebbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedFieldImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedMethodImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedParameterImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedTypeImpl.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
>assUtil.java
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/decorators/tests/GenericDecoratorTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/promethods/beans/MethodTypeProduces1.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/clazzClazzTest.java
>
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/un
>ittests/inject/parametrized/GenericClassTest.java
>
>openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plug
>in/OpenWebBeansJsfPlugin.java
>
>openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/
>plugin/OpenWebBeansJsfPlugin.java
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/AbstractProducerBean.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/AbstractProducerBean.java?rev=1502035&r1=1
>502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/AbstractProducerBean.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/AbstractProducerBean.java
>Wed Jul 10 2:48:58 2013
>@@ -67,7 +67,7 @@ public class AbstractProducerBean<T> ext
>
> @Override
> public Class<T> getReturnType()
>- {
>+ {
> return returnType;
> }
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerFieldBean.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/ProducerFieldBean.java?rev=1502035&r1=1502
>034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerFieldBean.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerFieldBean.java
>Wed Jul 10 22:48:58 2013
>@@ -24,7 +24,6 @@ import java.lang.reflect.Field;
>import javax.enterprise.context.spi.CreationalContext;
>
>import org.apache.webbeans.component.spi.ProducerFactory;
>-import org.apache.webbeans.util.ClassUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>
>/**
>@@ -108,7 +107,7 @@ public class ProducerFieldBean<T> extend
> " with passivating scope @%s" +
> " must be Serializable";
>
>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope
>(),
>- ClassUtil.isClassAssignable(Serializable.class,
>getReturnType()), errorMessage, producerField.getName(),
>+ getReturnType() instanceof Serializable, errorMessage,
>producerField.getName(),
> getBeanClass().getName(), getScope().getName());
> }
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerMethodBean.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/ProducerMethodBean.java?rev=1502035&r1=150
>2034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerMethodBean.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/ProducerMethodBean.java
>Wed Jul 10 22:48:58 2013
>@@ -25,7 +25,6 @@ import javax.enterprise.context.spi.Crea
>
>import org.apache.webbeans.component.creation.MethodProducerFactory;
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>-import org.apache.webbeans.util.ClassUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>
>/**
>@@ -150,7 +149,7 @@ public class ProducerMethodBean<T> exten
> " with passivating scope @%s" +
> " must be Serializable";
>
>getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope
>(),
>- ClassUtil.isClassAssignable(Serializable.class,
>getReturnType()), errorMessage, creatorMethod.getName(),
>getBeanClass().getName(),
>+ getReturnType() instanceof Serializable, errorMessage,
>creatorMethod.getName(), getBeanClass().getName(),
> getScope().getName());
>
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/DecoratorBeanBuilder.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=150
>2035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/DecoratorBeanBuilder.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/DecoratorBeanBuilder.java
>Wed Jul 10 22:48:58 2013
>@@ -29,11 +29,12 @@ import javax.enterprise.inject.spi.Annot
>import javax.enterprise.inject.spi.AnnotatedType;
>import javax.enterprise.inject.spi.InjectionPoint;
>import javax.inject.Inject;
>+
>+import java.io.Serializable;
>import java.lang.annotation.Annotation;
>import java.lang.reflect.AnnotatedElement;
>import java.lang.reflect.Constructor;
>import java.lang.reflect.Type;
>-import java.lang.reflect.TypeVariable;
>import java.util.ArrayList;
>import java.util.HashSet;
>import java.util.Iterator;
>@@ -46,13 +47,12 @@ import org.apache.webbeans.component.Bea
>import org.apache.webbeans.component.DecoratorBean;
>import org.apache.webbeans.component.WebBeansType;
>import org.apache.webbeans.config.OWBLogConst;
>-import org.apache.webbeans.config.OwbParametrizedTypeImpl;
>import org.apache.webbeans.config.WebBeansContext;
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>import org.apache.webbeans.logger.WebBeansLoggerFacade;
>import org.apache.webbeans.util.Asserts;
>import org.apache.webbeans.util.ClassUtil;
>-
>+import org.apache.webbeans.util.GenericsUtil;
>
>/**
> * Bean builder for {@link
>org.apache.webbeans.component.InterceptorBean}s.
>@@ -165,57 +165,15 @@ public class DecoratorBeanBuilder<T>
>
> private void defineDecoratedTypes()
> {
>- // remove them first to avoid to loop over them
>- decoratedTypes.remove(Object.class);
>- decoratedTypes.remove(java.io.Serializable.class); /* 8.1 */
>-
>- Type beanClass = annotatedType.getJavaClass();
>- do
>- {
>- final Class<?> clazz = ClassUtil.getClass(beanClass);
>- final Type toRemove;
>- if (ClassUtil.isDefinitionContainsTypeVariables(beanClass))
>- {
>- final OwbParametrizedTypeImpl pt = new
>OwbParametrizedTypeImpl(clazz.getDeclaringClass(), clazz);
>- final TypeVariable<?>[] tvs = clazz.getTypeParameters();
>- for(TypeVariable<?> tv : tvs)
>- {
>- pt.addTypeArgument(tv);
>- }
>- toRemove = pt;
>- //X TODO generic support setDecoratorGenericType(pt);
>- }
>- else
>- {
>- toRemove = beanClass;
>- //X TODO generic support
>setDecoratorGenericType(beanClass);
>- }
>-
>- final Iterator<Type> iterator = decoratedTypes.iterator();
>- while (iterator.hasNext())
>- {
>- final Type next = iterator.next();
>-
>- // if raw class is the same and is assignable (geneics
>handling)
>- if (ClassUtil.getClass(next) == clazz &&
>ClassUtil.isAssignable(toRemove, next))
>- {
>- iterator.remove();
>- }
>- }
>-
>- beanClass = clazz.getGenericSuperclass();
>- } while (beanClass != Object.class);
>-
>-
>+ decoratedTypes.remove(Serializable.class); /* 8.1 */
> for (Iterator<Type> i = decoratedTypes.iterator(); i.hasNext(); )
> {
> Type t = i.next();
>- if (t instanceof Class<?> &&
>ignoredDecoratorInterfaces.contains(((Class) t).getName()))
>+ if (!ClassUtil.getClass(t).isInterface() || (t instanceof
>Class<?> && ignoredDecoratorInterfaces.contains(((Class) t).getName())))
> {
> i.remove();
> }
> }
>-
> }
>
> private void defineDelegate(Set<InjectionPoint> injectionPoints)
>@@ -258,7 +216,7 @@ public class DecoratorBeanBuilder<T>
> }
> }
>
>- delgateType = ipFound.getType();
>+ delegateType = GenericsUtil.resolveType(ipFound.getType(),
>annotatedType.getJavaClass(), ipFound.getMember());
> delegateQualifiers = ipFound.getQualifiers();
>
> for (Type decType : decoratedTypes)
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/InterceptorBeanBuilder.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1
>502035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/InterceptorBeanBuilder.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/InterceptorBeanBuilder.java
>Wed Jul 10 22:48:58 2013
>@@ -317,11 +317,11 @@ public abstract class InterceptorBeanBui
> {
> if (clazz == null)
> {
>- clazz =
>annotatedMethod.getDeclaringType().getJavaClass();
>+ clazz =
>annotatedMethod.getJavaMember().getDeclaringClass();
> }
>
> // check for same class -> Exception
>- if (alreadyDefined.getDeclaringType().getJavaClass() ==
>clazz)
>+ if (alreadyDefined.getJavaMember().getDeclaringClass() ==
>clazz)
> {
> throw new WebBeansConfigurationException("Only one
>Interceptor of a certain type is allowed per class, but multiple found in
>class "
> +
>annotatedMethod.getDeclaringType().getJavaClass().getName()
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/MethodProducerFactory.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/MethodProducerFactory.java?rev=15
>02035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/MethodProducerFactory.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/MethodProducerFactory.java
>Wed Jul 10 22:48:58 2013
>@@ -41,7 +41,7 @@ import org.apache.webbeans.exception.Web
>import org.apache.webbeans.portable.ProducerMethodProducer;
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>-import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>
>public class MethodProducerFactory<P> implements ProducerFactory<P>
>{
>@@ -98,7 +98,7 @@ public class MethodProducerFactory<P> im
> {
> if
>(annotatedParameter.isAnnotationPresent(Disposes.class))
> {
>- if
>(!ClassUtil.isAssignable(annotatedParameter.getBaseType(),
>producerMethod.getBaseType()))
>+ if
>(!GenericsUtil.satisfiesDependency(producerMethod.getBaseType(),
>annotatedParameter.getBaseType()))
> {
> continue;
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerFieldBeansBuilder.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java?re
>v=1502035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerFieldBeansBuilder.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerFieldBeansBuilder.java
>Wed Jul 10 22:48:58 2013
>@@ -77,7 +77,7 @@ public class ProducerFieldBeansBuilder<T
> Set<AnnotatedField<? super T>> annotatedFields =
>annotatedType.getFields();
> for(AnnotatedField<? super T> annotatedField: annotatedFields)
> {
>- if(annotatedField.isAnnotationPresent(Produces.class) &&
>annotatedField.getDeclaringType().getJavaClass().equals(annotatedType.getJ
>avaClass()))
>+ if(annotatedField.isAnnotationPresent(Produces.class) &&
>annotatedField.getJavaMember().getDeclaringClass().equals(annotatedType.ge
>tJavaClass()))
> {
> Type genericType = annotatedField.getBaseType();
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerMethodBeansBuilder.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java?r
>ev=1502035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerMethodBeansBuilder.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/compone
>nt/creation/ProducerMethodBeansBuilder.java
>Wed Jul 10 22:48:58 2013
>@@ -26,7 +26,7 @@ import org.apache.webbeans.config.WebBea
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>-import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>
>import javax.enterprise.event.Observes;
>@@ -77,7 +77,7 @@ public class ProducerMethodBeansBuilder<
> {
> boolean enterprise =
>EnterpriseBeanMarker.class.isInstance(bean);
> if(annotatedMethod.isAnnotationPresent(Produces.class) &&
>-
>(annotatedMethod.getDeclaringType().getJavaClass().equals(annotatedType.ge
>tJavaClass())
>+
>(annotatedMethod.getJavaMember().getDeclaringClass().equals(annotatedType.
>getJavaClass())
> || (enterprise &&
>annotatedType.getJavaClass().isAssignableFrom(annotatedType.getJavaClass()
>))))
> {
> checkProducerMethodForDeployment(annotatedMethod);
>@@ -126,7 +126,7 @@ public class ProducerMethodBeansBuilder<
> boolean found = false;
> for (final ProducerMethodBean<?> producer :
>producerBeans)
> {
>- if (ClassUtil.isAssignable(param.getBaseType(),
>producer.getCreatorMethod().getGenericReturnType()))
>+ if
>(GenericsUtil.satisfiesDependency(producer.getCreatorMethod().getGenericRe
>turnType(),
>param.getBaseType()))
> {
> found = true;
> break;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>OwbParametrizedTypeImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/config/OwbParametrizedTypeImpl.java?rev=1502035&r1=1
>502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>OwbParametrizedTypeImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/
>OwbParametrizedTypeImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -20,9 +20,7 @@ package org.apache.webbeans.config;
>
>import java.lang.reflect.ParameterizedType;
>import java.lang.reflect.Type;
>-import java.util.ArrayList;
>import java.util.Arrays;
>-import java.util.List;
>
>/**
> * Custom parametrized type implementation.
>@@ -38,30 +36,26 @@ public class OwbParametrizedTypeImpl imp
> private final Type rawType;
>
> /**Actual type arguments*/
>- private final List<Type> types = new ArrayList<Type>();
>+ private final Type[] types;
>
> /**
> * New instance.
> * @param owner owner
> * @param raw raw
> */
>- public OwbParametrizedTypeImpl(Type owner, Type raw)
>+ public OwbParametrizedTypeImpl(Type owner, Type raw, Type... types)
> {
> this.owner = owner;
>- rawType = raw;
>+ this.rawType = raw;
>+ this.types = types;
> }
>
> @Override
> public Type[] getActualTypeArguments()
> {
>- return types.toArray(new Type[types.size()]);
>+ return types.clone();
> }
>
>- public void addTypeArgument(Type type)
>- {
>- types.add(type);
>- }
>-
> @Override
> public Type getOwnerType()
> {
>@@ -82,12 +76,7 @@ public class OwbParametrizedTypeImpl imp
> @Override
> public int hashCode()
> {
>- final int prime = 31;
>- int result = 1;
>- result = prime * result +
>Arrays.hashCode(getActualTypeArguments());
>- result = prime * result + ((owner == null) ? 0 :
>owner.hashCode());
>- result = prime * result + ((rawType == null) ? 0 :
>rawType.hashCode());
>- return result;
>+ return Arrays.hashCode(types) ^ (owner == null ? 0 :
>owner.hashCode()) ^ (rawType == null ? 0 : rawType.hashCode());
> }
>
> /* (non-Javadoc)
>@@ -96,47 +85,24 @@ public class OwbParametrizedTypeImpl imp
> @Override
> public boolean equals(Object obj)
> {
>- if (this == obj)
>- {
>- return true;
>- }
>- if (obj == null)
>- {
>- return false;
>- }
>- if (getClass() != obj.getClass())
>- {
>- return false;
>- }
>- OwbParametrizedTypeImpl other = (OwbParametrizedTypeImpl) obj;
>- if (!Arrays.equals(getActualTypeArguments(),
>other.getActualTypeArguments()))
>- {
>- return false;
>- }
>- if (owner == null)
>- {
>- if (other.owner != null)
>- {
>- return false;
>- }
>- }
>- else if (!owner.equals(other.owner))
>- {
>- return false;
>- }
>- if (rawType == null)
>- {
>- if (other.rawType != null)
>- {
>- return false;
>- }
>- }
>- else if (!rawType.equals(other.rawType))
>- {
>- return false;
>- }
>-
>- return true;
>+ if (this == obj)
>+ {
>+ return true;
>+ }
>+ else if (obj instanceof ParameterizedType)
>+ {
>+ ParameterizedType that = (ParameterizedType) obj;
>+ Type thatOwnerType = that.getOwnerType();
>+ Type thatRawType = that.getRawType();
>+ return (owner == null ? thatOwnerType == null :
>owner.equals(thatOwnerType))
>+ && (rawType == null ? thatRawType == null :
>rawType.equals(thatRawType))
>+ && Arrays.equals(types, that.getActualTypeArguments());
>+ }
>+ else
>+ {
>+ return false;
>+ }
>+
> }
>
> public String toString()
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/BeanManagerImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/container/BeanManagerImpl.java?rev=1502035&r1=150203
>4&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/BeanManagerImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/BeanManagerImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -86,6 +86,7 @@ import org.apache.webbeans.spi.plugins.O
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>import org.apache.webbeans.xml.WebBeansXMLConfigurator;
>
>@@ -688,7 +689,7 @@ public class BeanManagerImpl extends Abs
> //Check type if bean type is given
> if(beanType != null)
> {
>- if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
>beanType,
>bean instanceof NewBean) && !ClassUtil.isAssignable(bean.getBeanClass(),
>beanType))
>+ if(!isBeanTypeAssignableToGivenType(bean.getTypes(),
>beanType,
>bean instanceof NewBean) && !GenericsUtil.satisfiesDependency(beanType,
>bean.getBeanClass()))
> {
> throw new IllegalArgumentException("Given bean type : " +
>beanType + " is not applicable for the bean instance : " + bean);
> }
>@@ -747,7 +748,7 @@ public class BeanManagerImpl extends Abs
> {
> Type beanApiType = itBeanApiTypes.next();
>
>- if(ClassUtil.isAssignable(beanApiType, givenType))
>+ if(GenericsUtil.satisfiesDependency(givenType, beanApiType))
> {
> return true;
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionResolver.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/container/InjectionResolver.java?rev=1502035&r1=1502
>034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionResolver.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/contain
>er/InjectionResolver.java
>Wed Jul 10 22:48:58 2013
>@@ -50,6 +50,7 @@ import org.apache.webbeans.spi.ScannerSe
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>import org.apache.webbeans.util.InjectionExceptionUtil;
>import org.apache.webbeans.util.WebBeansUtil;
>import static
>org.apache.webbeans.util.InjectionExceptionUtil.throwAmbiguousResolutionEx
>ception;
>@@ -500,7 +501,7 @@ public class InjectionResolver
> for (Type componentApiType : component.getTypes())
> {
>
>- if (ClassUtil.isAssignable(componentApiType,
>injectionPointType))
>+ if
>(GenericsUtil.satisfiesDependency(injectionPointType, componentApiType))
> {
> resolvedComponents.add(component);
> break;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorsManager.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/decorator/DecoratorsManager.java?rev=1502035&r1=1502
>034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorsManager.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorat
>or/DecoratorsManager.java
>Wed Jul 10 22:48:58 2013
>@@ -35,6 +35,7 @@ import org.apache.webbeans.config.WebBea
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.Asserts;
>+import org.apache.webbeans.util.GenericsUtil;
>
>public class DecoratorsManager
>{
>@@ -176,6 +177,7 @@ public class DecoratorsManager
>
> private boolean isDecoratorMatch(Decorator<?> decorator, Set<Type>
>apiTypes, Set<Annotation> annotations)
> {
>+ // 8.3.1
> if (!apiTypesMatchDelegateType(decorator, apiTypes))
> {
> return false;
>@@ -218,7 +220,7 @@ public class DecoratorsManager
> boolean ok = false;
> for (Type apiType : apiTypes)
> {
>- if
>(DecoratorResolverRules.compareType(decorator.getDelegateType(), apiType))
>+ if
>(GenericsUtil.satisfiesDependency(decorator.getDelegateType(), apiType))
> {
> ok = true;
> break;
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
>bserverMethodImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1502035&r1=1502034
>&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
>bserverMethodImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/O
>bserverMethodImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -324,7 +324,7 @@ public class ObserverMethodImpl<T> imple
>
>annotationManager.getQualifierAnnotations(AnnotationUtil.
> asArray(parameter.getAnnotations()));
>
>- InjectionPoint point =
>InjectionPointFactory.getPartialInjectionPoint(bean,
>parameter.getBaseType(), parameter, bindingTypes);
>+ InjectionPoint point =
>InjectionPointFactory.getPartialInjectionPoint(bean, parameter,
>bindingTypes);
>
> //Get observer parameter instance
> @SuppressWarnings("unchecked")
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointFactory.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1502035&r
>1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointFactory.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointFactory.java
>Wed Jul 10 22:48:58 2013
>@@ -21,7 +21,6 @@ package org.apache.webbeans.inject.impl;
>import java.lang.annotation.Annotation;
>import java.lang.reflect.Method;
>import java.lang.reflect.Modifier;
>-import java.lang.reflect.Type;
>import java.lang.reflect.TypeVariable;
>import java.util.ArrayList;
>import java.util.Arrays;
>@@ -131,7 +130,7 @@ public class InjectionPointFactory
> }
> }
>
>- return new InjectionPointImpl(owner, annotField.getBaseType(),
>Arrays.asList(qualifierAnnots), annotField);
>+ return new InjectionPointImpl(owner,
>Arrays.asList(qualifierAnnots), annotField);
> }
>
> public <X> InjectionPoint buildInjectionPoint(Bean<?> owner,
>AnnotatedParameter<X> parameter)
>@@ -139,7 +138,7 @@ public class InjectionPointFactory
> Asserts.assertNotNull(parameter, "parameter parameter can not be
>null");
> Set<Annotation> anns = parameter.getAnnotations();
> Annotation[] qualifierAnnots =
>webBeansContext.getAnnotationManager().getQualifierAnnotations(anns.toArra
>y(new
>Annotation[anns.size()]));
>- return new InjectionPointImpl(owner, parameter.getBaseType(),
>Arrays.asList(qualifierAnnots), parameter);
>+ return new InjectionPointImpl(owner,
>Arrays.asList(qualifierAnnots), parameter);
> }
>
> public <X> List<InjectionPoint> buildInjectionPoints(Bean<?> owner,
>AnnotatedCallable<X> callable)
>@@ -165,9 +164,9 @@ public class InjectionPointFactory
> }
> }
>
>- public static InjectionPoint getPartialInjectionPoint(Bean<?>
>owner,Type type, AnnotatedParameter<?> parameter, Annotation...bindings)
>+ public static InjectionPoint getPartialInjectionPoint(Bean<?> owner,
>AnnotatedParameter<?> parameter, Annotation...bindings)
> {
>- return new InjectionPointImpl(owner, type,
>Arrays.asList(bindings), parameter);
>+ return new InjectionPointImpl(owner, Arrays.asList(bindings),
>parameter);
> }
>
> private void validateInitializerConstructor(AnnotatedConstructor<?>
>constructor)
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1502035&r1=1
>502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/
>impl/InjectionPointImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -71,15 +71,15 @@ class InjectionPointImpl implements Inje
>
> private boolean delegate;
>
>- InjectionPointImpl(Bean<?> ownerBean, Type type,
>Collection<Annotation> qualifiers, AnnotatedField<?> annotatedField)
>+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
>qualifiers, AnnotatedField<?> annotatedField)
> {
>- this(ownerBean, type, qualifiers, annotatedField,
>+ this(ownerBean, annotatedField.getBaseType(), qualifiers,
>annotatedField,
> annotatedField.getJavaMember(),
>annotatedField.isAnnotationPresent(Delegate.class),
>Modifier.isTransient(annotatedField.getJavaMember().getModifiers()));
> }
>
>- InjectionPointImpl(Bean<?> ownerBean, Type type,
>Collection<Annotation> qualifiers, AnnotatedParameter<?> parameter)
>+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
>qualifiers, AnnotatedParameter<?> parameter)
> {
>- this(ownerBean, type, qualifiers, parameter,
>parameter.getDeclaringCallable().getJavaMember(),
>parameter.isAnnotationPresent(Delegate.class), false);
>+ this(ownerBean, parameter.getBaseType(), qualifiers, parameter,
>parameter.getDeclaringCallable().getJavaMember(),
>parameter.isAnnotationPresent(Delegate.class), false);
> }
>
> private InjectionPointImpl(Bean<?> ownerBean, Type type,
>Collection<Annotation> qualifiers, Annotated annotated, Member member,
>boolean delegate, boolean isTransient)
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotated.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1502035&r1=15020
>34&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotated.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotated.java
>Wed Jul 10 22:48:58 2013
>@@ -32,6 +32,7 @@ import org.apache.webbeans.config.WebBea
>import org.apache.webbeans.exception.WebBeansConfigurationException;
>import org.apache.webbeans.util.AnnotationUtil;
>import org.apache.webbeans.util.ClassUtil;
>+import org.apache.webbeans.util.GenericsUtil;
>
>/**
> * Abstract implementation of the {@link Annotated} contract.
>@@ -52,7 +53,7 @@ abstract class AbstractAnnotated impleme
> private final WebBeansContext webBeansContext;
>
> /**
>- * Createa a new annotated element.
>+ * Creates a new annotated element.
> *
> * @param webBeansContext our WebBeansContext
> * @param baseType annotated element type
>@@ -142,18 +143,19 @@ abstract class AbstractAnnotated impleme
> {
> if (typeClosures == null)
> {
>- initTypeClosures();
>+ initTypeClosure();
> }
> return typeClosures;
> }
>
>- private synchronized void initTypeClosures()
>+ protected abstract Class<?> getOwningClass();
>+ protected abstract Class<?> getDeclaringClass();
>+
>+ private synchronized void initTypeClosure()
> {
> if (typeClosures == null)
> {
>- typeClosures = new HashSet<Type>();
>- typeClosures.add(Object.class);
>- ClassUtil.setTypeHierarchy(typeClosures, baseType);
>+ typeClosures = GenericsUtil.getTypeClosure(baseType,
>getOwningClass(), getDeclaringClass());
> Set<String> ignoredInterfaces =
>webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
> for (Iterator<Type> i = typeClosures.iterator();
>i.hasNext(); )
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotatedMember.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AbstractAnnotatedMember.java?rev=1502035&r1
>=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotatedMember.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AbstractAnnotatedMember.java
>Wed Jul 10 22:48:58 2013
>@@ -42,7 +42,6 @@ abstract class AbstractAnnotatedMember<X
> /**Member type*/
> protected final Member javaMember;
>
>- @SuppressWarnings("unchecked")
> AbstractAnnotatedMember(WebBeansContext webBeansContext, Type
>baseType, Member javaMember, AnnotatedType<X> declaringType)
> {
> super(webBeansContext, baseType);
>@@ -83,6 +82,18 @@ abstract class AbstractAnnotatedMember<X
> return Modifier.isStatic(javaMember.getModifiers());
> }
>
>+ @Override
>+ protected Class<?> getOwningClass()
>+ {
>+ return declaringType.getJavaClass();
>+ }
>+
>+ @Override
>+ protected Class<?> getDeclaringClass()
>+ {
>+ return javaMember.getDeclaringClass();
>+ }
>+
> public String toString()
> {
> StringBuilder builder = new StringBuilder(super.toString());
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedConstructorImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedConstructorImpl.java?rev=1502035&r
>1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedConstructorImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedConstructorImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -19,6 +19,7 @@
>package org.apache.webbeans.portable;
>
>import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.util.GenericsUtil;
>
>import java.lang.reflect.Constructor;
>
>@@ -43,7 +44,7 @@ public class AnnotatedConstructorImpl<X>
> {
> super(webBeansContext, javaMember.getDeclaringClass(),
>javaMember,
>declaringType);
> setAnnotations(javaMember.getDeclaredAnnotations());
>- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
>javaMember.getParameterAnnotations());
>+
>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.ge
>tJavaClass(),
>javaMember), javaMember.getParameterAnnotations());
> }
>
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedFieldImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedFieldImpl.java?rev=1502035&r1=1502
>034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedFieldImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedFieldImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -19,6 +19,7 @@
>package org.apache.webbeans.portable;
>
>import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.util.GenericsUtil;
>
>import java.lang.reflect.Field;
>
>@@ -43,7 +44,7 @@ public class AnnotatedFieldImpl<X> exten
> */
> AnnotatedFieldImpl(WebBeansContext webBeansContext, Field javaMember,
>AnnotatedType<X> declaringType)
> {
>- super(webBeansContext, javaMember.getGenericType(),
>javaMember,declaringType);
>+ super(webBeansContext,
>GenericsUtil.resolveType(declaringType.getJavaClass(), javaMember),
>javaMember,declaringType);
>
> setAnnotations(javaMember.getDeclaredAnnotations());
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedMethodImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedMethodImpl.java?rev=1502035&r1=150
>2034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedMethodImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedMethodImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -19,6 +19,7 @@
>package org.apache.webbeans.portable;
>
>import org.apache.webbeans.config.WebBeansContext;
>+import org.apache.webbeans.util.GenericsUtil;
>
>import java.lang.reflect.Method;
>
>@@ -41,11 +42,11 @@ class AnnotatedMethodImpl<X> extends Abs
> * @param declaringType declaring type
> * @param javaMember method
> */
>- AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
>javaMember,AnnotatedType<X> declaringType)
>+ AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
>javaMember, AnnotatedType<X> declaringType)
> {
>- super(webBeansContext, javaMember.getGenericReturnType(),
>javaMember,declaringType);
>+ super(webBeansContext,
>GenericsUtil.resolveReturnType(declaringType.getJavaClass(), javaMember),
>javaMember,declaringType);
> setAnnotations(javaMember.getDeclaredAnnotations());
>- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
>javaMember.getParameterAnnotations());
>+
>setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.ge
>tJavaClass(),
>javaMember), javaMember.getParameterAnnotations());
> }
>
>
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedParameterImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedParameterImpl.java?rev=1502035&r1=
>1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedParameterImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedParameterImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -75,4 +75,16 @@ class AnnotatedParameterImpl<X> extends
>
> return builder.toString();
> }
>+
>+ @Override
>+ protected Class<?> getOwningClass()
>+ {
>+ return declaringCallable.getDeclaringType().getJavaClass();
>+ }
>+
>+ @Override
>+ protected Class<?> getDeclaringClass()
>+ {
>+ return declaringCallable.getJavaMember().getDeclaringClass();
>+ }
>}
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedTypeImpl.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1502035&r1=15020
>34&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedTypeImpl.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portabl
>e/AnnotatedTypeImpl.java
>Wed Jul 10 22:48:58 2013
>@@ -132,6 +132,18 @@ class AnnotatedTypeImpl<X>
> return getState().methods;
> }
>
>+ @Override
>+ protected Class<?> getOwningClass()
>+ {
>+ return getJavaClass();
>+ }
>+
>+ @Override
>+ protected Class<?> getDeclaringClass()
>+ {
>+ return getJavaClass();
>+ }
>+
> private State getState()
> {
> State result = state;
>@@ -153,7 +165,6 @@ class AnnotatedTypeImpl<X>
> return result;
> }
>
>-
> private class State
> {
>
>@@ -230,12 +241,15 @@ class AnnotatedTypeImpl<X>
>
> if (supertype != null)
> {
>- fields.addAll(supertype.getFields());
>+ for (AnnotatedField<? super X> field:
>supertype.getFields())
>+ {
>+ fields.add(new
>AnnotatedFieldImpl<X>(getWebBeansContext(), field.getJavaMember(),
>AnnotatedTypeImpl.this));
>+ }
> for (AnnotatedMethod<? super X> method :
>supertype.getMethods())
> {
> if (!isOverridden(method))
> {
>- methods.add(method);
>+ methods.add(new
>AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(),
>AnnotatedTypeImpl.this));
> }
> }
> }
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
>assUtil.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/util/ClassUtil.java?rev=1502035&r1=1502034&r2=150203
>5&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
>assUtil.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Cl
>assUtil.java
>Wed Jul 10 22:48:58 2013
>@@ -18,14 +18,6 @@
> */
>package org.apache.webbeans.util;
>
>-import org.apache.webbeans.config.BeanTypeSetResolver;
>-import org.apache.webbeans.exception.WebBeansException;
>-import org.apache.webbeans.exception.inject.DefinitionException;
>-
>-import javax.enterprise.event.Event;
>-import javax.enterprise.inject.spi.Bean;
>-import javax.enterprise.inject.spi.InjectionPoint;
>-import javax.inject.Provider;
>import java.lang.reflect.GenericArrayType;
>import java.lang.reflect.Method;
>import java.lang.reflect.Modifier;
>@@ -41,6 +33,11 @@ import java.util.List;
>import java.util.Map;
>import java.util.Set;
>
>+import javax.enterprise.inject.spi.InjectionPoint;
>+
>+import org.apache.webbeans.exception.WebBeansException;
>+import org.apache.webbeans.exception.inject.DefinitionException;
>+
>/**
> * Utility classes with respect to the class operations.
> *
>@@ -124,21 +121,24 @@ public final class ClassUtil
> return clazz.isMemberClass();
> }
>
>- public static Class<?> getPrimitiveWrapper(Class<?> clazz)
>+ public static boolean isSame(Type type1, Type type2)
> {
>- Asserts.nullCheckForClass(clazz);
>-
>- return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
>-
>+ if ((type1 instanceof Class) && ((Class<?>)type1).isPrimitive())
>+ {
>+ type1 = PRIMITIVE_TO_WRAPPERS_MAP.get(type1);
>+ }
>+ if ((type2 instanceof Class) && ((Class<?>)type2).isPrimitive())
>+ {
>+ type2 = PRIMITIVE_TO_WRAPPERS_MAP.get(type2);
>+ }
>+ return type1 == type2;
> }
>
>- public static Class<?> identityOrGetPrimitiveWrapper(Class<?> clazz)
>+ public static Class<?> getPrimitiveWrapper(Class<?> clazz)
> {
>- if (clazz.isPrimitive())
>- {
>- return getPrimitiveWrapper(clazz);
>- }
>- return clazz;
>+ Asserts.nullCheckForClass(clazz);
>+
>+ return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
>
> }
>
>@@ -326,7 +326,6 @@ public final class ClassUtil
> return getObjectMethodNames().contains(methodName);
> }
>
>-
> /**
> * Returns true if type is an instance of
><code>ParameterizedType</code>
> * else otherwise.
>@@ -426,131 +425,6 @@ public final class ClassUtil
> }
>
> /**
>- * See specification 5.2.3.
>- * @param beanType bean type
>- * @param requiredType required type
>- * @return true if assignable
>- */
>- public static boolean isAssignable(Type beanType, Type requiredType)
>- {
>- Asserts.assertNotNull(beanType, "beanType parameter can not be
>null");
>- Asserts.assertNotNull(requiredType, "requiredType parameter can
>not be null");
>-
>- //Bean and required types are ParametrizedType
>- if (beanType instanceof ParameterizedType && requiredType
>instanceof ParameterizedType)
>- {
>- return isAssignableForParametrized((ParameterizedType)
>beanType, (ParameterizedType) requiredType);
>- }
>- //Both type is class type
>- else if (beanType instanceof Class && requiredType instanceof
>Class)
>- {
>- Class<?> clzBeanType = (Class<?>)beanType;
>- Class<?> clzReqType = (Class<?>)requiredType;
>-
>- if(clzBeanType.isPrimitive())
>- {
>- clzBeanType = getPrimitiveWrapper(clzBeanType);
>- }
>-
>- if(clzReqType.isPrimitive())
>- {
>- clzReqType = getPrimitiveWrapper(clzReqType);
>- }
>-
>- return clzReqType.equals(clzBeanType);
>- }
>- //Bean type is Parametrized and required type is class type
>- else if(beanType instanceof ParameterizedType && requiredType
>instanceof Class)
>- {
>- boolean ok = true;
>- ParameterizedType ptBean = (ParameterizedType)beanType;
>- Class<?> clazzBeanType =
>identityOrGetPrimitiveWrapper((Class<?>)ptBean.getRawType());
>- Class<?> clazzReqType =
>identityOrGetPrimitiveWrapper((Class<?>)requiredType);
>- if(clazzBeanType.equals(clazzReqType))
>- {
>- Type[] beanTypeArgs = ptBean.getActualTypeArguments();
>- for(Type actual : beanTypeArgs)
>- {
>- if(!ClassUtil.isUnboundedTypeVariable(actual))
>- {
>- if(actual instanceof Class)
>- {
>- Class<?> clazz = (Class<?>)actual;
>- if(!clazz.equals(Object.class))
>- {
>- ok = false;
>- break;
>- }
>- }
>- else
>- {
>- ok = false;
>- break;
>- }
>- }
>- }
>- }
>- else
>- {
>- ok = false;
>- }
>-
>-
>- return ok;
>- }
>- //Bean type is class and required type is parametrized
>- else if(beanType instanceof Class && requiredType instanceof
>ParameterizedType)
>- {
>- final Class<?> clazzBeanType = (Class<?>)beanType;
>- final ParameterizedType ptReq =
>(ParameterizedType)requiredType;
>- final Class<?> clazzReqType = (Class<?>)ptReq.getRawType();
>- final Type genericSuperClass =
>clazzBeanType.getGenericSuperclass();
>-
>- if (Provider.class.isAssignableFrom(clazzReqType) ||
>- Event.class.isAssignableFrom(clazzReqType))
>- {
>- if (isClassAssignable(clazzReqType, clazzBeanType))
>- {
>- return true;
>- }
>- }
>- else if (Bean.class.isAssignableFrom(clazzReqType))
>- {
>- // May be Bean, Interceptor or Decorator and thus must
>match directly
>- if (clazzReqType.equals(clazzBeanType))
>- {
>- return true;
>- }
>- }
>- else if (genericSuperClass instanceof ParameterizedType)
>- {
>- final Type[] params = ((ParameterizedType)
>genericSuperClass).getActualTypeArguments();
>- final Type[] requiredParams = ((ParameterizedType)
>requiredType).getActualTypeArguments();
>- if (params.length != requiredParams.length)
>- {
>- return false;
>- }
>-
>- for (int i = 0; i < params.length; i++)
>- {
>- if (!isAssignable(params[i], requiredParams[i]))
>- {
>- return false;
>- }
>- }
>-
>- return isClassAssignable(clazzReqType, clazzBeanType);
>- }
>-
>- return false;
>- }
>- else
>- {
>- return false;
>- }
>- }
>-
>- /**
> * Checks that event is applicable
> * for the given observer type.
> * @param eventType event type
>@@ -718,7 +592,13 @@ public final class ClassUtil
> ok++;
> }
> }
>-
>+ else if (requiredTypeArg instanceof ParameterizedType &&
>beanTypeArg instanceof TypeVariable)
>+ {
>+ if
>(checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(beanTypeArg,
>requiredTypeArg))
>+ {
>+ ok++;
>+ }
>+ }
> //Both type is actual type
> else if((beanTypeArg instanceof Class) && (requiredTypeArg
>instanceof Class))
> {
>@@ -874,6 +754,7 @@ public final class ClassUtil
> Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
>
> TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
>+ //TODO respect other bounds
> Type tvBound = tvBeanTypeArg.getBounds()[0];
>
> if(tvBound instanceof Class)
>@@ -891,6 +772,13 @@ public final class ClassUtil
>
> return true;
> }
>+
>+ public static boolean
>checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(Type beanTypeArg,
>Type requiredTypeArg)
>+ {
>+ ParameterizedType requiredType =
>(ParameterizedType)requiredTypeArg;
>+ //TODO respect parameters of required type
>+ return checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg,
>requiredType.getRawType());
>+ }
>
> public static boolean
>checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(Type beanTypeArg, Type
>requiredTypeArg)
> {
>@@ -972,16 +860,6 @@ public final class ClassUtil
> }
> }
>
>-
>- public static Set<Type> setTypeHierarchy(Set<Type> set, Type clazz)
>- {
>- BeanTypeSetResolver resolver = new BeanTypeSetResolver(clazz);
>- resolver.startConfiguration();
>- set.addAll(resolver.getHierarchy());
>-
>- return set;
>- }
>-
> /**
> * Return raw class type for given type.
> * @param type base type instance
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
>nericsUtil.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/util/GenericsUtil.java?rev=1502035&view=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
>nericsUtil.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Ge
>nericsUtil.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,625 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.util;
>+
>+import java.lang.reflect.Array;
>+import java.lang.reflect.Constructor;
>+import java.lang.reflect.Field;
>+import java.lang.reflect.GenericArrayType;
>+import java.lang.reflect.Member;
>+import java.lang.reflect.Method;
>+import java.lang.reflect.ParameterizedType;
>+import java.lang.reflect.Type;
>+import java.lang.reflect.TypeVariable;
>+import java.lang.reflect.WildcardType;
>+import java.util.ArrayList;
>+import java.util.HashSet;
>+import java.util.List;
>+import java.util.Set;
>+
>+import org.apache.webbeans.config.OwbParametrizedTypeImpl;
>+import org.apache.webbeans.exception.inject.DefinitionException;
>+
>+/**
>+ * Utility classes for generic type operations.
>+ */
>+public final class GenericsUtil
>+{
>+ public static boolean satisfiesDependency(Type injectionPointType,
>Type beanType)
>+ {
>+ validate(injectionPointType);
>+ if (injectionPointType instanceof TypeVariable ||
>injectionPointType instanceof WildcardType || injectionPointType
>instanceof
>GenericArrayType)
>+ {
>+ throw new DefinitionException("Injection point cannot define
>Type Variable " + injectionPointType);
>+ }
>+ if (beanType instanceof TypeVariable || beanType instanceof
>WildcardType || beanType instanceof GenericArrayType)
>+ {
>+ return isAssignableFrom(injectionPointType, beanType);
>+ }
>+ else
>+ {
>+ Type injectionPointRawType = injectionPointType instanceof
>ParameterizedType? ((ParameterizedType)injectionPointType).getRawType():
>injectionPointType;
>+ Type beanRawType = beanType instanceof ParameterizedType?
>((ParameterizedType)beanType).getRawType(): beanType;
>+
>+ return ClassUtil.isSame(injectionPointRawType, beanRawType)?
>isAssignableFrom(injectionPointType, beanType): false;
>+ }
>+ }
>+
>+ /**
>+ * 5.2.3 and 5.2.4
>+ */
>+ public static boolean isAssignableFrom(Type requiredType, Type
>beanType)
>+ {
>+ if (requiredType instanceof Class)
>+ {
>+ return isAssignableFrom((Class<?>)requiredType, beanType);
>+ }
>+ else if (requiredType instanceof ParameterizedType)
>+ {
>+ return isAssignableFrom((ParameterizedType)requiredType,
>beanType);
>+ }
>+ else if (requiredType instanceof TypeVariable)
>+ {
>+ return isAssignableFrom((TypeVariable<?>)requiredType,
>beanType);
>+ }
>+ else if (requiredType instanceof GenericArrayType)
>+ {
>+ return isAssignableFrom((GenericArrayType)requiredType,
>beanType);
>+ }
>+ else if (requiredType instanceof WildcardType)
>+ {
>+ return isAssignableFrom((WildcardType)requiredType,
>beanType);
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>requiredType.getClass());
>+ }
>+ }
>+
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>Type beanType)
>+ {
>+ if (beanType instanceof Class)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(Class<?>)beanType);
>+ }
>+ else if (beanType instanceof TypeVariable)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(TypeVariable<?>)beanType);
>+ }
>+ else if (beanType instanceof ParameterizedType)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(ParameterizedType)beanType);
>+ }
>+ else if (beanType instanceof GenericArrayType)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(GenericArrayType)beanType);
>+ }
>+ else if (beanType instanceof WildcardType)
>+ {
>+ return isAssignableFrom((Type)injectionPointType,
>(WildcardType)beanType);
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>injectionPointType.getClass());
>+ }
>+ }
>+
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>Class<?> beanType)
>+ {
>+ return ClassUtil.isClassAssignable(injectionPointType, beanType);
>+ }
>+
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>TypeVariable<?> beanType)
>+ {
>+ for (Type bounds: beanType.getBounds())
>+ {
>+ if (isAssignableFrom(injectionPointType, bounds))
>+ {
>+ return true;
>+ }
>+ }
>+ return false;
>+ }
>+
>+ /**
>+ * CDI Spec. 5.2.4: "A parameterized bean type is considered
>assignable to a raw required type
>+ * if the raw types are identical and all type parameters of the bean
>type are either unbounded type variables or java.lang.Object."
>+ */
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>ParameterizedType beanType)
>+ {
>+ if (beanType.getRawType() != injectionPointType)
>+ {
>+ return false; //raw types don't match
>+ }
>+ for (Type typeArgument: beanType.getActualTypeArguments())
>+ {
>+ if (typeArgument == Object.class)
>+ {
>+ continue;
>+ }
>+ if (!(typeArgument instanceof TypeVariable))
>+ {
>+ return false; //neither object nor type variable
>+ }
>+ TypeVariable<?> typeVariable = (TypeVariable<?>)typeArgument;
>+ for (Type bounds: typeVariable.getBounds())
>+ {
>+ if (bounds != Object.class)
>+ {
>+ return false; //bound type variable
>+ }
>+ }
>+ }
>+ return true;
>+ }
>+
>+ private static boolean isAssignableFrom(Class<?> injectionPointType,
>GenericArrayType beanType)
>+ {
>+ if (!injectionPointType.isArray())
>+ {
>+ return false;
>+ }
>+ return isAssignableFrom(injectionPointType.getComponentType(),
>beanType.getGenericComponentType());
>+ }
>+
>+ private static boolean isAssignableFrom(Type injectionPointType,
>WildcardType beanType)
>+ {
>+ for (Type bounds: beanType.getLowerBounds())
>+ {
>+ if (!isAssignableFrom(bounds, injectionPointType))
>+ {
>+ return false;
>+ }
>+ }
>+ for (Type bounds: beanType.getUpperBounds())
>+ {
>+ if (isAssignableFrom(injectionPointType, bounds))
>+ {
>+ return true;
>+ }
>+ }
>+ return false;
>+ }
>+
>+ private static boolean isAssignableFrom(ParameterizedType
>injectionPointType, Type beanType)
>+ {
>+ if (beanType instanceof Class)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(Class<?>)beanType);
>+ }
>+ else if (beanType instanceof TypeVariable)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(TypeVariable<?>)beanType);
>+ }
>+ else if (beanType instanceof ParameterizedType)
>+ {
>+ return isAssignableFrom(injectionPointType,
>(ParameterizedType)beanType);
>+ }
>+ else if (beanType instanceof WildcardType)
>+ {
>+ return isAssignableFrom((Type)injectionPointType,
>(WildcardType)beanType);
>+ }
>+ else if (beanType instanceof GenericArrayType)
>+ {
>+ return false;
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>injectionPointType.getClass());
>+ }
>+ }
>+
>+ private static boolean isAssignableFrom(ParameterizedType
>injectionPointType, Class<?> beanType)
>+ {
>+ return isAssignableFrom(injectionPointType.getRawType(),
>beanType);
>+ }
>+
>+ private static boolean isAssignableFrom(ParameterizedType
>injectionPointType, TypeVariable<?> beanType)
>+ {
>+ for (Type bounds: beanType.getBounds())
>+ {
>+ if (isAssignableFrom(injectionPointType, bounds))
>+ {
>+ return true;
>+ }
>+ }
>+ return false;
>+ }
>+
>+ /**
>+ * CDI Spec. 5.2.4
>+ */
>+ private static boolean isAssignableFrom(ParameterizedType
>injectionPointType, ParameterizedType beanType)
>+ {
>+ if (injectionPointType.getRawType() != beanType.getRawType())
>+ {
>+ return false;
>+ }
>+ Type[] injectionPointTypeArguments =
>injectionPointType.getActualTypeArguments();
>+ Type[] beanTypeArguments = beanType.getActualTypeArguments();
>+ for (int i = 0; i < injectionPointTypeArguments.length; i++)
>+ {
>+ if (!isAssignableFrom(injectionPointTypeArguments[i],
>beanTypeArguments[i]))
>+ {
>+ return false;
>+ }
>+ }
>+ return true;
>+ }
>+
>+ private static boolean isAssignableFrom(TypeVariable<?>
>injectionPointType, Type beanType)
>+ {
>+ for (Type bounds: injectionPointType.getBounds())
>+ {
>+ if (!isAssignableFrom(bounds, beanType))
>+ {
>+ return false;
>+ }
>+ }
>+ return true;
>+ }
>+
>+ private static boolean isAssignableFrom(GenericArrayType
>injectionPointType, Type beanType)
>+ {
>+ throw new UnsupportedOperationException("Not yet implementeds");
>+ }
>+
>+ private static boolean isAssignableFrom(WildcardType
>injectionPointType, Type beanType)
>+ {
>+ for (Type bounds: injectionPointType.getLowerBounds())
>+ {
>+ if (!isAssignableFrom(beanType, bounds))
>+ {
>+ return false;
>+ }
>+ }
>+ for (Type bounds: injectionPointType.getUpperBounds())
>+ {
>+ if (!isAssignableFrom(bounds, beanType))
>+ {
>+ return false;
>+ }
>+ }
>+ return true;
>+ }
>+
>+ /**
>+ * Resolves the actual type of the specified field for the type
>hierarchy specified by the given subclass
>+ */
>+ public static Type resolveType(Class<?> subclass, Field field)
>+ {
>+ return resolveType(field.getGenericType(), new
>TypeVariableResolver(subclass, field.getDeclaringClass()));
>+ }
>+
>+ /**
>+ * Resolves the actual return type of the specified method for the
>type hierarchy specified by the given subclass
>+ */
>+ public static Type resolveReturnType(Class<?> subclass, Method
>method)
>+ {
>+ return resolveType(method.getGenericReturnType(), new
>TypeVariableResolver(subclass, method.getDeclaringClass()));
>+ }
>+
>+ /**
>+ * Resolves the actual parameter types of the specified constructor
>for the type hierarchy specified by the given subclass
>+ */
>+ public static Type[] resolveParameterTypes(Class<?> subclass,
>Constructor<?> constructor)
>+ {
>+ return resolveTypes(constructor.getGenericParameterTypes(), new
>TypeVariableResolver(subclass, constructor.getDeclaringClass()));
>+ }
>+
>+ /**
>+ * Resolves the actual parameter types of the specified method for
>the
>type hierarchy specified by the given subclass
>+ */
>+ public static Type[] resolveParameterTypes(Class<?> subclass, Method
>method)
>+ {
>+ return resolveTypes(method.getGenericParameterTypes(), new
>TypeVariableResolver(subclass, method.getDeclaringClass()));
>+ }
>+
>+ /**
>+ * Resolves the actual type of the specified type for the type
>hierarchy specified by the given subclass
>+ */
>+ public static Type resolveType(Type type, Class<?> subclass, Member
>member)
>+ {
>+ return resolveType(type, new TypeVariableResolver(subclass,
>member.getDeclaringClass()));
>+ }
>+
>+ private static Type resolveType(Type type, TypeVariableResolver
>resolver)
>+ {
>+ if (type instanceof Class)
>+ {
>+ return type;
>+ }
>+ else if (type instanceof ParameterizedType)
>+ {
>+ ParameterizedType parameterizedType =
>(ParameterizedType)type;
>+ Type[] resolvedTypes =
>resolveTypes(parameterizedType.getActualTypeArguments(), resolver);
>+ return new
>OwbParametrizedTypeImpl(parameterizedType.getOwnerType(),
>parameterizedType.getRawType(), resolvedTypes);
>+ }
>+ else if (type instanceof TypeVariable)
>+ {
>+ TypeVariable<?> variable = (TypeVariable<?>)type;
>+ return resolver.resolve(variable);
>+ }
>+ else if (type instanceof WildcardType)
>+ {
>+ Type[] resolvedTypes = resolveTypes(((WildcardType)
>type).getUpperBounds(), resolver);
>+ return
>resolveType(getMostSpecificType(getRawTypes(resolvedTypes, resolver),
>resolvedTypes), resolver);
>+ }
>+ else if (type instanceof GenericArrayType)
>+ {
>+ Type componentType =
>resolveType(((GenericArrayType)type).getGenericComponentType(), resolver);
>+ Class<?> componentClass = getRawType(componentType,
>resolver);
>+ return Array.newInstance(componentClass, 0).getClass();
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>type.getClass().getName());
>+ }
>+ }
>+
>+ public static Type[] resolveTypes(Type[] types, TypeVariableResolver
>resolution)
>+ {
>+ Type[] resolvedTypeArguments = new Type[types.length];
>+ for (int i = 0; i < types.length; i++)
>+ {
>+ resolvedTypeArguments[i] = resolveType(types[i], resolution);
>+ }
>+ return resolvedTypeArguments;
>+ }
>+
>+ public static Set<Type> getTypeClosure(Type type, Class<?>
>owningClass, Class<?> declaringClass)
>+ {
>+ Set<Type> typeClosure = new HashSet<Type>();
>+ typeClosure.add(Object.class);
>+ fillTypeHierarchy(typeClosure, type, new
>TypeVariableResolver(owningClass, declaringClass));
>+ return typeClosure;
>+ }
>+
>+ private static void fillTypeHierarchy(Set<Type> set, Type type,
>TypeVariableResolver resolver)
>+ {
>+ if (type == null)
>+ {
>+ return;
>+ }
>+ Type resolvedType = GenericsUtil.resolveType(type, resolver);
>+ set.add(resolvedType);
>+ Class<?> resolvedClass = GenericsUtil.getRawType(resolvedType,
>resolver);
>+ if (resolvedClass.getSuperclass() != null)
>+ {
>+ fillTypeHierarchy(set, resolvedClass.getGenericSuperclass(),
>resolver.add(resolvedClass));
>+ }
>+ for (Type interfaceType: resolvedClass.getGenericInterfaces())
>+ {
>+ fillTypeHierarchy(set, interfaceType,
>resolver.add(resolvedClass, interfaceType));
>+ }
>+ }
>+
>+ static <T> Class<T> getRawType(Type type, TypeVariableResolver
>resolver)
>+ {
>+ if (type instanceof Class)
>+ {
>+ return (Class<T>)type;
>+ }
>+ else if (type instanceof ParameterizedType)
>+ {
>+ return getRawType(((ParameterizedType) type).getRawType(),
>resolver);
>+ }
>+ else if ((type instanceof TypeVariable) || (type instanceof
>WildcardType) || (type instanceof GenericArrayType))
>+ {
>+ Type resolvedType = resolveType(type, resolver);
>+ if (resolvedType instanceof TypeVariable)
>+ {
>+ TypeVariable<?> variable = (TypeVariable<?>)resolvedType;
>+ return
>getRawType(resolveType(getRawType(variable.getBounds(), resolver),
>resolver), resolver);
>+ }
>+ else
>+ {
>+ return getRawType(resolvedType, resolver);
>+ }
>+ }
>+ else
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>type.getClass().getName());
>+ }
>+ }
>+
>+ private static Type getRawType(Type[] types, TypeVariableResolver
>resolver)
>+ {
>+ Class<?>[] rawTypes = getRawTypes(types, resolver);
>+ Class<?>[] classTypes = getClassTypes(rawTypes);
>+ if (classTypes.length > 0)
>+ {
>+ return getMostSpecificType(classTypes, types);
>+ }
>+ else
>+ {
>+ return getMostSpecificType(rawTypes, types);
>+ }
>+ }
>+
>+ private static <T> Class<T>[] getRawTypes(Type[] types,
>TypeVariableResolver resolver)
>+ {
>+ Class<T>[] rawTypes = new Class[types.length];
>+ for (int i = 0; i < types.length; i++)
>+ {
>+ rawTypes[i] = getRawType(types[i], resolver);
>+ }
>+ return rawTypes;
>+ }
>+
>+ private static Type getMostSpecificType(Class<?>[] types, Type[]
>genericTypes)
>+ {
>+ Class<?> mostSpecificType = types[0];
>+ int mostSpecificIndex = 0;
>+ for (int i = 0; i < types.length; i++)
>+ {
>+ if (mostSpecificType.isAssignableFrom(types[i]))
>+ {
>+ mostSpecificType = types[i];
>+ mostSpecificIndex = i;
>+ }
>+ }
>+ return genericTypes[mostSpecificIndex];
>+ }
>+
>+ private static Class<?>[] getClassTypes(Class<?>[] rawTypes)
>+ {
>+ List<Class<?>> classTypes = new ArrayList<Class<?>>();
>+ for (Class<?> rawType : rawTypes)
>+ {
>+ if (!rawType.isInterface())
>+ {
>+ classTypes.add(rawType);
>+ }
>+ }
>+ return classTypes.toArray(new Class[classTypes.size()]);
>+ }
>+
>+ private static Type validate(Type type)
>+ {
>+ if (!(type instanceof Class)
>+ && !(type instanceof ParameterizedType)
>+ && !(type instanceof TypeVariable)
>+ && !(type instanceof GenericArrayType)
>+ && !(type instanceof WildcardType))
>+ {
>+ throw new IllegalArgumentException("Unsupported type " +
>type.getClass());
>+ }
>+ return type;
>+ }
>+
>+ /**
>+ * resolves actual types of a TypeVariable for a specific type
>hierarchy
>+ */
>+ private static class TypeVariableResolver
>+ {
>+ private List<TypeVariableDeclaration> declarations = new
>ArrayList<TypeVariableDeclaration>();
>+
>+ private TypeVariableResolver(List<TypeVariableDeclaration>
>implementation)
>+ {
>+ this.declarations = implementation;
>+ }
>+
>+ public TypeVariableResolver(Class<?> subclass, Class<?>
>declaringClass)
>+ {
>+ declarations.add(new TypeVariableDeclaration(subclass,
>subclass.getGenericSuperclass()));
>+ while (declaringClass != subclass &&
>declaringClass.isAssignableFrom(subclass))
>+ {
>+ subclass = subclass.getSuperclass();
>+ declarations.add(new TypeVariableDeclaration(subclass,
>subclass.getGenericSuperclass()));
>+ }
>+ }
>+
>+ public Type resolve(TypeVariable<?> variable)
>+ {
>+ if (declarations.size() < 2)
>+ {
>+ return getRawType(variable.getBounds(), this);
>+ }
>+ int hierarchyIndex = declarations.size() - 1;
>+ TypeVariableDeclaration typeVariableImplementation =
>declarations.get(hierarchyIndex);
>+ TypeVariable<?>[] typeParameters =
>typeVariableImplementation.getDeclaredTypeParameters();
>+ int typeIndex = -1;
>+ for (int i = 0; i < typeParameters.length; i++)
>+ {
>+ if
>(variable.getName().equals(typeParameters[i].getName()))
>+ {
>+ typeIndex = i;
>+ break;
>+ }
>+ }
>+ if (typeIndex == -1)
>+ {
>+ // type erasure
>+ return Object.class;
>+ }
>+ TypeVariableDeclaration declaration =
>declarations.get(hierarchyIndex - 1);
>+ Type genericClass = declaration.getAssignment();
>+ if (genericClass instanceof ParameterizedType)
>+ {
>+ ParameterizedType classType =
>(ParameterizedType)genericClass;
>+ return
>resolveType(classType.getActualTypeArguments()[typeIndex], remove());
>+ }
>+ else
>+ {
>+ TypeVariable<?>[] typeVariables =
>declaration.getDeclaredTypeParameters();
>+ if (typeVariables.length > typeIndex)
>+ {
>+ return resolveType(typeVariables[typeIndex],
>remove());
>+ }
>+ else
>+ {
>+ return Object.class; //type erasure
>+ }
>+ }
>+ }
>+
>+ public TypeVariableResolver add(Class<?> type)
>+ {
>+ return add(type, type.getGenericSuperclass());
>+ }
>+
>+ public TypeVariableResolver add(Class<?> declaringClass, Type
>assignment)
>+ {
>+ List<TypeVariableDeclaration> declarations = new
>ArrayList<TypeVariableDeclaration>(this.declarations);
>+ declarations.add(new TypeVariableDeclaration(declaringClass,
>assignment));
>+ return new TypeVariableResolver(declarations);
>+ }
>+
>+ public TypeVariableResolver remove()
>+ {
>+ List<TypeVariableDeclaration> declarations = new
>ArrayList<TypeVariableDeclaration>(this.declarations);
>+ declarations.remove(declarations.size() - 1);
>+ return new TypeVariableResolver(declarations);
>+ }
>+ }
>+
>+ /**
>+ * A declaration of type variables along with its assignments
>+ */
>+ private static class TypeVariableDeclaration
>+ {
>+ private Class<?> declaringClass;
>+ private Type assignment;
>+
>+ public TypeVariableDeclaration(Class<?> declaringClass, Type
>assignment)
>+ {
>+ this.declaringClass = declaringClass;
>+ this.assignment = assignment;
>+ }
>+
>+ public Type getAssignment()
>+ {
>+ return assignment;
>+ }
>+
>+ public TypeVariable<?>[] getDeclaredTypeParameters()
>+ {
>+ return declaringClass.getTypeParameters();
>+ }
>+ }
>+
>+ private static class TypeErasureException extends Exception
>+ {
>+ public TypeErasureException()
>+ {
>+ super("generic type information not available");
>+ }
>+ }
>+}
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/jav
>a/org/apache/webbeans/util/WebBeansUtil.java?rev=1502035&r1=1502034&r2=150
>2035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/We
>bBeansUtil.java
>Wed Jul 10 22:48:58 2013
>@@ -1058,16 +1058,7 @@ public final class WebBeansUtil
> {
> Type type = injectionPoint.getType();
>
>- Class<?> candidateClazz = null;
>- if(type instanceof Class)
>- {
>- candidateClazz = (Class<?>)type;
>- }
>- else if(type instanceof ParameterizedType)
>- {
>- ParameterizedType pt = (ParameterizedType)type;
>- candidateClazz = (Class<?>)pt.getRawType();
>- }
>+ Class<?> candidateClazz = ClassUtil.getClass(type);
>
> if(!candidateClazz.isAssignableFrom(Instance.class))
> {
>
>Modified:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/decorators/tests/GenericDecoratorTest.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java?
>rev=1502035&r1=1502034&r2=1502035&view=diff
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/decorators/tests/GenericDecoratorTest.java
>(original)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/decorators/tests/GenericDecoratorTest.java
>Wed Jul 10 22:48:58 2013
>@@ -86,5 +86,4 @@ public class GenericDecoratorTest extend
> DecoratedBean decoratedBean = getInstance(DecoratedBean.class);
> Assert.assertTrue(decoratedBean.isDecoratorCalled());
> }
>-
>}
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Bar.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/injection/generics/Bar.java?rev=1502035&vie
>w=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Bar.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Bar.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,77 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.newtests.injection.generics;
>+
>+import java.util.List;
>+
>+import javax.enterprise.event.Observes;
>+import javax.enterprise.inject.Typed;
>+import javax.inject.Inject;
>+
>+@Typed
>+public class Bar<A, B> {
>+
>+ @Inject
>+ @GenericQualifier
>+ private Baz<A> baz;
>+
>+ @Inject
>+ @GenericQualifier
>+ private A a;
>+
>+ @Inject
>+ private Baz<List<B>> bBazList;
>+ private A[] aArray;
>+ private Baz<A> aBazEvent;
>+ private A aObserverInjectionPoint;
>+
>+ @Inject
>+ public void setAArray(A[] aArray) {
>+ this.aArray = aArray;
>+ }
>+
>+ public void observeBaz(@Observes Baz<A> baz, @GenericQualifier A a) {
>+ this.aBazEvent = baz;
>+ this.aObserverInjectionPoint = a;
>+ }
>+
>+ public Baz<A> getBaz() {
>+ return this.baz;
>+ }
>+
>+ public Baz<List<B>> getBBazList() {
>+ return this.bBazList;
>+ }
>+
>+ public A getA() {
>+ return this.a;
>+ }
>+
>+ public A[] getAArray() {
>+ return this.aArray;
>+ }
>+
>+ public Baz<A> getABazEvent() {
>+ return this.aBazEvent;
>+ }
>+
>+ public A getAObserverInjectionPoint() {
>+ return this.aObserverInjectionPoint;
>+ }
>+}
>\ No newline at end of file
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BarVetoExtension.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java?re
>v=1502035&view=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BarVetoExtension.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BarVetoExtension.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,34 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.newtests.injection.generics;
>+
>+import javax.enterprise.event.Observes;
>+import javax.enterprise.inject.spi.Extension;
>+import javax.enterprise.inject.spi.ProcessAnnotatedType;
>+
>+public class BarVetoExtension implements Extension {
>+
>+ public void vetoBar(@Observes ProcessAnnotatedType<?>
>annotatedTypeEvent)
>+ {
>+ if
>(annotatedTypeEvent.getAnnotatedType().getJavaClass().equals(Bar.class))
>+ {
>+ annotatedTypeEvent.veto();
>+ }
>+ }
>+}
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Baz.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/injection/generics/Baz.java?rev=1502035&vie
>w=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Baz.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/Baz.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,23 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.newtests.injection.generics;
>+
>+public class Baz<T> {
>+
>+}
>
>Added:
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BazSubclass.java
>URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/jav
>a/org/apache/webbeans/newtests/injection/generics/BazSubclass.java?rev=150
>2035&view=auto
>==========================================================================
>====
>---
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BazSubclass.java
>(added)
>+++
>openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtest
>s/injection/generics/BazSubclass.java
>Wed Jul 10 22:48:58 2013
>@@ -0,0 +1,27 @@
>+/*
>+ * Licensed to the Apache Software Foundation (ASF) under one
>+ * or more contributor license agreements. See the NOTICE file
>+ * distributed with this work for additional information
>+ * regarding copyright ownership. The ASF licenses this file
>+ * to you 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.apache.webbeans.newtests.injection.generics;
>+
>+
>+public class BazSubclass extends Baz<String> {
>+
>+ public BazSubclass(String string)
>+ {
>+ }
>+}
Re: Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/sr...
Posted by Mark Struberg <st...@yahoo.de>.
yikes, this also stales my development team :/
Arne, I will rollback this commit and start a new deployment.
LieGrue,
strub
________________________________
From: Romain Manni-Bucau <rm...@gmail.com>
To: openwebbeans-dev <de...@openwebbeans.apache.org>
Sent: Thursday, 11 July 2013, 12:51
Subject: Fwd: svn commit: r1502035 [1/2] - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/sr...
Hi Arne,
this commit broke openejb CDi 1.0 TCKs
basically org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEventTest
is no more passing, any idea?
basically we observes now too much events.
if you want to give a try on openejb just checkout tomee trunk then build
(mvn clean install -pl tck/cdi-embedded -am -Dmaven.test.skip=true) then fo
in tck/cdi-embedded module, update the pom to point to failing.xml testng
config:
<suiteXmlFile>src/test/resources/failing.xml</suiteXmlFile>
and put in this file:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<classes>
<class
name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ContainerEventTest"/>
</classes>
</test>
</suite>
then simply run mvn clean install on this module and you'll get the failure
any help is welcomed ;)
*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*
---------- Forwarded message ----------
From: <ar...@apache.org>
Date: 2013/7/11
Subject: svn commit: r1502035 [1/2] - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/component/
webbeans-impl/src/main/java/org/apache/webbeans/component/creation/
webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/sr...
To: commits@openwebbeans.apache.org
Author: arne
Date: Wed Jul 10 22:48:58 2013
New Revision: 1502035
URL: http://svn.apache.org/r1502035
Log:
OWB-878: Re-implemented generic handling
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/inject/
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/inject/generic/
- copied from r1502033,
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/generic/
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Foo.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/GenericBeanTest.java
- copied, changed from r1502033,
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/generic/GenericBeanTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/GenericFactory.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/GenericQualifier.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/GenericsTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/util/GenericsUtilTest.java
Removed:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeanTypeSetResolver.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorResolverRules.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/inject/generic/GenericBeanTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/generic/
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/beans/MethodTypeProduces1.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/clazz/ClazzTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/GenericClassTest.java
openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plugin/OpenWebBeansJsfPlugin.java
openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/plugin/OpenWebBeansJsfPlugin.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
Wed Jul 10 22:48:58 2013
@@ -67,7 +67,7 @@ public class AbstractProducerBean<T> ext
@Override
public Class<T> getReturnType()
- {
+ {
return returnType;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
Wed Jul 10 22:48:58 2013
@@ -24,7 +24,6 @@ import java.lang.reflect.Field;
import javax.enterprise.context.spi.CreationalContext;
import org.apache.webbeans.component.spi.ProducerFactory;
-import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
/**
@@ -108,7 +107,7 @@ public class ProducerFieldBean<T> extend
" with passivating scope @%s" +
" must be Serializable";
getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope(),
- ClassUtil.isClassAssignable(Serializable.class,
getReturnType()), errorMessage, producerField.getName(),
+ getReturnType() instanceof Serializable, errorMessage,
producerField.getName(),
getBeanClass().getName(), getScope().getName());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
Wed Jul 10 22:48:58 2013
@@ -25,7 +25,6 @@ import javax.enterprise.context.spi.Crea
import org.apache.webbeans.component.creation.MethodProducerFactory;
import org.apache.webbeans.exception.WebBeansConfigurationException;
-import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
/**
@@ -150,7 +149,7 @@ public class ProducerMethodBean<T> exten
" with passivating scope @%s" +
" must be Serializable";
getWebBeansContext().getWebBeansUtil().checkSerializableScopeType(getScope(),
- ClassUtil.isClassAssignable(Serializable.class,
getReturnType()), errorMessage, creatorMethod.getName(),
getBeanClass().getName(),
+ getReturnType() instanceof Serializable, errorMessage,
creatorMethod.getName(), getBeanClass().getName(),
getScope().getName());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
Wed Jul 10 22:48:58 2013
@@ -29,11 +29,12 @@ import javax.enterprise.inject.spi.Annot
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
+
+import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Constructor;
import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -46,13 +47,12 @@ import org.apache.webbeans.component.Bea
import org.apache.webbeans.component.DecoratorBean;
import org.apache.webbeans.component.WebBeansType;
import org.apache.webbeans.config.OWBLogConst;
-import org.apache.webbeans.config.OwbParametrizedTypeImpl;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.ClassUtil;
-
+import org.apache.webbeans.util.GenericsUtil;
/**
* Bean builder for {@link org.apache.webbeans.component.InterceptorBean}s.
@@ -165,57 +165,15 @@ public class DecoratorBeanBuilder<T>
private void defineDecoratedTypes()
{
- // remove them first to avoid to loop over them
- decoratedTypes.remove(Object.class);
- decoratedTypes.remove(java.io.Serializable.class); /* 8.1 */
-
- Type beanClass = annotatedType.getJavaClass();
- do
- {
- final Class<?> clazz = ClassUtil.getClass(beanClass);
- final Type toRemove;
- if (ClassUtil.isDefinitionContainsTypeVariables(beanClass))
- {
- final OwbParametrizedTypeImpl pt = new
OwbParametrizedTypeImpl(clazz.getDeclaringClass(), clazz);
- final TypeVariable<?>[] tvs = clazz.getTypeParameters();
- for(TypeVariable<?> tv : tvs)
- {
- pt.addTypeArgument(tv);
- }
- toRemove = pt;
- //X TODO generic support setDecoratorGenericType(pt);
- }
- else
- {
- toRemove = beanClass;
- //X TODO generic support
setDecoratorGenericType(beanClass);
- }
-
- final Iterator<Type> iterator = decoratedTypes.iterator();
- while (iterator.hasNext())
- {
- final Type next = iterator.next();
-
- // if raw class is the same and is assignable (generics
handling)
- if (ClassUtil.getClass(next) == clazz &&
ClassUtil.isAssignable(toRemove, next))
- {
- iterator.remove();
- }
- }
-
- beanClass = clazz.getGenericSuperclass();
- } while (beanClass != Object.class);
-
-
+ decoratedTypes.remove(Serializable.class); /* 8.1 */
for (Iterator<Type> i = decoratedTypes.iterator(); i.hasNext(); )
{
Type t = i.next();
- if (t instanceof Class<?> &&
ignoredDecoratorInterfaces.contains(((Class) t).getName()))
+ if (!ClassUtil.getClass(t).isInterface() || (t instanceof
Class<?> && ignoredDecoratorInterfaces.contains(((Class) t).getName())))
{
i.remove();
}
}
-
}
private void defineDelegate(Set<InjectionPoint> injectionPoints)
@@ -258,7 +216,7 @@ public class DecoratorBeanBuilder<T>
}
}
- delegateType = ipFound.getType();
+ delegateType = GenericsUtil.resolveType(ipFound.getType(),
annotatedType.getJavaClass(), ipFound.getMember());
delegateQualifiers = ipFound.getQualifiers();
for (Type decType : decoratedTypes)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
Wed Jul 10 22:48:58 2013
@@ -317,11 +317,11 @@ public abstract class InterceptorBeanBui
{
if (clazz == null)
{
- clazz = annotatedMethod.getDeclaringType().getJavaClass();
+ clazz =
annotatedMethod.getJavaMember().getDeclaringClass();
}
// check for same class -> Exception
- if (alreadyDefined.getDeclaringType().getJavaClass() == clazz)
+ if (alreadyDefined.getJavaMember().getDeclaringClass() ==
clazz)
{
throw new WebBeansConfigurationException("Only one
Interceptor of a certain type is allowed per class, but multiple found in
class "
+
annotatedMethod.getDeclaringType().getJavaClass().getName()
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
Wed Jul 10 22:48:58 2013
@@ -41,7 +41,7 @@ import org.apache.webbeans.exception.Web
import org.apache.webbeans.portable.ProducerMethodProducer;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
-import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
public class MethodProducerFactory<P> implements ProducerFactory<P>
{
@@ -98,7 +98,7 @@ public class MethodProducerFactory<P> im
{
if
(annotatedParameter.isAnnotationPresent(Disposes.class))
{
- if
(!ClassUtil.isAssignable(annotatedParameter.getBaseType(),
producerMethod.getBaseType()))
+ if
(!GenericsUtil.satisfiesDependency(producerMethod.getBaseType(),
annotatedParameter.getBaseType()))
{
continue;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeansBuilder.java
Wed Jul 10 22:48:58 2013
@@ -77,7 +77,7 @@ public class ProducerFieldBeansBuilder<T
Set<AnnotatedField<? super T>> annotatedFields =
annotatedType.getFields();
for(AnnotatedField<? super T> annotatedField: annotatedFields)
{
- if(annotatedField.isAnnotationPresent(Produces.class) &&
annotatedField.getDeclaringType().getJavaClass().equals(annotatedType.getJavaClass()))
+ if(annotatedField.isAnnotationPresent(Produces.class) &&
annotatedField.getJavaMember().getDeclaringClass().equals(annotatedType.getJavaClass()))
{
Type genericType = annotatedField.getBaseType();
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
Wed Jul 10 22:48:58 2013
@@ -26,7 +26,7 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
-import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
import org.apache.webbeans.util.WebBeansUtil;
import javax.enterprise.event.Observes;
@@ -77,7 +77,7 @@ public class ProducerMethodBeansBuilder<
{
boolean enterprise =
EnterpriseBeanMarker.class.isInstance(bean);
if(annotatedMethod.isAnnotationPresent(Produces.class) &&
-
(annotatedMethod.getDeclaringType().getJavaClass().equals(annotatedType.getJavaClass())
+
(annotatedMethod.getJavaMember().getDeclaringClass().equals(annotatedType.getJavaClass())
|| (enterprise &&
annotatedType.getJavaClass().isAssignableFrom(annotatedType.getJavaClass()))))
{
checkProducerMethodForDeployment(annotatedMethod);
@@ -126,7 +126,7 @@ public class ProducerMethodBeansBuilder<
boolean found = false;
for (final ProducerMethodBean<?> producer :
producerBeans)
{
- if (ClassUtil.isAssignable(param.getBaseType(),
producer.getCreatorMethod().getGenericReturnType()))
+ if
(GenericsUtil.satisfiesDependency(producer.getCreatorMethod().getGenericReturnType(),
param.getBaseType()))
{
found = true;
break;
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OwbParametrizedTypeImpl.java
Wed Jul 10 22:48:58 2013
@@ -20,9 +20,7 @@ package org.apache.webbeans.config;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
/**
* Custom parametrized type implementation.
@@ -38,30 +36,26 @@ public class OwbParametrizedTypeImpl imp
private final Type rawType;
/**Actual type arguments*/
- private final List<Type> types = new ArrayList<Type>();
+ private final Type[] types;
/**
* New instance.
* @param owner owner
* @param raw raw
*/
- public OwbParametrizedTypeImpl(Type owner, Type raw)
+ public OwbParametrizedTypeImpl(Type owner, Type raw, Type... types)
{
this.owner = owner;
- rawType = raw;
+ this.rawType = raw;
+ this.types = types;
}
@Override
public Type[] getActualTypeArguments()
{
- return types.toArray(new Type[types.size()]);
+ return types.clone();
}
- public void addTypeArgument(Type type)
- {
- types.add(type);
- }
-
@Override
public Type getOwnerType()
{
@@ -82,12 +76,7 @@ public class OwbParametrizedTypeImpl imp
@Override
public int hashCode()
{
- final int prime = 31;
- int result = 1;
- result = prime * result +
Arrays.hashCode(getActualTypeArguments());
- result = prime * result + ((owner == null) ? 0 : owner.hashCode());
- result = prime * result + ((rawType == null) ? 0 :
rawType.hashCode());
- return result;
+ return Arrays.hashCode(types) ^ (owner == null ? 0 :
owner.hashCode()) ^ (rawType == null ? 0 : rawType.hashCode());
}
/* (non-Javadoc)
@@ -96,47 +85,24 @@ public class OwbParametrizedTypeImpl imp
@Override
public boolean equals(Object obj)
{
- if (this == obj)
- {
- return true;
- }
- if (obj == null)
- {
- return false;
- }
- if (getClass() != obj.getClass())
- {
- return false;
- }
- OwbParametrizedTypeImpl other = (OwbParametrizedTypeImpl) obj;
- if (!Arrays.equals(getActualTypeArguments(),
other.getActualTypeArguments()))
- {
- return false;
- }
- if (owner == null)
- {
- if (other.owner != null)
- {
- return false;
- }
- }
- else if (!owner.equals(other.owner))
- {
- return false;
- }
- if (rawType == null)
- {
- if (other.rawType != null)
- {
- return false;
- }
- }
- else if (!rawType.equals(other.rawType))
- {
- return false;
- }
-
- return true;
+ if (this == obj)
+ {
+ return true;
+ }
+ else if (obj instanceof ParameterizedType)
+ {
+ ParameterizedType that = (ParameterizedType) obj;
+ Type thatOwnerType = that.getOwnerType();
+ Type thatRawType = that.getRawType();
+ return (owner == null ? thatOwnerType == null :
owner.equals(thatOwnerType))
+ && (rawType == null ? thatRawType == null :
rawType.equals(thatRawType))
+ && Arrays.equals(types, that.getActualTypeArguments());
+ }
+ else
+ {
+ return false;
+ }
+
}
public String toString()
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
Wed Jul 10 22:48:58 2013
@@ -86,6 +86,7 @@ import org.apache.webbeans.spi.plugins.O
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
import org.apache.webbeans.util.WebBeansUtil;
import org.apache.webbeans.xml.WebBeansXMLConfigurator;
@@ -688,7 +689,7 @@ public class BeanManagerImpl extends Abs
//Check type if bean type is given
if(beanType != null)
{
- if(!isBeanTypeAssignableToGivenType(bean.getTypes(), beanType,
bean instanceof NewBean) && !ClassUtil.isAssignable(bean.getBeanClass(),
beanType))
+ if(!isBeanTypeAssignableToGivenType(bean.getTypes(), beanType,
bean instanceof NewBean) && !GenericsUtil.satisfiesDependency(beanType,
bean.getBeanClass()))
{
throw new IllegalArgumentException("Given bean type : " +
beanType + " is not applicable for the bean instance : " + bean);
}
@@ -747,7 +748,7 @@ public class BeanManagerImpl extends Abs
{
Type beanApiType = itBeanApiTypes.next();
- if(ClassUtil.isAssignable(beanApiType, givenType))
+ if(GenericsUtil.satisfiesDependency(givenType, beanApiType))
{
return true;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
Wed Jul 10 22:48:58 2013
@@ -50,6 +50,7 @@ import org.apache.webbeans.spi.ScannerSe
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
import org.apache.webbeans.util.InjectionExceptionUtil;
import org.apache.webbeans.util.WebBeansUtil;
import static
org.apache.webbeans.util.InjectionExceptionUtil.throwAmbiguousResolutionException;
@@ -500,7 +501,7 @@ public class InjectionResolver
for (Type componentApiType : component.getTypes())
{
- if (ClassUtil.isAssignable(componentApiType,
injectionPointType))
+ if
(GenericsUtil.satisfiesDependency(injectionPointType, componentApiType))
{
resolvedComponents.add(component);
break;
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
Wed Jul 10 22:48:58 2013
@@ -35,6 +35,7 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.GenericsUtil;
public class DecoratorsManager
{
@@ -176,6 +177,7 @@ public class DecoratorsManager
private boolean isDecoratorMatch(Decorator<?> decorator, Set<Type>
apiTypes, Set<Annotation> annotations)
{
+ // 8.3.1
if (!apiTypesMatchDelegateType(decorator, apiTypes))
{
return false;
@@ -218,7 +220,7 @@ public class DecoratorsManager
boolean ok = false;
for (Type apiType : apiTypes)
{
- if
(DecoratorResolverRules.compareType(decorator.getDelegateType(), apiType))
+ if
(GenericsUtil.satisfiesDependency(decorator.getDelegateType(), apiType))
{
ok = true;
break;
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
Wed Jul 10 22:48:58 2013
@@ -324,7 +324,7 @@ public class ObserverMethodImpl<T> imple
annotationManager.getQualifierAnnotations(AnnotationUtil.
asArray(parameter.getAnnotations()));
- InjectionPoint point =
InjectionPointFactory.getPartialInjectionPoint(bean,
parameter.getBaseType(), parameter, bindingTypes);
+ InjectionPoint point =
InjectionPointFactory.getPartialInjectionPoint(bean, parameter,
bindingTypes);
//Get observer parameter instance
@SuppressWarnings("unchecked")
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
Wed Jul 10 22:48:58 2013
@@ -21,7 +21,6 @@ package org.apache.webbeans.inject.impl;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
-import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -131,7 +130,7 @@ public class InjectionPointFactory
}
}
- return new InjectionPointImpl(owner, annotField.getBaseType(),
Arrays.asList(qualifierAnnots), annotField);
+ return new InjectionPointImpl(owner,
Arrays.asList(qualifierAnnots), annotField);
}
public <X> InjectionPoint buildInjectionPoint(Bean<?> owner,
AnnotatedParameter<X> parameter)
@@ -139,7 +138,7 @@ public class InjectionPointFactory
Asserts.assertNotNull(parameter, "parameter parameter can not be
null");
Set<Annotation> anns = parameter.getAnnotations();
Annotation[] qualifierAnnots =
webBeansContext.getAnnotationManager().getQualifierAnnotations(anns.toArray(new
Annotation[anns.size()]));
- return new InjectionPointImpl(owner, parameter.getBaseType(),
Arrays.asList(qualifierAnnots), parameter);
+ return new InjectionPointImpl(owner,
Arrays.asList(qualifierAnnots), parameter);
}
public <X> List<InjectionPoint> buildInjectionPoints(Bean<?> owner,
AnnotatedCallable<X> callable)
@@ -165,9 +164,9 @@ public class InjectionPointFactory
}
}
- public static InjectionPoint getPartialInjectionPoint(Bean<?>
owner,Type type, AnnotatedParameter<?> parameter, Annotation...bindings)
+ public static InjectionPoint getPartialInjectionPoint(Bean<?> owner,
AnnotatedParameter<?> parameter, Annotation...bindings)
{
- return new InjectionPointImpl(owner, type,
Arrays.asList(bindings), parameter);
+ return new InjectionPointImpl(owner, Arrays.asList(bindings),
parameter);
}
private void validateInitializerConstructor(AnnotatedConstructor<?>
constructor)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
Wed Jul 10 22:48:58 2013
@@ -71,15 +71,15 @@ class InjectionPointImpl implements Inje
private boolean delegate;
- InjectionPointImpl(Bean<?> ownerBean, Type type,
Collection<Annotation> qualifiers, AnnotatedField<?> annotatedField)
+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
qualifiers, AnnotatedField<?> annotatedField)
{
- this(ownerBean, type, qualifiers, annotatedField,
+ this(ownerBean, annotatedField.getBaseType(), qualifiers,
annotatedField,
annotatedField.getJavaMember(),
annotatedField.isAnnotationPresent(Delegate.class),
Modifier.isTransient(annotatedField.getJavaMember().getModifiers()));
}
- InjectionPointImpl(Bean<?> ownerBean, Type type,
Collection<Annotation> qualifiers, AnnotatedParameter<?> parameter)
+ InjectionPointImpl(Bean<?> ownerBean, Collection<Annotation>
qualifiers, AnnotatedParameter<?> parameter)
{
- this(ownerBean, type, qualifiers, parameter,
parameter.getDeclaringCallable().getJavaMember(),
parameter.isAnnotationPresent(Delegate.class), false);
+ this(ownerBean, parameter.getBaseType(), qualifiers, parameter,
parameter.getDeclaringCallable().getJavaMember(),
parameter.isAnnotationPresent(Delegate.class), false);
}
private InjectionPointImpl(Bean<?> ownerBean, Type type,
Collection<Annotation> qualifiers, Annotated annotated, Member member,
boolean delegate, boolean isTransient)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
Wed Jul 10 22:48:58 2013
@@ -32,6 +32,7 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
/**
* Abstract implementation of the {@link Annotated} contract.
@@ -52,7 +53,7 @@ abstract class AbstractAnnotated impleme
private final WebBeansContext webBeansContext;
/**
- * Createa a new annotated element.
+ * Creates a new annotated element.
*
* @param webBeansContext our WebBeansContext
* @param baseType annotated element type
@@ -142,18 +143,19 @@ abstract class AbstractAnnotated impleme
{
if (typeClosures == null)
{
- initTypeClosures();
+ initTypeClosure();
}
return typeClosures;
}
- private synchronized void initTypeClosures()
+ protected abstract Class<?> getOwningClass();
+ protected abstract Class<?> getDeclaringClass();
+
+ private synchronized void initTypeClosure()
{
if (typeClosures == null)
{
- typeClosures = new HashSet<Type>();
- typeClosures.add(Object.class);
- ClassUtil.setTypeHierarchy(typeClosures, baseType);
+ typeClosures = GenericsUtil.getTypeClosure(baseType,
getOwningClass(), getDeclaringClass());
Set<String> ignoredInterfaces =
webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
for (Iterator<Type> i = typeClosures.iterator(); i.hasNext(); )
{
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotatedMember.java
Wed Jul 10 22:48:58 2013
@@ -42,7 +42,6 @@ abstract class AbstractAnnotatedMember<X
/**Member type*/
protected final Member javaMember;
- @SuppressWarnings("unchecked")
AbstractAnnotatedMember(WebBeansContext webBeansContext, Type
baseType, Member javaMember, AnnotatedType<X> declaringType)
{
super(webBeansContext, baseType);
@@ -83,6 +82,18 @@ abstract class AbstractAnnotatedMember<X
return Modifier.isStatic(javaMember.getModifiers());
}
+ @Override
+ protected Class<?> getOwningClass()
+ {
+ return declaringType.getJavaClass();
+ }
+
+ @Override
+ protected Class<?> getDeclaringClass()
+ {
+ return javaMember.getDeclaringClass();
+ }
+
public String toString()
{
StringBuilder builder = new StringBuilder(super.toString());
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedConstructorImpl.java
Wed Jul 10 22:48:58 2013
@@ -19,6 +19,7 @@
package org.apache.webbeans.portable;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.util.GenericsUtil;
import java.lang.reflect.Constructor;
@@ -43,7 +44,7 @@ public class AnnotatedConstructorImpl<X>
{
super(webBeansContext, javaMember.getDeclaringClass(), javaMember,
declaringType);
setAnnotations(javaMember.getDeclaredAnnotations());
- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
javaMember.getParameterAnnotations());
+
setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.getJavaClass(),
javaMember), javaMember.getParameterAnnotations());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedFieldImpl.java
Wed Jul 10 22:48:58 2013
@@ -19,6 +19,7 @@
package org.apache.webbeans.portable;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.util.GenericsUtil;
import java.lang.reflect.Field;
@@ -43,7 +44,7 @@ public class AnnotatedFieldImpl<X> exten
*/
AnnotatedFieldImpl(WebBeansContext webBeansContext, Field javaMember,
AnnotatedType<X> declaringType)
{
- super(webBeansContext, javaMember.getGenericType(),
javaMember,declaringType);
+ super(webBeansContext,
GenericsUtil.resolveType(declaringType.getJavaClass(), javaMember),
javaMember,declaringType);
setAnnotations(javaMember.getDeclaredAnnotations());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedMethodImpl.java
Wed Jul 10 22:48:58 2013
@@ -19,6 +19,7 @@
package org.apache.webbeans.portable;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.util.GenericsUtil;
import java.lang.reflect.Method;
@@ -41,11 +42,11 @@ class AnnotatedMethodImpl<X> extends Abs
* @param declaringType declaring type
* @param javaMember method
*/
- AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
javaMember,AnnotatedType<X> declaringType)
+ AnnotatedMethodImpl(WebBeansContext webBeansContext, Method
javaMember, AnnotatedType<X> declaringType)
{
- super(webBeansContext, javaMember.getGenericReturnType(),
javaMember,declaringType);
+ super(webBeansContext,
GenericsUtil.resolveReturnType(declaringType.getJavaClass(), javaMember),
javaMember,declaringType);
setAnnotations(javaMember.getDeclaredAnnotations());
- setAnnotatedParameters(javaMember.getGenericParameterTypes(),
javaMember.getParameterAnnotations());
+
setAnnotatedParameters(GenericsUtil.resolveParameterTypes(declaringType.getJavaClass(),
javaMember), javaMember.getParameterAnnotations());
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedParameterImpl.java
Wed Jul 10 22:48:58 2013
@@ -75,4 +75,16 @@ class AnnotatedParameterImpl<X> extends
return builder.toString();
}
+
+ @Override
+ protected Class<?> getOwningClass()
+ {
+ return declaringCallable.getDeclaringType().getJavaClass();
+ }
+
+ @Override
+ protected Class<?> getDeclaringClass()
+ {
+ return declaringCallable.getJavaMember().getDeclaringClass();
+ }
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
Wed Jul 10 22:48:58 2013
@@ -132,6 +132,18 @@ class AnnotatedTypeImpl<X>
return getState().methods;
}
+ @Override
+ protected Class<?> getOwningClass()
+ {
+ return getJavaClass();
+ }
+
+ @Override
+ protected Class<?> getDeclaringClass()
+ {
+ return getJavaClass();
+ }
+
private State getState()
{
State result = state;
@@ -153,7 +165,6 @@ class AnnotatedTypeImpl<X>
return result;
}
-
private class State
{
@@ -230,12 +241,15 @@ class AnnotatedTypeImpl<X>
if (supertype != null)
{
- fields.addAll(supertype.getFields());
+ for (AnnotatedField<? super X> field:
supertype.getFields())
+ {
+ fields.add(new
AnnotatedFieldImpl<X>(getWebBeansContext(), field.getJavaMember(),
AnnotatedTypeImpl.this));
+ }
for (AnnotatedMethod<? super X> method :
supertype.getMethods())
{
if (!isOverridden(method))
{
- methods.add(method);
+ methods.add(new
AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(),
AnnotatedTypeImpl.this));
}
}
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
Wed Jul 10 22:48:58 2013
@@ -18,14 +18,6 @@
*/
package org.apache.webbeans.util;
-import org.apache.webbeans.config.BeanTypeSetResolver;
-import org.apache.webbeans.exception.WebBeansException;
-import org.apache.webbeans.exception.inject.DefinitionException;
-
-import javax.enterprise.event.Event;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.inject.Provider;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -41,6 +33,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.exception.inject.DefinitionException;
+
/**
* Utility classes with respect to the class operations.
*
@@ -124,21 +121,24 @@ public final class ClassUtil
return clazz.isMemberClass();
}
- public static Class<?> getPrimitiveWrapper(Class<?> clazz)
+ public static boolean isSame(Type type1, Type type2)
{
- Asserts.nullCheckForClass(clazz);
-
- return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
-
+ if ((type1 instanceof Class) && ((Class<?>)type1).isPrimitive())
+ {
+ type1 = PRIMITIVE_TO_WRAPPERS_MAP.get(type1);
+ }
+ if ((type2 instanceof Class) && ((Class<?>)type2).isPrimitive())
+ {
+ type2 = PRIMITIVE_TO_WRAPPERS_MAP.get(type2);
+ }
+ return type1 == type2;
}
- public static Class<?> identityOrGetPrimitiveWrapper(Class<?> clazz)
+ public static Class<?> getPrimitiveWrapper(Class<?> clazz)
{
- if (clazz.isPrimitive())
- {
- return getPrimitiveWrapper(clazz);
- }
- return clazz;
+ Asserts.nullCheckForClass(clazz);
+
+ return PRIMITIVE_TO_WRAPPERS_MAP.get(clazz);
}
@@ -326,7 +326,6 @@ public final class ClassUtil
return getObjectMethodNames().contains(methodName);
}
-
/**
* Returns true if type is an instance of
<code>ParameterizedType</code>
* else otherwise.
@@ -426,131 +425,6 @@ public final class ClassUtil
}
/**
- * See specification 5.2.3.
- * @param beanType bean type
- * @param requiredType required type
- * @return true if assignable
- */
- public static boolean isAssignable(Type beanType, Type requiredType)
- {
- Asserts.assertNotNull(beanType, "beanType parameter can not be
null");
- Asserts.assertNotNull(requiredType, "requiredType parameter can
not be null");
-
- //Bean and required types are ParametrizedType
- if (beanType instanceof ParameterizedType && requiredType
instanceof ParameterizedType)
- {
- return isAssignableForParametrized((ParameterizedType)
beanType, (ParameterizedType) requiredType);
- }
- //Both type is class type
- else if (beanType instanceof Class && requiredType instanceof
Class)
- {
- Class<?> clzBeanType = (Class<?>)beanType;
- Class<?> clzReqType = (Class<?>)requiredType;
-
- if(clzBeanType.isPrimitive())
- {
- clzBeanType = getPrimitiveWrapper(clzBeanType);
- }
-
- if(clzReqType.isPrimitive())
- {
- clzReqType = getPrimitiveWrapper(clzReqType);
- }
-
- return clzReqType.equals(clzBeanType);
- }
- //Bean type is Parametrized and required type is class type
- else if(beanType instanceof ParameterizedType && requiredType
instanceof Class)
- {
- boolean ok = true;
- ParameterizedType ptBean = (ParameterizedType)beanType;
- Class<?> clazzBeanType =
identityOrGetPrimitiveWrapper((Class<?>)ptBean.getRawType());
- Class<?> clazzReqType =
identityOrGetPrimitiveWrapper((Class<?>)requiredType);
- if(clazzBeanType.equals(clazzReqType))
- {
- Type[] beanTypeArgs = ptBean.getActualTypeArguments();
- for(Type actual : beanTypeArgs)
- {
- if(!ClassUtil.isUnboundedTypeVariable(actual))
- {
- if(actual instanceof Class)
- {
- Class<?> clazz = (Class<?>)actual;
- if(!clazz.equals(Object.class))
- {
- ok = false;
- break;
- }
- }
- else
- {
- ok = false;
- break;
- }
- }
- }
- }
- else
- {
- ok = false;
- }
-
-
- return ok;
- }
- //Bean type is class and required type is parametrized
- else if(beanType instanceof Class && requiredType instanceof
ParameterizedType)
- {
- final Class<?> clazzBeanType = (Class<?>)beanType;
- final ParameterizedType ptReq =
(ParameterizedType)requiredType;
- final Class<?> clazzReqType = (Class<?>)ptReq.getRawType();
- final Type genericSuperClass =
clazzBeanType.getGenericSuperclass();
-
- if (Provider.class.isAssignableFrom(clazzReqType) ||
- Event.class.isAssignableFrom(clazzReqType))
- {
- if (isClassAssignable(clazzReqType, clazzBeanType))
- {
- return true;
- }
- }
- else if (Bean.class.isAssignableFrom(clazzReqType))
- {
- // May be Bean, Interceptor or Decorator and thus must
match directly
- if (clazzReqType.equals(clazzBeanType))
- {
- return true;
- }
- }
- else if (genericSuperClass instanceof ParameterizedType)
- {
- final Type[] params = ((ParameterizedType)
genericSuperClass).getActualTypeArguments();
- final Type[] requiredParams = ((ParameterizedType)
requiredType).getActualTypeArguments();
- if (params.length != requiredParams.length)
- {
- return false;
- }
-
- for (int i = 0; i < params.length; i++)
- {
- if (!isAssignable(params[i], requiredParams[i]))
- {
- return false;
- }
- }
-
- return isClassAssignable(clazzReqType, clazzBeanType);
- }
-
- return false;
- }
- else
- {
- return false;
- }
- }
-
- /**
* Checks that event is applicable
* for the given observer type.
* @param eventType event type
@@ -718,7 +592,13 @@ public final class ClassUtil
ok++;
}
}
-
+ else if (requiredTypeArg instanceof ParameterizedType &&
beanTypeArg instanceof TypeVariable)
+ {
+ if
(checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(beanTypeArg,
requiredTypeArg))
+ {
+ ok++;
+ }
+ }
//Both type is actual type
else if((beanTypeArg instanceof Class) && (requiredTypeArg
instanceof Class))
{
@@ -874,6 +754,7 @@ public final class ClassUtil
Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
+ //TODO respect other bounds
Type tvBound = tvBeanTypeArg.getBounds()[0];
if(tvBound instanceof Class)
@@ -891,6 +772,13 @@ public final class ClassUtil
return true;
}
+
+ public static boolean
checkRequiredTypeIsParameterizedAndBeanTypeIsVariable(Type beanTypeArg,
Type requiredTypeArg)
+ {
+ ParameterizedType requiredType =
(ParameterizedType)requiredTypeArg;
+ //TODO respect parameters of required type
+ return checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg,
requiredType.getRawType());
+ }
public static boolean
checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(Type beanTypeArg, Type
requiredTypeArg)
{
@@ -972,16 +860,6 @@ public final class ClassUtil
}
}
-
- public static Set<Type> setTypeHierarchy(Set<Type> set, Type clazz)
- {
- BeanTypeSetResolver resolver = new BeanTypeSetResolver(clazz);
- resolver.startConfiguration();
- set.addAll(resolver.getHierarchy());
-
- return set;
- }
-
/**
* Return raw class type for given type.
* @param type base type instance
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,625 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.util;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.webbeans.config.OwbParametrizedTypeImpl;
+import org.apache.webbeans.exception.inject.DefinitionException;
+
+/**
+ * Utility classes for generic type operations.
+ */
+public final class GenericsUtil
+{
+ public static boolean satisfiesDependency(Type injectionPointType,
Type beanType)
+ {
+ validate(injectionPointType);
+ if (injectionPointType instanceof TypeVariable ||
injectionPointType instanceof WildcardType || injectionPointType instanceof
GenericArrayType)
+ {
+ throw new DefinitionException("Injection point cannot define
Type Variable " + injectionPointType);
+ }
+ if (beanType instanceof TypeVariable || beanType instanceof
WildcardType || beanType instanceof GenericArrayType)
+ {
+ return isAssignableFrom(injectionPointType, beanType);
+ }
+ else
+ {
+ Type injectionPointRawType = injectionPointType instanceof
ParameterizedType? ((ParameterizedType)injectionPointType).getRawType():
injectionPointType;
+ Type beanRawType = beanType instanceof ParameterizedType?
((ParameterizedType)beanType).getRawType(): beanType;
+
+ return ClassUtil.isSame(injectionPointRawType, beanRawType)?
isAssignableFrom(injectionPointType, beanType): false;
+ }
+ }
+
+ /**
+ * 5.2.3 and 5.2.4
+ */
+ public static boolean isAssignableFrom(Type requiredType, Type
beanType)
+ {
+ if (requiredType instanceof Class)
+ {
+ return isAssignableFrom((Class<?>)requiredType, beanType);
+ }
+ else if (requiredType instanceof ParameterizedType)
+ {
+ return isAssignableFrom((ParameterizedType)requiredType,
beanType);
+ }
+ else if (requiredType instanceof TypeVariable)
+ {
+ return isAssignableFrom((TypeVariable<?>)requiredType,
beanType);
+ }
+ else if (requiredType instanceof GenericArrayType)
+ {
+ return isAssignableFrom((GenericArrayType)requiredType,
beanType);
+ }
+ else if (requiredType instanceof WildcardType)
+ {
+ return isAssignableFrom((WildcardType)requiredType, beanType);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
requiredType.getClass());
+ }
+ }
+
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
Type beanType)
+ {
+ if (beanType instanceof Class)
+ {
+ return isAssignableFrom(injectionPointType,
(Class<?>)beanType);
+ }
+ else if (beanType instanceof TypeVariable)
+ {
+ return isAssignableFrom(injectionPointType,
(TypeVariable<?>)beanType);
+ }
+ else if (beanType instanceof ParameterizedType)
+ {
+ return isAssignableFrom(injectionPointType,
(ParameterizedType)beanType);
+ }
+ else if (beanType instanceof GenericArrayType)
+ {
+ return isAssignableFrom(injectionPointType,
(GenericArrayType)beanType);
+ }
+ else if (beanType instanceof WildcardType)
+ {
+ return isAssignableFrom((Type)injectionPointType,
(WildcardType)beanType);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
injectionPointType.getClass());
+ }
+ }
+
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
Class<?> beanType)
+ {
+ return ClassUtil.isClassAssignable(injectionPointType, beanType);
+ }
+
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
TypeVariable<?> beanType)
+ {
+ for (Type bounds: beanType.getBounds())
+ {
+ if (isAssignableFrom(injectionPointType, bounds))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * CDI Spec. 5.2.4: "A parameterized bean type is considered
assignable to a raw required type
+ * if the raw types are identical and all type parameters of the bean
type are either unbounded type variables or java.lang.Object."
+ */
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
ParameterizedType beanType)
+ {
+ if (beanType.getRawType() != injectionPointType)
+ {
+ return false; //raw types don't match
+ }
+ for (Type typeArgument: beanType.getActualTypeArguments())
+ {
+ if (typeArgument == Object.class)
+ {
+ continue;
+ }
+ if (!(typeArgument instanceof TypeVariable))
+ {
+ return false; //neither object nor type variable
+ }
+ TypeVariable<?> typeVariable = (TypeVariable<?>)typeArgument;
+ for (Type bounds: typeVariable.getBounds())
+ {
+ if (bounds != Object.class)
+ {
+ return false; //bound type variable
+ }
+ }
+ }
+ return true;
+ }
+
+ private static boolean isAssignableFrom(Class<?> injectionPointType,
GenericArrayType beanType)
+ {
+ if (!injectionPointType.isArray())
+ {
+ return false;
+ }
+ return isAssignableFrom(injectionPointType.getComponentType(),
beanType.getGenericComponentType());
+ }
+
+ private static boolean isAssignableFrom(Type injectionPointType,
WildcardType beanType)
+ {
+ for (Type bounds: beanType.getLowerBounds())
+ {
+ if (!isAssignableFrom(bounds, injectionPointType))
+ {
+ return false;
+ }
+ }
+ for (Type bounds: beanType.getUpperBounds())
+ {
+ if (isAssignableFrom(injectionPointType, bounds))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean isAssignableFrom(ParameterizedType
injectionPointType, Type beanType)
+ {
+ if (beanType instanceof Class)
+ {
+ return isAssignableFrom(injectionPointType,
(Class<?>)beanType);
+ }
+ else if (beanType instanceof TypeVariable)
+ {
+ return isAssignableFrom(injectionPointType,
(TypeVariable<?>)beanType);
+ }
+ else if (beanType instanceof ParameterizedType)
+ {
+ return isAssignableFrom(injectionPointType,
(ParameterizedType)beanType);
+ }
+ else if (beanType instanceof WildcardType)
+ {
+ return isAssignableFrom((Type)injectionPointType,
(WildcardType)beanType);
+ }
+ else if (beanType instanceof GenericArrayType)
+ {
+ return false;
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
injectionPointType.getClass());
+ }
+ }
+
+ private static boolean isAssignableFrom(ParameterizedType
injectionPointType, Class<?> beanType)
+ {
+ return isAssignableFrom(injectionPointType.getRawType(), beanType);
+ }
+
+ private static boolean isAssignableFrom(ParameterizedType
injectionPointType, TypeVariable<?> beanType)
+ {
+ for (Type bounds: beanType.getBounds())
+ {
+ if (isAssignableFrom(injectionPointType, bounds))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * CDI Spec. 5.2.4
+ */
+ private static boolean isAssignableFrom(ParameterizedType
injectionPointType, ParameterizedType beanType)
+ {
+ if (injectionPointType.getRawType() != beanType.getRawType())
+ {
+ return false;
+ }
+ Type[] injectionPointTypeArguments =
injectionPointType.getActualTypeArguments();
+ Type[] beanTypeArguments = beanType.getActualTypeArguments();
+ for (int i = 0; i < injectionPointTypeArguments.length; i++)
+ {
+ if (!isAssignableFrom(injectionPointTypeArguments[i],
beanTypeArguments[i]))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static boolean isAssignableFrom(TypeVariable<?>
injectionPointType, Type beanType)
+ {
+ for (Type bounds: injectionPointType.getBounds())
+ {
+ if (!isAssignableFrom(bounds, beanType))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static boolean isAssignableFrom(GenericArrayType
injectionPointType, Type beanType)
+ {
+ throw new UnsupportedOperationException("Not yet implementeds");
+ }
+
+ private static boolean isAssignableFrom(WildcardType
injectionPointType, Type beanType)
+ {
+ for (Type bounds: injectionPointType.getLowerBounds())
+ {
+ if (!isAssignableFrom(beanType, bounds))
+ {
+ return false;
+ }
+ }
+ for (Type bounds: injectionPointType.getUpperBounds())
+ {
+ if (!isAssignableFrom(bounds, beanType))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Resolves the actual type of the specified field for the type
hierarchy specified by the given subclass
+ */
+ public static Type resolveType(Class<?> subclass, Field field)
+ {
+ return resolveType(field.getGenericType(), new
TypeVariableResolver(subclass, field.getDeclaringClass()));
+ }
+
+ /**
+ * Resolves the actual return type of the specified method for the
type hierarchy specified by the given subclass
+ */
+ public static Type resolveReturnType(Class<?> subclass, Method method)
+ {
+ return resolveType(method.getGenericReturnType(), new
TypeVariableResolver(subclass, method.getDeclaringClass()));
+ }
+
+ /**
+ * Resolves the actual parameter types of the specified constructor
for the type hierarchy specified by the given subclass
+ */
+ public static Type[] resolveParameterTypes(Class<?> subclass,
Constructor<?> constructor)
+ {
+ return resolveTypes(constructor.getGenericParameterTypes(), new
TypeVariableResolver(subclass, constructor.getDeclaringClass()));
+ }
+
+ /**
+ * Resolves the actual parameter types of the specified method for the
type hierarchy specified by the given subclass
+ */
+ public static Type[] resolveParameterTypes(Class<?> subclass, Method
method)
+ {
+ return resolveTypes(method.getGenericParameterTypes(), new
TypeVariableResolver(subclass, method.getDeclaringClass()));
+ }
+
+ /**
+ * Resolves the actual type of the specified type for the type
hierarchy specified by the given subclass
+ */
+ public static Type resolveType(Type type, Class<?> subclass, Member
member)
+ {
+ return resolveType(type, new TypeVariableResolver(subclass,
member.getDeclaringClass()));
+ }
+
+ private static Type resolveType(Type type, TypeVariableResolver
resolver)
+ {
+ if (type instanceof Class)
+ {
+ return type;
+ }
+ else if (type instanceof ParameterizedType)
+ {
+ ParameterizedType parameterizedType = (ParameterizedType)type;
+ Type[] resolvedTypes =
resolveTypes(parameterizedType.getActualTypeArguments(), resolver);
+ return new
OwbParametrizedTypeImpl(parameterizedType.getOwnerType(),
parameterizedType.getRawType(), resolvedTypes);
+ }
+ else if (type instanceof TypeVariable)
+ {
+ TypeVariable<?> variable = (TypeVariable<?>)type;
+ return resolver.resolve(variable);
+ }
+ else if (type instanceof WildcardType)
+ {
+ Type[] resolvedTypes = resolveTypes(((WildcardType)
type).getUpperBounds(), resolver);
+ return
resolveType(getMostSpecificType(getRawTypes(resolvedTypes, resolver),
resolvedTypes), resolver);
+ }
+ else if (type instanceof GenericArrayType)
+ {
+ Type componentType =
resolveType(((GenericArrayType)type).getGenericComponentType(), resolver);
+ Class<?> componentClass = getRawType(componentType, resolver);
+ return Array.newInstance(componentClass, 0).getClass();
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
type.getClass().getName());
+ }
+ }
+
+ public static Type[] resolveTypes(Type[] types, TypeVariableResolver
resolution)
+ {
+ Type[] resolvedTypeArguments = new Type[types.length];
+ for (int i = 0; i < types.length; i++)
+ {
+ resolvedTypeArguments[i] = resolveType(types[i], resolution);
+ }
+ return resolvedTypeArguments;
+ }
+
+ public static Set<Type> getTypeClosure(Type type, Class<?>
owningClass, Class<?> declaringClass)
+ {
+ Set<Type> typeClosure = new HashSet<Type>();
+ typeClosure.add(Object.class);
+ fillTypeHierarchy(typeClosure, type, new
TypeVariableResolver(owningClass, declaringClass));
+ return typeClosure;
+ }
+
+ private static void fillTypeHierarchy(Set<Type> set, Type type,
TypeVariableResolver resolver)
+ {
+ if (type == null)
+ {
+ return;
+ }
+ Type resolvedType = GenericsUtil.resolveType(type, resolver);
+ set.add(resolvedType);
+ Class<?> resolvedClass = GenericsUtil.getRawType(resolvedType,
resolver);
+ if (resolvedClass.getSuperclass() != null)
+ {
+ fillTypeHierarchy(set, resolvedClass.getGenericSuperclass(),
resolver.add(resolvedClass));
+ }
+ for (Type interfaceType: resolvedClass.getGenericInterfaces())
+ {
+ fillTypeHierarchy(set, interfaceType,
resolver.add(resolvedClass, interfaceType));
+ }
+ }
+
+ static <T> Class<T> getRawType(Type type, TypeVariableResolver
resolver)
+ {
+ if (type instanceof Class)
+ {
+ return (Class<T>)type;
+ }
+ else if (type instanceof ParameterizedType)
+ {
+ return getRawType(((ParameterizedType) type).getRawType(),
resolver);
+ }
+ else if ((type instanceof TypeVariable) || (type instanceof
WildcardType) || (type instanceof GenericArrayType))
+ {
+ Type resolvedType = resolveType(type, resolver);
+ if (resolvedType instanceof TypeVariable)
+ {
+ TypeVariable<?> variable = (TypeVariable<?>)resolvedType;
+ return
getRawType(resolveType(getRawType(variable.getBounds(), resolver),
resolver), resolver);
+ }
+ else
+ {
+ return getRawType(resolvedType, resolver);
+ }
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unsupported type " +
type.getClass().getName());
+ }
+ }
+
+ private static Type getRawType(Type[] types, TypeVariableResolver
resolver)
+ {
+ Class<?>[] rawTypes = getRawTypes(types, resolver);
+ Class<?>[] classTypes = getClassTypes(rawTypes);
+ if (classTypes.length > 0)
+ {
+ return getMostSpecificType(classTypes, types);
+ }
+ else
+ {
+ return getMostSpecificType(rawTypes, types);
+ }
+ }
+
+ private static <T> Class<T>[] getRawTypes(Type[] types,
TypeVariableResolver resolver)
+ {
+ Class<T>[] rawTypes = new Class[types.length];
+ for (int i = 0; i < types.length; i++)
+ {
+ rawTypes[i] = getRawType(types[i], resolver);
+ }
+ return rawTypes;
+ }
+
+ private static Type getMostSpecificType(Class<?>[] types, Type[]
genericTypes)
+ {
+ Class<?> mostSpecificType = types[0];
+ int mostSpecificIndex = 0;
+ for (int i = 0; i < types.length; i++)
+ {
+ if (mostSpecificType.isAssignableFrom(types[i]))
+ {
+ mostSpecificType = types[i];
+ mostSpecificIndex = i;
+ }
+ }
+ return genericTypes[mostSpecificIndex];
+ }
+
+ private static Class<?>[] getClassTypes(Class<?>[] rawTypes)
+ {
+ List<Class<?>> classTypes = new ArrayList<Class<?>>();
+ for (Class<?> rawType : rawTypes)
+ {
+ if (!rawType.isInterface())
+ {
+ classTypes.add(rawType);
+ }
+ }
+ return classTypes.toArray(new Class[classTypes.size()]);
+ }
+
+ private static Type validate(Type type)
+ {
+ if (!(type instanceof Class)
+ && !(type instanceof ParameterizedType)
+ && !(type instanceof TypeVariable)
+ && !(type instanceof GenericArrayType)
+ && !(type instanceof WildcardType))
+ {
+ throw new IllegalArgumentException("Unsupported type " +
type.getClass());
+ }
+ return type;
+ }
+
+ /**
+ * resolves actual types of a TypeVariable for a specific type
hierarchy
+ */
+ private static class TypeVariableResolver
+ {
+ private List<TypeVariableDeclaration> declarations = new
ArrayList<TypeVariableDeclaration>();
+
+ private TypeVariableResolver(List<TypeVariableDeclaration>
implementation)
+ {
+ this.declarations = implementation;
+ }
+
+ public TypeVariableResolver(Class<?> subclass, Class<?>
declaringClass)
+ {
+ declarations.add(new TypeVariableDeclaration(subclass,
subclass.getGenericSuperclass()));
+ while (declaringClass != subclass &&
declaringClass.isAssignableFrom(subclass))
+ {
+ subclass = subclass.getSuperclass();
+ declarations.add(new TypeVariableDeclaration(subclass,
subclass.getGenericSuperclass()));
+ }
+ }
+
+ public Type resolve(TypeVariable<?> variable)
+ {
+ if (declarations.size() < 2)
+ {
+ return getRawType(variable.getBounds(), this);
+ }
+ int hierarchyIndex = declarations.size() - 1;
+ TypeVariableDeclaration typeVariableImplementation =
declarations.get(hierarchyIndex);
+ TypeVariable<?>[] typeParameters =
typeVariableImplementation.getDeclaredTypeParameters();
+ int typeIndex = -1;
+ for (int i = 0; i < typeParameters.length; i++)
+ {
+ if (variable.getName().equals(typeParameters[i].getName()))
+ {
+ typeIndex = i;
+ break;
+ }
+ }
+ if (typeIndex == -1)
+ {
+ // type erasure
+ return Object.class;
+ }
+ TypeVariableDeclaration declaration =
declarations.get(hierarchyIndex - 1);
+ Type genericClass = declaration.getAssignment();
+ if (genericClass instanceof ParameterizedType)
+ {
+ ParameterizedType classType =
(ParameterizedType)genericClass;
+ return
resolveType(classType.getActualTypeArguments()[typeIndex], remove());
+ }
+ else
+ {
+ TypeVariable<?>[] typeVariables =
declaration.getDeclaredTypeParameters();
+ if (typeVariables.length > typeIndex)
+ {
+ return resolveType(typeVariables[typeIndex], remove());
+ }
+ else
+ {
+ return Object.class; //type erasure
+ }
+ }
+ }
+
+ public TypeVariableResolver add(Class<?> type)
+ {
+ return add(type, type.getGenericSuperclass());
+ }
+
+ public TypeVariableResolver add(Class<?> declaringClass, Type
assignment)
+ {
+ List<TypeVariableDeclaration> declarations = new
ArrayList<TypeVariableDeclaration>(this.declarations);
+ declarations.add(new TypeVariableDeclaration(declaringClass,
assignment));
+ return new TypeVariableResolver(declarations);
+ }
+
+ public TypeVariableResolver remove()
+ {
+ List<TypeVariableDeclaration> declarations = new
ArrayList<TypeVariableDeclaration>(this.declarations);
+ declarations.remove(declarations.size() - 1);
+ return new TypeVariableResolver(declarations);
+ }
+ }
+
+ /**
+ * A declaration of type variables along with its assignments
+ */
+ private static class TypeVariableDeclaration
+ {
+ private Class<?> declaringClass;
+ private Type assignment;
+
+ public TypeVariableDeclaration(Class<?> declaringClass, Type
assignment)
+ {
+ this.declaringClass = declaringClass;
+ this.assignment = assignment;
+ }
+
+ public Type getAssignment()
+ {
+ return assignment;
+ }
+
+ public TypeVariable<?>[] getDeclaredTypeParameters()
+ {
+ return declaringClass.getTypeParameters();
+ }
+ }
+
+ private static class TypeErasureException extends Exception
+ {
+ public TypeErasureException()
+ {
+ super("generic type information not available");
+ }
+ }
+}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
Wed Jul 10 22:48:58 2013
@@ -1058,16 +1058,7 @@ public final class WebBeansUtil
{
Type type = injectionPoint.getType();
- Class<?> candidateClazz = null;
- if(type instanceof Class)
- {
- candidateClazz = (Class<?>)type;
- }
- else if(type instanceof ParameterizedType)
- {
- ParameterizedType pt = (ParameterizedType)type;
- candidateClazz = (Class<?>)pt.getRawType();
- }
+ Class<?> candidateClazz = ClassUtil.getClass(type);
if(!candidateClazz.isAssignableFrom(Instance.class))
{
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java?rev=1502035&r1=1502034&r2=1502035&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
Wed Jul 10 22:48:58 2013
@@ -86,5 +86,4 @@ public class GenericDecoratorTest extend
DecoratedBean decoratedBean = getInstance(DecoratedBean.class);
Assert.assertTrue(decoratedBean.isDecoratorCalled());
}
-
}
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Bar.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.newtests.injection.generics;
+
+import java.util.List;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Typed;
+import javax.inject.Inject;
+
+@Typed
+public class Bar<A, B> {
+
+ @Inject
+ @GenericQualifier
+ private Baz<A> baz;
+
+ @Inject
+ @GenericQualifier
+ private A a;
+
+ @Inject
+ private Baz<List<B>> bBazList;
+ private A[] aArray;
+ private Baz<A> aBazEvent;
+ private A aObserverInjectionPoint;
+
+ @Inject
+ public void setAArray(A[] aArray) {
+ this.aArray = aArray;
+ }
+
+ public void observeBaz(@Observes Baz<A> baz, @GenericQualifier A a) {
+ this.aBazEvent = baz;
+ this.aObserverInjectionPoint = a;
+ }
+
+ public Baz<A> getBaz() {
+ return this.baz;
+ }
+
+ public Baz<List<B>> getBBazList() {
+ return this.bBazList;
+ }
+
+ public A getA() {
+ return this.a;
+ }
+
+ public A[] getAArray() {
+ return this.aArray;
+ }
+
+ public Baz<A> getABazEvent() {
+ return this.aBazEvent;
+ }
+
+ public A getAObserverInjectionPoint() {
+ return this.aObserverInjectionPoint;
+ }
+}
\ No newline at end of file
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BarVetoExtension.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.newtests.injection.generics;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+
+public class BarVetoExtension implements Extension {
+
+ public void vetoBar(@Observes ProcessAnnotatedType<?>
annotatedTypeEvent)
+ {
+ if
(annotatedTypeEvent.getAnnotatedType().getJavaClass().equals(Bar.class))
+ {
+ annotatedTypeEvent.veto();
+ }
+ }
+}
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/Baz.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.newtests.injection.generics;
+
+public class Baz<T> {
+
+}
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java?rev=1502035&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/generics/BazSubclass.java
Wed Jul 10 22:48:58 2013
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.webbeans.newtests.injection.generics;
+
+
+public class BazSubclass extends Baz<String> {
+
+ public BazSubclass(String string)
+ {
+ }
+}