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 2013/01/06 19:35:35 UTC

svn commit: r1429565 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/annotation/ main/java/org/apache/webbeans/component/creation/ main/java/org/apache/webbeans/container/ main/java/org/apache/webbeans/decorator/ main/java/org...

Author: struberg
Date: Sun Jan  6 18:35:35 2013
New Revision: 1429565

URL: http://svn.apache.org/viewvc?rev=1429565&view=rev
Log:
OWB-344 add Decorator method resolution

Added:
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/DecoratedClass.java
      - copied, changed from r1429558, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java
Removed:
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassAndMethodInterceptedClass.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/NonInterceptedClass.java
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolution.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.java
    openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.xml

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java Sun Jan  6 18:35:35 2013
@@ -168,7 +168,7 @@ public final class AnnotationManager
      */
     public Annotation[] getInterceptorBindingMetaAnnotations(Set<Annotation> anns)
     {
-        return getInterceptorBindingMetaAnnotations(AnnotationUtil.asSet(anns));
+        return getInterceptorBindingMetaAnnotations(AnnotationUtil.asArray(anns));
     }
 
     /**
@@ -241,7 +241,7 @@ public final class AnnotationManager
         {
             if(parameter.isAnnotationPresent(clazz))
             {
-                Annotation[] anns = AnnotationUtil.asSet(parameter.getAnnotations());
+                Annotation[] anns = AnnotationUtil.asArray(parameter.getAnnotations());
                 for(Annotation ann : anns)
                 {
                     if(isQualifierAnnotation(ann.annotationType()))

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java Sun Jan  6 18:35:35 2013
@@ -122,7 +122,7 @@ public class AbstractBeanCreator<T>
 
     public void defineName(String name)
     {
-        Annotation[] anns = AnnotationUtil.asSet(getAnnotated().getAnnotations());
+        Annotation[] anns = AnnotationUtil.asArray(getAnnotated().getAnnotations());
         Named nameAnnot = null;
         boolean isDefault = false;
         for (Annotation ann : anns)
@@ -168,7 +168,7 @@ public class AbstractBeanCreator<T>
      */
     public void defineQualifiers()
     {
-        Annotation[] annotations = AnnotationUtil.asSet(annotated.getAnnotations());
+        Annotation[] annotations = AnnotationUtil.asArray(annotated.getAnnotations());
         final AnnotationManager annotationManager = webBeansContext.getAnnotationManager();
 
         for (Annotation annotation : annotations)
@@ -249,7 +249,7 @@ public class AbstractBeanCreator<T>
      */
     public void defineScopeType(String errorMessage, boolean allowLazyInit)
     {
-        Annotation[] annotations = AnnotationUtil.asSet(annotated.getAnnotations());
+        Annotation[] annotations = AnnotationUtil.asArray(annotated.getAnnotations());
         boolean found = false;
 
         List<ExternalScope> additionalScopes = webBeansContext.getBeanManagerImpl().getAdditionalScopes();
@@ -461,7 +461,7 @@ public class AbstractBeanCreator<T>
      */
     public void defineStereoTypes()
     {
-        Annotation[] anns = AnnotationUtil.asSet(annotated.getAnnotations());
+        Annotation[] anns = AnnotationUtil.asArray(annotated.getAnnotations());
         final AnnotationManager annotationManager = webBeansContext.getAnnotationManager();
         if (annotationManager.hasStereoTypeMetaAnnotation(anns))
         {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java Sun Jan  6 18:35:35 2013
@@ -231,7 +231,7 @@ public abstract class AbstractInjecionTa
             }
             
             Field field = annotatedField.getJavaMember();
-            Annotation[] anns = AnnotationUtil.asSet(annotatedField.getAnnotations());
+            Annotation[] anns = AnnotationUtil.asArray(annotatedField.getAnnotations());
             if(Modifier.isPublic(field.getModifiers()))
             {
                 if(!getBean().getScope().equals(Dependent.class))
@@ -324,7 +324,7 @@ public abstract class AbstractInjecionTa
         for (AnnotatedParameter<T> annotatedParameter : annotatedParameters)
         {
             annotationManager.checkForNewQualifierForDeployment(annotatedParameter.getBaseType(), annotatedMethod.getDeclaringType().getJavaClass(),
-                    method.getName(), AnnotationUtil.asSet(annotatedParameter.getAnnotations()));
+                    method.getName(), AnnotationUtil.asArray(annotatedParameter.getAnnotations()));
 
             if(annotatedParameter.isAnnotationPresent(Disposes.class) ||
                     annotatedParameter.isAnnotationPresent(Observes.class))
@@ -444,7 +444,7 @@ public abstract class AbstractInjecionTa
                     }
                 }
                 
-                Annotation[] anns = AnnotationUtil.asSet(annotatedField.getAnnotations());
+                Annotation[] anns = AnnotationUtil.asArray(annotatedField.getAnnotations());
                 Field field = annotatedField.getJavaMember();
                 
                 //Producer field for resource
@@ -558,7 +558,7 @@ public abstract class AbstractInjecionTa
                 producerMethodBeanCreator.defineStereoTypes();
                 webBeansContext.getWebBeansUtil().setBeanEnableFlagForProducerBean(getBean(),
                                                                                    producerMethodBean,
-                                                                                   AnnotationUtil.asSet(annotatedMethod.getAnnotations()));
+                                                                                   AnnotationUtil.asArray(annotatedMethod.getAnnotations()));
 
                 if (producerMethodBean.getReturnType().isArray())
                 {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Sun Jan  6 18:35:35 2013
@@ -927,7 +927,7 @@ public class BeanManagerImpl implements 
         // check for InjectionPoint injection
         if (rawType.equals(InjectionPoint.class))
         {
-            if (AnnotationUtil.hasAnnotation(AnnotationUtil.asSet(injectionPoint.getQualifiers()), Default.class))
+            if (AnnotationUtil.hasAnnotation(AnnotationUtil.asArray(injectionPoint.getQualifiers()), Default.class))
             {
                 if (!bean.getScope().equals(Dependent.class))
                 {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java Sun Jan  6 18:35:35 2013
@@ -175,7 +175,7 @@ public final class WebBeansDecoratorConf
         }
     }
 
-    public static Set<Decorator<?>> findDeployedWebBeansDecorator(BeanManagerImpl beanManagerImpl, Set<Type> apiType, Annotation... anns)
+    public static Set<Decorator<?>> findDeployedWebBeansDecorator(BeanManagerImpl beanManagerImpl, Set<Type> apiTypes, Annotation... anns)
     {
         Set<Decorator<?>> set = new HashSet<Decorator<?>>();
 
@@ -199,7 +199,7 @@ public final class WebBeansDecoratorConf
         {
             decorator = (WebBeansDecorator<?>) it.next();
 
-            if (decorator.isDecoratorMatch(apiType, listAnnot))
+            if (decorator.isDecoratorMatch(apiTypes, listAnnot))
             {
                 set.add(decorator);
             }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java Sun Jan  6 18:35:35 2013
@@ -455,7 +455,7 @@ public class ObserverMethodImpl<T> imple
                 //Get parameter annotations
                 Annotation[] bindingTypes =
                     annotationManager.getQualifierAnnotations(AnnotationUtil.
-                            asSet(parameter.getAnnotations()));
+                            asArray(parameter.getAnnotations()));
 
                 InjectionPoint point = InjectionPointFactory.getPartialInjectionPoint(bean, parameter.getBaseType(),
                         parameter.getDeclaringCallable().getJavaMember(), parameter, bindingTypes);

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java Sun Jan  6 18:35:35 2013
@@ -74,7 +74,7 @@ public class InjectionPointFactory
         Asserts.assertNotNull(annotField, "annotField parameter can not be null");
         Field member = annotField.getJavaMember();
 
-        Annotation[] annots = AnnotationUtil.asSet(annotField.getAnnotations());
+        Annotation[] annots = AnnotationUtil.asArray(annotField.getAnnotations());
 
         return getGenericInjectionPoint(owner, annots, annotField.getBaseType(), member, annotField);
     }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolution.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolution.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolution.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolution.java Sun Jan  6 18:35:35 2013
@@ -44,6 +44,7 @@ import org.apache.webbeans.config.WebBea
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
 import org.apache.webbeans.plugins.OpenWebBeansEjbLCAPlugin;
 import org.apache.webbeans.util.AnnotationUtil;
+import org.apache.webbeans.util.Asserts;
 import org.apache.webbeans.util.ClassUtil;
 
 /**
@@ -83,6 +84,9 @@ public class InterceptorResolution
 
     public <T> BeanInterceptorInfo  calculateInterceptorInfo(Bean<T> bean, AnnotatedType<T> annotatedType)
     {
+        Asserts.assertNotNull(bean, "Bean must not be null!");
+        Asserts.assertNotNull(annotatedType, "AnnotatedType must not be null!");
+
         List<AnnotatedMethod> interceptableAnnotatedMethods = getInterceptableBusinessMethods(annotatedType);
 
         AnnotationManager annotationManager = webBeansContext.getAnnotationManager();
@@ -95,8 +99,12 @@ public class InterceptorResolution
 
         //X TODO pick up EJB-style interceptors from a class level
 
-        //X TODO pick up the decorators
-        List<Decorator<?>> decorators = beanManager.resolveDecorators(bean.getTypes(), AnnotationUtil.asSet(bean.getQualifiers()));
+        // pick up the decorators
+        List<Decorator<?>> decorators = beanManager.resolveDecorators(bean.getTypes(), AnnotationUtil.asArray(bean.getQualifiers()));
+        if (decorators.size() == 0)
+        {
+            decorators = null; // less to store
+        }
 
         Set<Interceptor<?>> allUsedCdiInterceptors = new HashSet<Interceptor<?>>();
         Map<Method, MethodInterceptorInfo> businessMethodInterceptorInfos = new HashMap<Method, MethodInterceptorInfo>();
@@ -123,7 +131,7 @@ public class InterceptorResolution
             }
         }
 
-        return new BeanInterceptorInfo(null, allUsedCdiInterceptors, businessMethodInterceptorInfos);
+        return new BeanInterceptorInfo(decorators, allUsedCdiInterceptors, businessMethodInterceptorInfos);
     }
 
 
@@ -134,11 +142,14 @@ public class InterceptorResolution
             return;
         }
 
-        Set<Decorator<?>> appliedDecorators = new HashSet<Decorator<?>>();
+        List<Decorator<?>> appliedDecorators = new ArrayList<Decorator<?>>();
 
         for (Decorator decorator : decorators)
         {
-            isDecoratorInterceptsMethod(decorator, annotatedMethod, appliedDecorators);
+            if (isDecoratorInterceptsMethod(decorator, annotatedMethod))
+            {
+                appliedDecorators.add(decorator);
+            }
         }
 
         if (appliedDecorators.size() > 0)
@@ -147,7 +158,7 @@ public class InterceptorResolution
         }
     }
 
-    private boolean isDecoratorInterceptsMethod(Decorator decorator, AnnotatedMethod annotatedMethod, Set<Decorator<?>> appliedDecorators)
+    private boolean isDecoratorInterceptsMethod(Decorator decorator, AnnotatedMethod annotatedMethod)
     {
         String annotatedMethodName = annotatedMethod.getJavaMember().getName();
 
@@ -162,8 +173,8 @@ public class InterceptorResolution
                 {
                     int modifiers = decoratorMethod.getModifiers();
                     if (Modifier.isFinal(modifiers) ||
-                            Modifier.isPrivate(modifiers) ||
-                            Modifier.isStatic(modifiers))
+                        Modifier.isPrivate(modifiers) ||
+                        Modifier.isStatic(modifiers))
                     {
                         continue;
                     }
@@ -187,7 +198,6 @@ public class InterceptorResolution
                             if (paramsMatch)
                             {
                                 // yikes our method is decorated by this very decorator type.
-                                appliedDecorators.add(decorator);
                                 return true;
                             }
                         }
@@ -220,7 +230,7 @@ public class InterceptorResolution
 
         List<Interceptor<?>> methodInterceptors
                 = webBeansContext.getBeanManagerImpl().resolveInterceptors(methodInterceptorInfo.getInterceptionType(),
-                                                                           AnnotationUtil.asSet(cummulatedInterceptorBindings));
+                                                                           AnnotationUtil.asArray(cummulatedInterceptorBindings));
 
         methodInterceptorInfo.setCdiInterceptors(methodInterceptors);
 
@@ -298,7 +308,7 @@ public class InterceptorResolution
      */
     public static class BeanInterceptorInfo
     {
-        public BeanInterceptorInfo(Set<Decorator<?>> decorators, Set<Interceptor<?>> interceptors,
+        public BeanInterceptorInfo(List<Decorator<?>> decorators, Set<Interceptor<?>> interceptors,
                                    Map<Method, MethodInterceptorInfo> businessMethodsInfo)
         {
             this.decorators = decorators;
@@ -315,7 +325,7 @@ public class InterceptorResolution
         /**
          * All the Decorator Beans active on this class.
          */
-        private Set<Decorator<?>> decorators = null;
+        private List<Decorator<?>> decorators = null;
 
         /**
          * For each business method which is either decorated or intercepted we keep an entry.
@@ -324,7 +334,7 @@ public class InterceptorResolution
         private Map<Method, MethodInterceptorInfo> businessMethodsInfo = new HashMap<Method, MethodInterceptorInfo>();
 
 
-        public Set<Decorator<?>> getDecorators()
+        public List<Decorator<?>> getDecorators()
         {
             return decorators;
         }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java Sun Jan  6 18:35:35 2013
@@ -305,7 +305,7 @@ public final class WebBeansInterceptorCo
             Method method = methodB.getJavaMember();
             Set<Annotation> interceptorAnns = new HashSet<Annotation>();
 
-            Annotation[] methodAnns = AnnotationUtil.asSet(methodB.getAnnotations());
+            Annotation[] methodAnns = AnnotationUtil.asArray(methodB.getAnnotations());
             if (annotationManager.hasInterceptorBindingMetaAnnotation(methodAnns))
             {
                 Annotation[] anns =
@@ -313,7 +313,7 @@ public final class WebBeansInterceptorCo
                         methodAnns);
                 Annotation[] annsClazz =
                     annotationManager.getInterceptorBindingMetaAnnotations(
-                        AnnotationUtil.asSet(annotatedType.getAnnotations()));
+                        AnnotationUtil.asArray(annotatedType.getAnnotations()));
 
                 for (Annotation ann : anns)
                 {
@@ -328,7 +328,7 @@ public final class WebBeansInterceptorCo
 
             Annotation[] stereoTypes =
                 annotationManager.getStereotypeMetaAnnotations(
-                    AnnotationUtil.asSet(annotatedType.getAnnotations()));
+                    AnnotationUtil.asArray(annotatedType.getAnnotations()));
             for (Annotation stero : stereoTypes)
             {
                 if (annotationManager.hasInterceptorBindingMetaAnnotation(

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=1429565&r1=1429564&r2=1429565&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 Sun Jan  6 18:35:35 2013
@@ -638,7 +638,7 @@ public final class AnnotationUtil
         return null;        
     }
 
-    public static Annotation[] asSet(Set<Annotation> set)
+    public static Annotation[] asArray(Set<Annotation> set)
     {
         if(set != null)
         {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Sun Jan  6 18:35:35 2013
@@ -1943,7 +1943,7 @@ public final class WebBeansUtil
          if (component instanceof EnterpriseBeanMarker)
          {
              beans = new HashSet<Bean<?>>();
-             Set<Bean<?>> allBeans = ((BeanManagerImpl)(manager)).getBeans(Object.class, AnnotationUtil.asSet(component.getQualifiers()));
+             Set<Bean<?>> allBeans = ((BeanManagerImpl)(manager)).getBeans(Object.class, AnnotationUtil.asArray(component.getQualifiers()));
 
              for(Bean<?> candidateBean : allBeans)
              {
@@ -1964,7 +1964,7 @@ public final class WebBeansUtil
          else
          {
              beans = manager.getBeans(component.getBeanClass(),
-                     AnnotationUtil.asSet(component.getQualifiers()));
+                     AnnotationUtil.asArray(component.getQualifiers()));
          }
 
         for(Bean<?> bean : beans)
@@ -2080,7 +2080,7 @@ public final class WebBeansUtil
         {
             ProducerMethodBean<?> bean = beanEntry.getKey();
             AnnotatedMethod<?> annotatedMethod = beanEntry.getValue();
-            Annotation[] annotationsFromSet = AnnotationUtil.asSet(bean.getQualifiers());
+            Annotation[] annotationsFromSet = AnnotationUtil.asArray(bean.getQualifiers());
             Method disposal = annotationManager.getDisposalWithGivenAnnotatedMethod(annotatedType, bean.getReturnType(), annotationsFromSet);
 
             AnnotatedMethod<?> disposalAnnotated = null;
@@ -2705,7 +2705,7 @@ public final class WebBeansUtil
 
     private <X> void checkManagedWebBeansInterceptorConditions(AnnotatedType<X> type)
     {
-        Annotation[] anns = AnnotationUtil.asSet(type.getAnnotations());
+        Annotation[] anns = AnnotationUtil.asArray(type.getAnnotations());
 
         Class<?> clazz = type.getJavaClass();
         boolean hasClassInterceptors = false;
@@ -2746,7 +2746,7 @@ public final class WebBeansUtil
                 }
 
                 if (annotationManager.hasInterceptorBindingMetaAnnotation(
-                    AnnotationUtil.asSet(methodA.getAnnotations())))
+                    AnnotationUtil.asArray(methodA.getAnnotations())))
                 {
                     throw new WebBeansConfigurationException("Method : " + method.getName() + "in managed bean class : " + clazz.getName()
                                                     + " can not be defined as non-static, non-private and final . Because it is annotated with at least one @InterceptorBinding");

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java Sun Jan  6 18:35:35 2013
@@ -24,7 +24,7 @@ import javax.annotation.PreDestroy;
 import org.apache.webbeans.test.component.intercept.webbeans.bindings.Transactional;
 
 /**
- * A simple class which is not intercepted
+ * A simple class which is class-level intercepted
  */
 @Transactional
 public class ClassInterceptedClass

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java Sun Jan  6 18:35:35 2013
@@ -26,7 +26,7 @@ import org.apache.webbeans.test.componen
 import org.apache.webbeans.test.component.intercept.webbeans.bindings.Transactional;
 
 /**
- * A simple class which is not intercepted
+ * A simple class which has multiple interceptors
  */
 @Transactional
 @Action

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/DecoratedClass.java (from r1429558, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/DecoratedClass.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/DecoratedClass.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java&r1=1429558&r2=1429565&rev=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassInterceptedClass.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/DecoratedClass.java Sun Jan  6 18:35:35 2013
@@ -18,77 +18,28 @@
  */
 package org.apache.webbeans.newtests.interceptors.factory.beans;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 
-import org.apache.webbeans.test.component.intercept.webbeans.bindings.Transactional;
+import javax.enterprise.context.RequestScoped;
+import org.apache.webbeans.test.annotation.binding.Binding1;
+import org.apache.webbeans.test.component.service.IService;
 
 /**
- * A simple class which is not intercepted
+ * A simple class which has a Decorator of type
+ * {@link org.apache.webbeans.test.component.decorator.clean.ServiceDecorator}
  */
-@Transactional
-public class ClassInterceptedClass
+@RequestScoped
+@Binding1
+public class DecoratedClass implements IService
 {
-    private boolean defaultCtInvoked = false;
 
-    private int meaningOfLife;
-    private float f;
-    private char c;
-
-    public ClassInterceptedClass()
-    {
-        defaultCtInvoked = true;
-    }
-
-    @PostConstruct
-    public void postConstruct()
-    {
-        System.out.println("postConstruct invoked");
-    }
-
-    @PreDestroy
-    private void preDestroy()
-    {
-        System.out.println("preDestroy invoked");
-    }
-
-    public void init()
-    {
-        f = 2.4f;
-        c = 'c';
-        meaningOfLife = 42;
-    }
-
-    public int getMeaningOfLife() throws NumberFormatException
+    @Override
+    public String service()
     {
-        System.out.println("answering the question about life, the universe and everything!");
-        System.out.println("and being in " + this.getClass());
-        return meaningOfLife;
+        return "theOriginalValue";
     }
 
-    public void setMeaningOfLife(int meaningOfLife)
+    public int nonDecoratedMethod()
     {
-        this.meaningOfLife = meaningOfLife;
+        return 42;
     }
-
-    public float getFloat()
-    {
-        return f;
-    }
-
-    public ClassInterceptedClass getSelf()
-    {
-        return this;
-    }
-
-    public char getChar()
-    {
-        return c;
-    }
-
-    public String doThaBlowup() throws NumberFormatException
-    {
-        throw new NumberFormatException("should fit");
-    }
-
 }

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.java?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.java Sun Jan  6 18:35:35 2013
@@ -20,6 +20,7 @@ package org.apache.webbeans.newtests.int
 
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.util.AnnotationLiteral;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -28,9 +29,11 @@ import java.util.Map;
 import org.apache.webbeans.intercept.InterceptorResolution;
 import org.apache.webbeans.newtests.AbstractUnitTest;
 import org.apache.webbeans.newtests.interceptors.factory.beans.ClassInterceptedClass;
-
 import org.apache.webbeans.newtests.interceptors.factory.beans.ClassMultiInterceptedClass;
+import org.apache.webbeans.newtests.interceptors.factory.beans.DecoratedClass;
 import org.apache.webbeans.newtests.interceptors.factory.beans.MethodInterceptedClass;
+import org.apache.webbeans.test.annotation.binding.Binding1;
+import org.apache.webbeans.test.component.decorator.clean.ServiceDecorator;
 import org.apache.webbeans.test.component.intercept.webbeans.ActionInterceptor;
 import org.apache.webbeans.test.component.intercept.webbeans.SecureInterceptor;
 import org.apache.webbeans.test.component.intercept.webbeans.TransactionalInterceptor;
@@ -174,4 +177,33 @@ public class InterceptorResolutionTest  
     }
 
 
+    @Test
+    public void testDecoratorResolution() throws Exception
+    {
+        Collection<String> beanXmls = new ArrayList<String>();
+        beanXmls.add(getXmlPath(this.getClass().getPackage().getName(), this.getClass().getSimpleName()));
+
+        Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
+        beanClasses.add(DecoratedClass.class);
+        beanClasses.add(ServiceDecorator.class);
+
+        startContainer(beanClasses, beanXmls);
+
+        InterceptorResolution ir = new InterceptorResolution(getWebBeansContext());
+        AnnotatedType<DecoratedClass> annotatedType = getBeanManager().createAnnotatedType(DecoratedClass.class);
+        Bean<DecoratedClass> bean = (Bean<DecoratedClass>) getBeanManager().resolve(
+                getBeanManager().getBeans(DecoratedClass.class, new AnnotationLiteral<Binding1>() {}));
+
+        InterceptorResolution.BeanInterceptorInfo interceptorInfo = ir.calculateInterceptorInfo(bean, annotatedType);
+        Assert.assertNotNull(interceptorInfo);
+
+        Assert.assertNotNull(interceptorInfo.getBusinessMethodsInfo());
+        Assert.assertEquals(1, interceptorInfo.getBusinessMethodsInfo().size());
+
+        Assert.assertNotNull(interceptorInfo.getDecorators());
+        Assert.assertEquals(1, interceptorInfo.getDecorators().size());
+
+        shutDownContainer();
+    }
+
 }

Modified: openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.xml?rev=1429565&r1=1429564&r2=1429565&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.xml (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionTest.xml Sun Jan  6 18:35:35 2013
@@ -18,9 +18,12 @@ specific language governing permissions 
 under the License.
 -->
 <beans>
-   <interceptors>
-      <class>org.apache.webbeans.test.component.intercept.webbeans.TransactionalInterceptor</class>
-      <class>org.apache.webbeans.test.component.intercept.webbeans.ActionInterceptor</class>
-      <class>org.apache.webbeans.test.component.intercept.webbeans.SecureInterceptor</class>
-   </interceptors>
+    <interceptors>
+        <class>org.apache.webbeans.test.component.intercept.webbeans.TransactionalInterceptor</class>
+        <class>org.apache.webbeans.test.component.intercept.webbeans.ActionInterceptor</class>
+        <class>org.apache.webbeans.test.component.intercept.webbeans.SecureInterceptor</class>
+    </interceptors>
+    <decorators>
+        <class>org.apache.webbeans.test.component.decorator.clean.ServiceDecorator</class>
+    </decorators>
 </beans>