Author: arne
Date: Mon Jun 30 17:29:13 2014
New Revision: 1606843
URL: http://svn.apache.org/r1606843
Log:
OWB-846: Fixed interceptor overriding
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/resolution/InterceptorResolutionServiceTest.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1606843&r1=1606842&r2=1606843&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
Mon Jun 30 17:29:13 2014
@@ -561,9 +561,11 @@ public class InterceptorResolutionServic
boolean unproxyable = isUnproxyable(annotatedMethod);
- Set<Annotation> cummulatedInterceptorBindings = new
HashSet<Annotation>();
- cummulatedInterceptorBindings.addAll(
-
annotationManager.getInterceptorAnnotations(annotatedMethod.getAnnotations()));
+ Map<Class<? extends Annotation>, Annotation>
cummulatedInterceptorBindings = new HashMap<Class<? extends Annotation>,
Annotation>();
+ for (Annotation interceptorBinding:
annotationManager.getInterceptorAnnotations(annotatedMethod.getAnnotations()))
+ {
+
cummulatedInterceptorBindings.put(interceptorBinding.annotationType(),
interceptorBinding);
+ }
if (unproxyable && cummulatedInterceptorBindings.size() > 0)
{
@@ -579,7 +581,13 @@ public class InterceptorResolutionServic
return;
}
- cummulatedInterceptorBindings.addAll(classInterceptorBindings);
+ for (Annotation interceptorBinding: classInterceptorBindings)
+ {
+ if
(!cummulatedInterceptorBindings.containsKey(interceptorBinding.annotationType()))
+ {
+
cummulatedInterceptorBindings.put(interceptorBinding.annotationType(),
interceptorBinding);
+ }
+ }
if (cummulatedInterceptorBindings.size() == 0)
{
@@ -587,7 +595,7 @@ public class InterceptorResolutionServic
}
List<Interceptor<?>> methodInterceptors
- =
webBeansContext.getBeanManagerImpl().resolveInterceptors(interceptionType,
AnnotationUtil.asArray(cummulatedInterceptorBindings));
+ =
webBeansContext.getBeanManagerImpl().resolveInterceptors(interceptionType,
AnnotationUtil.asArray(cummulatedInterceptorBindings.values()));
methodInterceptorInfo.setCdiInterceptors(methodInterceptors);
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java?rev=1606843&r1=1606842&r2=1606843&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
Mon Jun 30 17:29:13 2014
@@ -23,6 +23,7 @@ import java.lang.reflect.AnnotatedElemen
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -589,7 +590,7 @@ public final class AnnotationUtil
return null;
}
- public static Annotation[] asArray(Set<Annotation> set)
+ public static Annotation[] asArray(Collection<Annotation> set)
{
if(set != null)
{
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/resolution/InterceptorResolutionServiceTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/resolution/InterceptorResolutionServiceTest.java?rev=1606843&r1=1606842&r2=1606843&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/resolution/InterceptorResolutionServiceTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/resolution/InterceptorResolutionServiceTest.java
Mon Jun 30 17:29:13 2014
@@ -25,6 +25,7 @@ import javax.enterprise.util.AnnotationL
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -163,10 +164,14 @@ public class InterceptorResolutionServic
Assert.assertEquals(0, interceptorInfo.getDecorators().size());
- Map<Method, BusinessMethodInterceptorInfo> methodInterceptorInfos =
interceptorInfo.getBusinessMethodsInfo();
+ Map<Method, BusinessMethodInterceptorInfo> methodInterceptorInfos =
new HashMap<Method,
BusinessMethodInterceptorInfo>(interceptorInfo.getBusinessMethodsInfo());
Assert.assertNotNull(methodInterceptorInfos);
Assert.assertEquals(8, methodInterceptorInfos.size());
+ Method methodWithEnhancedAction =
ClassMultiInterceptedClass.class.getMethod("methodWithEnhancedAction");
+ Assert.assertEquals(2,
methodInterceptorInfos.get(methodWithEnhancedAction).getCdiInterceptors().length);
+
+ methodInterceptorInfos.remove(methodWithEnhancedAction);
for (BusinessMethodInterceptorInfo mi :
methodInterceptorInfos.values())
{
Assert.assertEquals(3, mi.getCdiInterceptors().length);