You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2013/03/19 11:41:34 UTC
svn commit: r1458214 - in /openwebbeans/branches/owb_1.1.x/webbeans-impl/src:
main/java/org/apache/webbeans/util/
test/java/org/apache/webbeans/newtests/managed/generic/
Author: rmannibucau
Date: Tue Mar 19 10:41:34 2013
New Revision: 1458214
URL: http://svn.apache.org/r1458214
Log:
OWB-792 bacporting OWB-791 (multiple generics)
Added:
openwebbeans/branches/owb_1.1.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/generic/
openwebbeans/branches/owb_1.1.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/generic/GenericInjectionTest.java
Modified:
openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
Modified: openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=1458214&r1=1458213&r2=1458214&view=diff
==============================================================================
--- openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java (original)
+++ openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java Tue Mar 19 10:41:34 2013
@@ -782,48 +782,64 @@ public final class ClassUtil
{
Type requiredTypeArg = null;
Type beanTypeArg = null;
+ int ok = 0;
for(int i = 0; i< requiredTypeArgs.length;i++)
{
requiredTypeArg = requiredTypeArgs[i];
beanTypeArg = beanTypeArgs[i];
-
+
//Required type is parametrized and bean type is parametrized
if(ClassUtil.isParametrizedType(requiredTypeArg) && ClassUtil.isParametrizedType(beanTypeArg))
{
- return checkBeanAndRequiredTypeIsParametrized(beanTypeArg, requiredTypeArg);
+ if (checkBeanAndRequiredTypeIsParametrized(beanTypeArg, requiredTypeArg))
+ {
+ ok++;
+ }
}
//Required type is wildcard
else if(ClassUtil.isWildCardType(requiredTypeArg))
{
- return checkRequiredTypeIsWildCard(beanTypeArg, requiredTypeArg);
+ if (checkRequiredTypeIsWildCard(beanTypeArg, requiredTypeArg))
+ {
+ ok++;
+ }
}
//Required type is actual type and bean type is type variable
else if(requiredTypeArg instanceof Class && ClassUtil.isTypeVariable(beanTypeArg))
{
- return checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg, requiredTypeArg);
+ if (checkRequiredTypeIsClassAndBeanTypeIsVariable(beanTypeArg, requiredTypeArg))
+ {
+ ok++;
+ }
}
//Required type is Type variable and bean type is type variable
else if(ClassUtil.isTypeVariable(requiredTypeArg) && ClassUtil.isTypeVariable(beanTypeArg))
{
- return checkBeanTypeAndRequiredIsTypeVariable(beanTypeArg, requiredTypeArg);
- }
-
+ if ( checkBeanTypeAndRequiredIsTypeVariable(beanTypeArg, requiredTypeArg))
+ {
+ ok++;
+ }
+ }
+
//Both type is actual type
else if((beanTypeArg instanceof Class) && (requiredTypeArg instanceof Class))
{
if(isClassAssignable((Class<?>)requiredTypeArg,(Class<?>)beanTypeArg))
{
- return true;
+ ok++;
}
}
//Bean type is actual type and required type is type variable
else if((beanTypeArg instanceof Class) && (ClassUtil.isTypeVariable(requiredTypeArg)))
{
- return checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(beanTypeArg, requiredTypeArg);
+ if (checkRequiredTypeIsTypeVariableAndBeanTypeIsClass(beanTypeArg, requiredTypeArg))
+ {
+ ok++;
+ }
}
}
-
- return false;
+
+ return ok == requiredTypeArgs.length;
}
/**
Added: openwebbeans/branches/owb_1.1.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/generic/GenericInjectionTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/branches/owb_1.1.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/generic/GenericInjectionTest.java?rev=1458214&view=auto
==============================================================================
--- openwebbeans/branches/owb_1.1.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/generic/GenericInjectionTest.java (added)
+++ openwebbeans/branches/owb_1.1.x/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/generic/GenericInjectionTest.java Tue Mar 19 10:41:34 2013
@@ -0,0 +1,95 @@
+/*
+ * 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.managed.generic;
+
+import org.apache.webbeans.newtests.AbstractUnitTest;
+import org.junit.Test;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.inject.Inject;
+import java.lang.annotation.Annotation;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+
+import static org.junit.Assert.assertNotNull;
+
+public class GenericInjectionTest extends AbstractUnitTest
+{
+ @Test
+ public void testGenericInjection()
+ {
+ final Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
+ beanClasses.add(StringIntAddress.class);
+ beanClasses.add(AddressStringInt.class);
+ beanClasses.add(IntStringAddress.class);
+ beanClasses.add(Helper.class);
+
+ startContainer(beanClasses);
+
+ // will fail if generics are not handled properly
+ final Bean<Helper> bean = getBean(Helper.class);
+ final Helper helper = Helper.class.cast(getBeanManager().getReference(bean, Helper.class, null));
+ helper.checkAll();
+
+ shutDownContainer();
+ }
+
+ protected <T> Bean<T> getBean(Class<T> type, Annotation... qualifiers)
+ {
+ final Set<Bean<?>> beans = getBeanManager().getBeans(type, qualifiers);
+ return (Bean<T>) getBeanManager().resolve(beans);
+ }
+
+ public static interface InterfaceWithMultipleGenerics<A, B, C>
+ {
+ }
+
+ public static class StringIntAddress implements InterfaceWithMultipleGenerics<String, Integer, InetAddress>
+ {
+ }
+
+ public static class AddressStringInt implements InterfaceWithMultipleGenerics<Integer, InetAddress, String>
+ {
+ }
+
+ public static class IntStringAddress implements InterfaceWithMultipleGenerics<Integer, String, InetAddress>
+ {
+ }
+
+ public static class Helper
+ {
+ @Inject
+ private InterfaceWithMultipleGenerics<String, Integer, InetAddress> sia;
+
+ @Inject
+ private InterfaceWithMultipleGenerics<Integer, InetAddress, String> ias;
+
+ @Inject
+ private InterfaceWithMultipleGenerics<Integer, String, InetAddress> isa;
+
+ public void checkAll()
+ {
+ assertNotNull(sia);
+ assertNotNull(ias);
+ assertNotNull(isa);
+ }
+ }
+}