You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2009/06/24 22:26:08 UTC
svn commit: r788172 - in /incubator/openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/container/
main/java/org/apache/webbeans/inject/impl/
main/java/org/apache/webbeans/util/
test/java/org/apache/webbeans/test/component/inject/parame...
Author: gerdogdu
Date: Wed Jun 24 20:26:08 2009
New Revision: 788172
URL: http://svn.apache.org/viewvc?rev=788172&view=rev
Log:
Adding Parameterized Resolution Utility. See Specification Chapter 5.3.3
Added:
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Dao.java (with props)
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Persistent.java (with props)
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/User.java (with props)
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/UserDao.java (with props)
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/WithTypeVariable.java (with props)
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/GenericClassTest.java (with props)
Modified:
incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java?rev=788172&r1=788171&r2=788172&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java Wed Jun 24 20:26:08 2009
@@ -223,6 +223,15 @@
return resolvedComponents;
}
+ /**
+ * Resolution by type.
+ *
+ * @param <T> bean type info
+ * @param apiType injection point api type
+ * @param actualTypeArguments actual type arguments if parameterized type
+ * @param binding binding type of the injection point
+ * @return set of resolved beans
+ */
public <T> Set<Bean<T>> implResolveByType(Class<?> apiType, Type[] actualTypeArguments, Annotation... binding)
{
Asserts.assertNotNull(apiType, "apiType parameter can not be null");
@@ -279,6 +288,7 @@
if (actualTypeArguments.length > 0)
{
Type[] actualArgs = null;
+
if (ClassUtil.isAssignable(apiType, componentApiType))
{
if (ProducerComponentImpl.class.isAssignableFrom(component.getClass()))
Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=788172&r1=788171&r2=788172&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java Wed Jun 24 20:26:08 2009
@@ -28,6 +28,9 @@
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.InjectionPoint;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.util.ClassUtil;
+
class InjectionPointImpl implements InjectionPoint
{
private Set<Annotation> bindingAnnotations = new HashSet<Annotation>();
@@ -42,6 +45,12 @@
InjectionPointImpl(Bean<?> ownerBean, Type type, Member member)
{
+ //Check for injection point type variable
+ if(ClassUtil.isTypeVariable(type))
+ {
+ throw new WebBeansConfigurationException("Injection point in bean : " + ownerBean + " can not define Type Variable generic type");
+ }
+
this.ownerBean = ownerBean;
this.injectionMember = member;
this.injectionType = type;
Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=788172&r1=788171&r2=788172&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java Wed Jun 24 20:26:08 2009
@@ -726,28 +726,64 @@
return true;
}
- public static boolean isAssignable(Type lhs, Type rhs)
+ public static boolean isAssignable(Type beanType, Type requiredType)
{
- Asserts.assertNotNull(lhs, "lhs parameter can not be null");
- Asserts.assertNotNull(rhs, "rhs parameter can not be null");
+ Asserts.assertNotNull(beanType, "lhs parameter can not be null");
+ Asserts.assertNotNull(requiredType, "rhs parameter can not be null");
- if (lhs instanceof ParameterizedType && rhs instanceof ParameterizedType)
+ if (beanType instanceof ParameterizedType && requiredType instanceof ParameterizedType)
{
- return isAssignable((ParameterizedType) lhs, (ParameterizedType) rhs);
+ return isAssignableForParametrized((ParameterizedType) beanType, (ParameterizedType) requiredType);
}
- else
+ else if (beanType instanceof Class && requiredType instanceof Class)
{
- if (lhs instanceof Class && rhs instanceof Class)
- {
- return isAssignable((Class) lhs, (Class) rhs);
- }
- else
+ return isAssignable((Class) beanType, (Class) requiredType);
+ }
+ else if(beanType instanceof ParameterizedType && requiredType instanceof Class)
+ {
+ boolean ok = true;
+ Type[] beanTypeArgs = ((ParameterizedType)beanType).getActualTypeArguments();
+ for(Type actual : beanTypeArgs)
{
- return false;
+ if(!ClassUtil.isWildCardType(actual))
+ {
+ if(actual instanceof Class)
+ {
+ Class<?> clazz = (Class<?>)actual;
+ if(clazz.equals(Object.class))
+ {
+ continue;
+ }
+ else
+ {
+ ok = false;
+ break;
+ }
+ }
+ else
+ {
+ ok = false;
+ break;
+ }
+ }
}
+
+ return ok;
+ }
+ else
+ {
+ return false;
}
}
+ /**
+ * Returns true if rhs is assignable type
+ * to the lhs, false otherwise.
+ *
+ * @param lhs left hand side class
+ * @param rhs right hand side class
+ * @return true if rhs is assignable to lhs
+ */
public static boolean isAssignable(Class<?> lhs, Class<?> rhs)
{
Asserts.assertNotNull(lhs, "lhs parameter can not be null");
@@ -761,25 +797,207 @@
return false;
}
- public static boolean isAssignableForParametrized(ParameterizedType lhs, ParameterizedType rhs)
+ /**
+ * Returns true if given bean's api type is injectable to
+ * injection point required type.
+ *
+ * @param beanType bean parametrized api type
+ * @param requiredType injection point parametrized api type
+ * @return if injection is possible false otherwise
+ */
+ public static boolean isAssignableForParametrized(ParameterizedType beanType, ParameterizedType requiredType)
{
- Class<?> rowLhs = (Class<?>) lhs.getRawType();
- Class<?> rowRhs = (Class<?>) rhs.getRawType();
+ Class<?> beanRawType = (Class<?>) beanType.getRawType();
+ Class<?> requiredRawType = (Class<?>) requiredType.getRawType();
- if (isAssignable(rowLhs, rowRhs))
+ if (ClassUtil.isAssignable(requiredRawType,beanRawType))
{
- Type[] lhsArgs = lhs.getActualTypeArguments();
- Type[] rhsArgs = rhs.getActualTypeArguments();
+ //Bean api type actual type arguments
+ Type[] beanTypeArgs = beanType.getActualTypeArguments();
+
+ //Injection point type actual arguments
+ Type[] requiredTypeArgs = requiredType.getActualTypeArguments();
+
+ if(beanTypeArgs.length != requiredTypeArgs.length)
+ {
+ return false;
+ }
+ else
+ {
+ return isAssignableForParametrizedCheckArguments(beanTypeArgs, requiredTypeArgs);
+ }
+ }
- if (Arrays.equals(lhsArgs,rhsArgs))
+ return false;
+ }
+
+ private static boolean isAssignableForParametrizedCheckArguments(Type[] beanTypeArgs, Type[] requiredTypeArgs)
+ {
+ Type requiredTypeArg = null;
+ Type beanTypeArg = null;
+ for(int i = 0; i< requiredTypeArgs.length;i++)
+ {
+ requiredTypeArg = requiredTypeArgs[i];
+ beanTypeArg = beanTypeArgs[i];
+
+ //Required type is parametrized
+ if(ClassUtil.isParametrizedType(requiredTypeArg) && ClassUtil.isParametrizedType(beanTypeArg))
+ {
+ return check1(beanTypeArg, requiredTypeArg);
+ }
+ //Required type is wildcard
+ else if(ClassUtil.isWildCardType(requiredTypeArg))
+ {
+ return check2(beanTypeArg, requiredTypeArg);
+ }
+ //Required type is actual type
+ else if(requiredTypeArg instanceof Class && ClassUtil.isTypeVariable(beanTypeArg))
+ {
+ return check3(beanTypeArg, requiredTypeArg);
+ }
+ //Required type is Type variable
+ else if(ClassUtil.isTypeVariable(requiredTypeArg) && ClassUtil.isTypeVariable(beanTypeArg))
+ {
+ return check4(beanTypeArg, requiredTypeArg);
+ }
+ }
+
+ return false;
+ }
+
+ private static boolean check1(Type beanTypeArg, Type requiredTypeArg)
+ {
+ ParameterizedType ptRequiredTypeArg = (ParameterizedType)requiredTypeArg;
+ ParameterizedType ptBeanTypeArg = (ParameterizedType)beanTypeArg;
+
+ //Equal raw types
+ if(ptRequiredTypeArg.getRawType().equals(ptBeanTypeArg.getRawType()))
+ {
+ //Check arguments
+ Type[] actualArgsRequiredType = ptRequiredTypeArg.getActualTypeArguments();
+ Type[] actualArgsBeanType = ptRequiredTypeArg.getActualTypeArguments();
+
+ if(actualArgsRequiredType.length > 0 && actualArgsBeanType.length == actualArgsRequiredType.length)
+ {
+ return isAssignableForParametrizedCheckArguments(actualArgsBeanType, actualArgsRequiredType);
+ }
+ else
{
return true;
}
}
+
+ return false;
+ }
+
+ private static boolean check2(Type beanTypeArg, Type requiredTypeArg)
+ {
+ WildcardType wctRequiredTypeArg = (WildcardType)requiredTypeArg;
+ Type upperBoundRequiredTypeArg = wctRequiredTypeArg.getUpperBounds()[0];
+ Type[] lowerBoundRequiredTypeArgs = wctRequiredTypeArg.getLowerBounds();
+
+ if(beanTypeArg instanceof Class)
+ {
+ Class<?> clazzBeanTypeArg = (Class<?>)beanTypeArg;
+ if(upperBoundRequiredTypeArg instanceof Class)
+ {
+ Class<?> clazzUpperBoundTypeArg = (Class<?>)upperBoundRequiredTypeArg;
+ if(clazzUpperBoundTypeArg.isAssignableFrom(clazzBeanTypeArg))
+ {
+ if(lowerBoundRequiredTypeArgs.length > 0 && lowerBoundRequiredTypeArgs[0] instanceof Class)
+ {
+ Class<?> clazzLowerBoundTypeArg = (Class<?>)lowerBoundRequiredTypeArgs[0];
+ if(clazzBeanTypeArg.isAssignableFrom(clazzLowerBoundTypeArg))
+ {
+ return true;
+ }
+ }
+ else
+ {
+ return true;
+ }
+
+ }
+ }
+ }
+ else if(ClassUtil.isTypeVariable(beanTypeArg))
+ {
+ TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
+ Type tvBound = tvBeanTypeArg.getBounds()[0];
+
+ if(tvBound instanceof Class)
+ {
+ Class<?> clazzTvBound = (Class<?>)tvBound;
+
+ if(upperBoundRequiredTypeArg instanceof Class)
+ {
+ Class<?> clazzUpperBoundTypeArg = (Class<?>)upperBoundRequiredTypeArg;
+ if(clazzUpperBoundTypeArg.isAssignableFrom(clazzTvBound))
+ {
+ if(lowerBoundRequiredTypeArgs.length > 0 && lowerBoundRequiredTypeArgs[0] instanceof Class)
+ {
+ Class<?> clazzLowerBoundTypeArg = (Class<?>)lowerBoundRequiredTypeArgs[0];
+ if(clazzTvBound.isAssignableFrom(clazzLowerBoundTypeArg))
+ {
+ return true;
+ }
+ }
+ else
+ {
+ return true;
+ }
+
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ private static boolean check3(Type beanTypeArg, Type requiredTypeArg)
+ {
+ Class<?> clazzRequiredType = (Class<?>)requiredTypeArg;
+
+ TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
+ Type tvBound = tvBeanTypeArg.getBounds()[0];
+
+ if(tvBound instanceof Class)
+ {
+ Class<?> clazzTvBound = (Class<?>)tvBound;
+
+ if(clazzRequiredType.isAssignableFrom(clazzTvBound))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ private static boolean check4(Type beanTypeArg, Type requiredTypeArg)
+ {
+ TypeVariable<?> tvBeanTypeArg = (TypeVariable<?>)beanTypeArg;
+ Type tvBeanBound = tvBeanTypeArg.getBounds()[0];
+
+ TypeVariable<?> tvRequiredTypeArg = (TypeVariable<?>)requiredTypeArg;
+ Type tvRequiredBound = tvRequiredTypeArg.getBounds()[0];
+
+ if(tvBeanBound instanceof Class && tvRequiredBound instanceof Class)
+ {
+ Class<?> clazzTvBeanBound = (Class<?>)tvBeanBound;
+ Class<?> clazzTvRequiredBound = (Class<?>)tvRequiredBound;
+
+ if(clazzTvRequiredBound.isAssignableFrom(clazzTvBeanBound))
+ {
+ return true;
+ }
+ }
+
return false;
}
+
public static boolean classHasFieldWithName(Class<?> clazz, String fieldName)
{
Asserts.nullCheckForClass(clazz);
@@ -1460,4 +1678,6 @@
return getRootException(throwable.getCause());
}
}
+
+
}
Added: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Dao.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Dao.java?rev=788172&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Dao.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Dao.java Wed Jun 24 20:26:08 2009
@@ -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.test.component.inject.parametrized;
+
+public class Dao<T extends Persistent>
+{
+ public Dao<T> t;
+
+ public Dao<?> check22;
+
+ public Dao<? extends Persistent> check22WithBound;
+
+ public Dao raw;
+
+
+}
Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Dao.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Persistent.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Persistent.java?rev=788172&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Persistent.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Persistent.java Wed Jun 24 20:26:08 2009
@@ -0,0 +1,19 @@
+/*
+ * 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.test.component.inject.parametrized;
+
+public class Persistent
+{
+
+}
Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/Persistent.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/User.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/User.java?rev=788172&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/User.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/User.java Wed Jun 24 20:26:08 2009
@@ -0,0 +1,19 @@
+/*
+ * 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.test.component.inject.parametrized;
+
+public class User extends Persistent
+{
+
+}
Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/User.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/UserDao.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/UserDao.java?rev=788172&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/UserDao.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/UserDao.java Wed Jun 24 20:26:08 2009
@@ -0,0 +1,24 @@
+/*
+ * 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.test.component.inject.parametrized;
+
+public class UserDao extends Dao<User>
+{
+
+ public Dao<User> field1;
+ public Dao<?> field2;
+ public Dao<? extends Persistent> field3;
+ public Dao<? extends User> field4;
+
+}
Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/UserDao.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/WithTypeVariable.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/WithTypeVariable.java?rev=788172&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/WithTypeVariable.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/WithTypeVariable.java Wed Jun 24 20:26:08 2009
@@ -0,0 +1,21 @@
+/*
+ * 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.test.component.inject.parametrized;
+
+public class WithTypeVariable<X extends Persistent>
+{
+ public Dao<X> check4;
+
+
+}
Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/inject/parametrized/WithTypeVariable.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/GenericClassTest.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/GenericClassTest.java?rev=788172&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/GenericClassTest.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/GenericClassTest.java Wed Jun 24 20:26:08 2009
@@ -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.test.unittests.inject.parametrized;
+
+import java.lang.reflect.Field;
+
+import org.apache.webbeans.test.component.inject.parametrized.Dao;
+import org.apache.webbeans.test.component.inject.parametrized.UserDao;
+import org.apache.webbeans.test.component.inject.parametrized.WithTypeVariable;
+import org.apache.webbeans.test.servlet.TestContext;
+import org.apache.webbeans.util.ClassUtil;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class GenericClassTest extends TestContext
+{
+ public GenericClassTest()
+ {
+ super(GenericClassTest.class.getName());
+ }
+
+ @Test
+ public void testGenericClasses()
+ {
+ try
+ {
+ Field t = Dao.class.getField("t");
+ Field raw = Dao.class.getField("raw");
+ Field check22 = Dao.class.getField("check22");
+ Field check22Bound = Dao.class.getField("check22WithBound");
+ Field check4 = WithTypeVariable.class.getField("check4");
+
+ Assert.assertFalse(ClassUtil.isAssignable(t.getGenericType() , raw.getGenericType()));
+ Assert.assertTrue(ClassUtil.isAssignable(t.getGenericType() , check4.getGenericType()));
+ Assert.assertTrue(ClassUtil.isAssignable(t.getGenericType() , check22.getGenericType()));
+ Assert.assertTrue(ClassUtil.isAssignable(t.getGenericType() , check22Bound.getGenericType()));
+
+ }catch(Exception e)
+ {
+ e.printStackTrace();
+ fail("testGenericClasses");
+ }
+ }
+
+ @Test
+ public void testGenericClasses2()
+ {
+ try
+ {
+ Field f1 = UserDao.class.getField("field1");
+ Field f2 = UserDao.class.getField("field2");
+ Field f3 = UserDao.class.getField("field3");
+ Field f4 = UserDao.class.getField("field4");
+
+ Assert.assertTrue(ClassUtil.isAssignable(f1.getGenericType() , f2.getGenericType()));
+ Assert.assertTrue(ClassUtil.isAssignable(f1.getGenericType() , f3.getGenericType()));
+ Assert.assertTrue(ClassUtil.isAssignable(f1.getGenericType() , f4.getGenericType()));
+
+ }catch(Exception e)
+ {
+ e.printStackTrace();
+ fail("testGenericClasses");
+ }
+ }
+
+}
Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/parametrized/GenericClassTest.java
------------------------------------------------------------------------------
svn:eol-style = native