Author: rmannibucau
Date: Tue Jul  1 17:56:14 2014
New Revision: 1607153

URL: http://svn.apache.org/r1607153
Log:
event select(TypeLiteral) should validate there is no typevaraible

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/LazyInterceptorDefinedInjectionTarget.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
    openwebbeans/trunk/webbeans-tck/testng-dev.xml

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java?rev=1607153&r1=1607152&r2=1607153&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventMetadataImpl.java
 Tue Jul  1 17:56:14 2014
@@ -95,9 +95,10 @@ public class EventMetadataImpl implement
     
     public EventMetadata select(TypeLiteral<?> subtype, Annotation... bindings)
     {
+        webBeansContext.getWebBeansUtil().checkTypeVariables(subtype);
         return select(subtype.getType(), bindings);
     }
-    
+
     public EventMetadata select(Type subtype, Annotation... bindings)
     {
         Set<Annotation> newQualifiers = ArrayUtil.asSet(bindings);

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/LazyInterceptorDefinedInjectionTarget.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/LazyInterceptorDefinedInjectionTarget.java?rev=1607153&r1=1607152&r2=1607153&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/LazyInterceptorDefinedInjectionTarget.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/LazyInterceptorDefinedInjectionTarget.java
 Tue Jul  1 17:56:14 2014
@@ -31,8 +31,6 @@ import java.util.Set;
 
 public class LazyInterceptorDefinedInjectionTarget<T> extends 
InjectionTargetImpl<T>
 {
-    private volatile boolean interceptorsDefined;
-
     public LazyInterceptorDefinedInjectionTarget(final AnnotatedType<T> 
annotatedType,
                                                  final Set<InjectionPoint> 
injectionPoints,
                                                  final WebBeansContext 
webBeansContext,
@@ -40,27 +38,18 @@ public class LazyInterceptorDefinedInjec
                                                  final 
List<AnnotatedMethod<?>> preDestroyMethods)
     {
         super(annotatedType, injectionPoints, webBeansContext, 
postConstructMethods, preDestroyMethods);
-        interceptorsDefined = false;
     }
 
-    @Override
+    @Override // TODO: this is not thread safe
     public T produce(final CreationalContext<T> creationalContext)
     {
+        interceptorInfo = null;
+        proxyClass = null;
         final CreationalContextImpl<T> creationalContextImpl = 
(CreationalContextImpl<T>) creationalContext;
-        if (interceptorInfo == null && !interceptorsDefined)
+        final Bean<T> bean = creationalContextImpl.getBean();
+        if (bean != null)
         {
-            final Bean<T> bean = creationalContextImpl.getBean();
-            if (bean != null)
-            {
-                synchronized (this)
-                {
-                    if (!interceptorsDefined)
-                    {
-                        defineInterceptorStack(bean, annotatedType, 
webBeansContext);
-                        interceptorsDefined = true;
-                    }
-                }
-            }
+            defineInterceptorStack(bean, annotatedType, webBeansContext);
         }
         return super.produce(creationalContext);
     }

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=1607153&r1=1607152&r2=1607153&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
 Tue Jul  1 17:56:14 2014
@@ -86,6 +86,7 @@ import javax.enterprise.inject.IllegalPr
 import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.Specializes;
 import javax.enterprise.inject.spi.*;
+import javax.enterprise.util.TypeLiteral;
 import javax.inject.Inject;
 import javax.inject.Named;
 
@@ -107,6 +108,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 import java.util.logging.Logger;
 
 /**
@@ -118,6 +121,7 @@ public final class WebBeansUtil
     private static final Logger logger = 
WebBeansLoggerFacade.getLogger(WebBeansUtil.class);
 
     private final WebBeansContext webBeansContext;
+    private final ConcurrentMap<Type, Boolean> noTypeVariables = new 
ConcurrentHashMap<Type, Boolean>();
 
     public WebBeansUtil(WebBeansContext webBeansContext)
     {
@@ -1577,4 +1581,31 @@ public final class WebBeansUtil
             }
         }
     }
+
+    public void checkTypeVariables(final TypeLiteral<?> subtype)
+    {
+        final Type t = subtype.getType();
+        Boolean result = noTypeVariables.get(t);
+        if (result != null)
+        {
+            if (!result)
+            {
+                throw new IllegalArgumentException(t + " has a TypeVariable 
which is forbidden");
+            }
+            return;
+        }
+
+        if (ParameterizedType.class.isInstance(t))
+        {
+            for (final Type arg : 
ParameterizedType.class.cast(t).getActualTypeArguments())
+            {
+                if (TypeVariable.class.isInstance(arg))
+                {
+                    noTypeVariables.putIfAbsent(t, false);
+                    throw new IllegalArgumentException(arg + " is a 
TypeVariable which is forbidden");
+                }
+            }
+        }
+        noTypeVariables.putIfAbsent(t, true);
+    }
 }

Modified: openwebbeans/trunk/webbeans-tck/testng-dev.xml
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-tck/testng-dev.xml?rev=1607153&r1=1607152&r2=1607153&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-tck/testng-dev.xml (original)
+++ openwebbeans/trunk/webbeans-tck/testng-dev.xml Tue Jul  1 17:56:14 2014
@@ -18,8 +18,9 @@
 <suite name="JSR-346-TCK" verbose="2" configfailurepolicy="continue">
   <test name="JSR-346 TCK">
     <classes>
+      <class name="org.jboss.cdi.tck.tests.event.select.SelectEventTest" />
       <class
-          name="org.jboss.cdi.tck.tests.event.select.SelectEventTest" />
+          
name="org.jboss.cdi.tck.tests.event.parameterized.ParameterizedEventTest" />
     </classes>
     <groups>
       <run>


Reply via email to