Author: struberg
Date: Fri Jan 11 11:40:17 2013
New Revision: 1431997

URL: http://svn.apache.org/viewvc?rev=1431997&view=rev
Log:
OWB-344 InterceptorBinding checks and scanninf

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.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/intercept/InterceptorUtil.java
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorBeanBuilderTest.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java?rev=1431997&r1=1431996&r2=1431997&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
 Fri Jan 11 11:40:17 2013
@@ -30,7 +30,6 @@ import java.util.Set;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.exception.WebBeansException;
-import org.apache.webbeans.util.Asserts;
 import org.apache.webbeans.util.ExceptionUtil;
 
 /**

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java?rev=1431997&r1=1431996&r2=1431997&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
 Fri Jan 11 11:40:17 2013
@@ -21,8 +21,12 @@ package org.apache.webbeans.component.cr
 
 import javax.enterprise.inject.spi.AnnotatedType;
 
+import java.lang.annotation.Annotation;
+
 import org.apache.webbeans.component.CdiInterceptorBean;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.util.ArrayUtil;
 
 /**
  * Bean builder for {@link org.apache.webbeans.component.InterceptorBean}s.
@@ -36,6 +40,7 @@ public class CdiInterceptorBeanBuilder<T
 
     public void defineCdiInterceptorRules()
     {
+        checkInterceptorConditions();
         defineInterceptorBindings();
         defineInterceptorRules();
 
@@ -48,7 +53,14 @@ public class CdiInterceptorBeanBuilder<T
 
     protected void defineInterceptorBindings()
     {
+        Annotation[] bindings = 
webBeansContext.getAnnotationManager().getInterceptorBindingMetaAnnotations(getAnnotated().getAnnotations());
+        if (bindings == null || bindings.length == 0)
+        {
+            throw new WebBeansConfigurationException("WebBeans Interceptor 
class : " + getBeanType()
+                    + " must have at least one @InterceptorBinding 
annotation");
+        }
 
+        getBean().setInterceptorBindings(ArrayUtil.asSet(bindings));
     }
 
     public CdiInterceptorBean<T> getBean()

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=1431997&r1=1431996&r2=1431997&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
 Fri Jan 11 11:40:17 2013
@@ -19,8 +19,15 @@
 package org.apache.webbeans.component.creation;
 
 import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedParameter;
+
+import java.util.List;
+import java.util.Set;
 
 import org.apache.webbeans.component.InterceptorBean;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
 
 
 /**
@@ -41,6 +48,24 @@ public abstract class InterceptorBeanBui
      */
     public abstract boolean isInterceptorEnabled();
 
+    protected void checkInterceptorConditions()
+    {
+        Set<AnnotatedMethod<? super T>> methods = getAnnotated().getMethods();
+        for(AnnotatedMethod method : methods)
+        {
+            List<AnnotatedParameter> parms = method.getParameters();
+            for (AnnotatedParameter parameter : parms)
+            {
+                if (parameter.isAnnotationPresent(Produces.class))
+                {
+                    throw new WebBeansConfigurationException("Interceptor 
class : " + getBeanType()
+                            + " can not have producer methods but it has one 
with name : "
+                            + method.getJavaMember().getName());
+                }
+            }
+        }
+    }
+
     protected void defineInterceptorRules()
     {
         defineInjectedMethods();

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java?rev=1431997&r1=1431996&r2=1431997&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
 Fri Jan 11 11:40:17 2013
@@ -366,11 +366,14 @@ public final class InterceptorUtil
                                                      + " must have at least 
one @InterceptorBinding annotation");
         }
 
-        checkLifecycleConditions(annotatedType, anns, "Lifecycle interceptor : 
" + annotatedType.getJavaClass().getName()
+        checkLifecycleConditions(annotatedType, annSet, "Lifecycle interceptor 
: " + annotatedType.getJavaClass().getName()
                                                       + " interceptor binding 
type must be defined as @Target{TYPE}");
     }
 
 
+    /**
+     * @deprecated moved to InteceptorBeanBuilder
+     */
     public void checkInterceptorConditions(AnnotatedType annotatedType)
     {
         Asserts.assertNotNull(annotatedType);
@@ -428,7 +431,7 @@ public final class InterceptorUtil
 
     }
 
-    public <T> void checkLifecycleConditions(AnnotatedType<T> annotatedType, 
Annotation[] annots, String errorMessage)
+    public <T> void checkLifecycleConditions(AnnotatedType<T> annotatedType, 
Set<Annotation> annots, String errorMessage)
     {
         if (isLifecycleMethodInterceptor(annotatedType) && 
!isBusinessMethodInterceptor(annotatedType))
         {

Modified: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorBeanBuilderTest.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorBeanBuilderTest.java?rev=1431997&r1=1431996&r2=1431997&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorBeanBuilderTest.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorBeanBuilderTest.java
 Fri Jan 11 11:40:17 2013
@@ -20,7 +20,7 @@ package org.apache.webbeans.newtests.int
 
 
 import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Interceptor;
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -52,6 +52,7 @@ public class InterceptorBeanBuilderTest 
         startContainer(beanClasses, beanXmls);
 
         {
+            // take an Interceptor class which is not listed in beans.xml and 
verify that is is not enabled
             AnnotatedType<SecureAndTransactionalInterceptor> annotatedType = 
getBeanManager().createAnnotatedType(SecureAndTransactionalInterceptor.class);
 
             CdiInterceptorBeanBuilder<SecureAndTransactionalInterceptor> ibb
@@ -65,8 +66,11 @@ public class InterceptorBeanBuilderTest 
             CdiInterceptorBeanBuilder<TransactionalInterceptor> ibb
                     = new 
CdiInterceptorBeanBuilder<TransactionalInterceptor>(getWebBeansContext(), 
annotatedType);
             ibb.defineCdiInterceptorRules();
-            Bean<TransactionalInterceptor> bean = ibb.getBean();
+            Interceptor<TransactionalInterceptor> bean = ibb.getBean();
             Assert.assertNotNull(bean);
+            Assert.assertNotNull(bean.getInterceptorBindings());
+            Assert.assertEquals(1, bean.getInterceptorBindings().size());
+
         }
 
         shutDownContainer();


Reply via email to