You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rs...@apache.org on 2014/09/29 10:45:44 UTC
svn commit: r1628137 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/component/creation/
main/java/org/apache/webbeans/util/ test/java/org/apache/webbeans/test/util/
Author: rsandtner
Date: Mon Sep 29 08:45:43 2014
New Revision: 1628137
URL: http://svn.apache.org/r1628137
Log:
OWB-1012 implemented validation of producers
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.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/util/GenericsUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/util/GenericsUtilTest.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java?rev=1628137&r1=1628136&r2=1628137&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java Mon Sep 29 08:45:43 2014
@@ -18,14 +18,21 @@
*/
package org.apache.webbeans.component.creation;
+import javax.enterprise.context.Dependent;
import javax.enterprise.inject.spi.AnnotatedMember;
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanAttributes;
import javax.enterprise.inject.spi.DefinitionException;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
import org.apache.webbeans.component.AbstractProducerBean;
import org.apache.webbeans.component.InjectionTargetBean;
import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.GenericsUtil;
public abstract class AbstractProducerBeanBuilder<T, A extends AnnotatedMember<?>, P extends AbstractProducerBean<T>>
{
@@ -59,7 +66,27 @@ public abstract class AbstractProducerBe
*/
public void validate() throws DefinitionException
{
-
+ Type type = annotatedMember.getBaseType();
+ if (type instanceof GenericArrayType)
+ {
+ throw new DefinitionException("Produced Type must not be a GenericArrayType");
+ }
+ else if (ClassUtil.isParametrizedType(type))
+ {
+ if (GenericsUtil.containsWildcardType(type))
+ {
+ throw new DefinitionException("Produced type must not be a WildcardType");
+ }
+ else if (!Dependent.class.equals(beanAttributes.getScope()))
+ {
+
+ ParameterizedType parameterizedType = GenericsUtil.getParameterizedType(type);
+ if (GenericsUtil.containTypeVariable(parameterizedType.getActualTypeArguments()))
+ {
+ throw new DefinitionException("Produced ParametrizedType must be @Dependent-Scope");
+ }
+ }
+ }
}
protected abstract <X> P createBean(InjectionTargetBean<X> parent, Class<T> beanClass);
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=1628137&r1=1628136&r2=1628137&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 Mon Sep 29 08:45:43 2014
@@ -114,7 +114,11 @@ public class ProducerFieldBeansBuilder<T
ProducerFieldBeanBuilder<T, ProducerFieldBean<T>> producerFieldBeanCreator
= new ProducerFieldBeanBuilder<T, ProducerFieldBean<T>>(bean, annotatedField, beanAttributes);
ProducerFieldBean<T> producerFieldBean = producerFieldBeanCreator.getBean();
+
+ //X TODO validateProxyable returns the exception, throw the returned exception??
webBeansContext.getDeploymentValidationService().validateProxyable(producerFieldBean);
+ producerFieldBeanCreator.validate();
+
producerFieldBean.setProducerField(field);
webBeansContext.getWebBeansUtil().setBeanEnableFlagForProducerBean(bean, producerFieldBean, anns);
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=1628137&r1=1628136&r2=1628137&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 Mon Sep 29 08:45:43 2014
@@ -97,7 +97,9 @@ public class ProducerMethodBeansBuilder<
ProducerMethodBean<T> producerMethodBean = producerMethodBeanCreator.getBean();
+ //X TODO validateProxyable returns the exception, throw the returned exception??
webBeansContext.getDeploymentValidationService().validateProxyable(producerMethodBean);
+ producerMethodBeanCreator.validate();
if(specialize)
{
Modified: 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=1628137&r1=1628136&r2=1628137&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java Mon Sep 29 08:45:43 2014
@@ -454,7 +454,43 @@ public final class GenericsUtil
}
return false;
}
-
+
+ /**
+ *
+ * @param type to check
+ *
+ * @return {@code true} if the given type contains a {@link java.lang.reflect.WildcardType}
+ * {@code false} otherwise
+ */
+ public static boolean containsWildcardType(Type type)
+ {
+ if (!(type instanceof ParameterizedType))
+ {
+ return false;
+ }
+
+ for (Type typeArgument : getParameterizedType(type).getActualTypeArguments())
+ {
+ if (ClassUtil.isParametrizedType(typeArgument))
+ {
+ if (containsWildcardType(typeArgument))
+ {
+ return true;
+ }
+ }
+ else
+ {
+ if (ClassUtil.isWildCardType(typeArgument))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+
/**
* Resolves the actual type of the specified field for the type hierarchy specified by the given subclass
*/
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/util/GenericsUtilTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/util/GenericsUtilTest.java?rev=1628137&r1=1628136&r2=1628137&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/util/GenericsUtilTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/util/GenericsUtilTest.java Mon Sep 29 08:45:43 2014
@@ -58,6 +58,15 @@ public class GenericsUtilTest {
assertEquals(SubInterface.class, GenericsUtil.getRawType(subInterfaceType));
}
+ @Test
+ public void testContainsWildcardTypes() throws Exception
+ {
+ Assert.assertFalse(GenericsUtil.containsWildcardType(StringObject.class));
+ Assert.assertTrue(GenericsUtil.containsWildcardType(GenericNumberObject.class.getMethod("getObject").getGenericReturnType()));
+ Assert.assertFalse(GenericsUtil.containsWildcardType(GenericObject.class.getMethod("getObject").getGenericReturnType()));
+ }
+
+
public static abstract class AbstractObject<V> {
private V field;
@@ -73,10 +82,19 @@ public class GenericsUtilTest {
private static class GenericObject<T, V> extends AbstractObject<T> {
+ public GenericObject<T, V> getObject()
+ {
+ return new GenericObject<T, V>();
+ }
+
}
private static class GenericNumberObject<X, Y extends Number & Comparable<Integer>> extends AbstractObject<Y> {
+ public GenericNumberObject<?, ? extends Comparable<Integer>> getObject()
+ {
+ return new GenericNumberObject<X, Integer>();
+ }
}
private static class IntegerObject extends GenericNumberObject<String, Integer> {