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(