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);


Reply via email to