You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2014/09/12 08:02:56 UTC

svn commit: r1624455 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation: AbstractBeanBuilder.java CdiInterceptorBeanBuilder.java DecoratorBeanBuilder.java

Author: struberg
Date: Fri Sep 12 06:02:56 2014
New Revision: 1624455

URL: http://svn.apache.org/r1624455
Log:
OWB-1005 fix check for invalid @Observes on decorators and interceptors

Txs to Reinhard Sandtner (rsandtner) for the patch!

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.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/DecoratorBeanBuilder.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java?rev=1624455&r1=1624454&r2=1624455&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java Fri Sep 12 06:02:56 2014
@@ -18,12 +18,14 @@
  */
 package org.apache.webbeans.component.creation;
 
+import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Disposes;
 import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.DefinitionException;
 import java.util.Collection;
 import java.util.Set;
 
@@ -103,14 +105,22 @@ public abstract class AbstractBeanBuilde
      * Certain beans like CDI Interceptors and Decorators
      * are not allowed to define producer methods.
      */
-    protected void validateNoProducerMethod(AnnotatedType<T> annotatedType)
+    protected void validateNoProducerOrObserverMethod(AnnotatedType<T> annotatedType)
     {
         Set<AnnotatedMethod<? super T>> annotatedMethods = annotatedType.getMethods();
         for (final AnnotatedMethod<?> annotatedMethod : annotatedMethods)
         {
             if (annotatedMethod.isAnnotationPresent(Produces.class))
             {
-                throw new WebBeansConfigurationException("This class must not have a @Produces method" + annotatedMethod.getJavaMember());
+                throw new DefinitionException("This class must not have a @Produces method" + annotatedMethod.getJavaMember());
+            }
+
+            for (AnnotatedParameter<?> parameter : annotatedMethod.getParameters())
+            {
+                if (parameter.isAnnotationPresent(Observes.class))
+                {
+                    throw new DefinitionException("This class must not have a @Observes method " + annotatedMethod.getJavaMember());
+                }
             }
         }
 
@@ -119,7 +129,7 @@ public abstract class AbstractBeanBuilde
         {
             if (annotatedField.isAnnotationPresent(Produces.class))
             {
-                throw new WebBeansConfigurationException("This class must not have a @Produces field" + annotatedField.getJavaMember());
+                throw new DefinitionException("This class must not have a @Produces field" + annotatedField.getJavaMember());
             }
         }
     }

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=1624455&r1=1624454&r2=1624455&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 Sep 12 06:02:56 2014
@@ -53,8 +53,8 @@ public class CdiInterceptorBeanBuilder<T
         defineInterceptorMethods();
         defineInterceptorBindings();
 
-        // make sure that CDI interceptors do not have any Producer methods
-        validateNoProducerMethod(annotatedType);
+        // make sure that CDI interceptors do not have any Producer methods or a method with @Observes
+        validateNoProducerOrObserverMethod(annotatedType);
 
         // make sure that CDI interceptors do not have a Disposes method
         validateNoDisposerWithoutProducer(webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType),

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=1624455&r1=1624454&r2=1624455&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java Fri Sep 12 06:02:56 2014
@@ -131,8 +131,8 @@ public class DecoratorBeanBuilder<T> ext
             logger.log(Level.FINE, "Configuring decorator class : [{0}]", annotatedType.getJavaClass());
         }
 
-        // make sure that CDI Decorators do not have any Producer methods
-        validateNoProducerMethod(annotatedType);
+        // make sure that CDI Decorators do not have any Producer methods or a method with @Observes
+        validateNoProducerOrObserverMethod(annotatedType);
 
         // make sure that CDI Decorator do not have a Disposes method
         validateNoDisposerWithoutProducer(