Author: arne
Date: Mon Jun 30 15:33:43 2014
New Revision: 1606787

URL: http://svn.apache.org/r1606787
Log:
OWB-982: Moved filtering of methods to AnnotatedElementFactory

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/BeanAttributesBuilder.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
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.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/InterceptorResolutionService.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java

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=1606787&r1=1606786&r2=1606787&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
 Mon Jun 30 15:33:43 2014
@@ -790,7 +790,7 @@ public final class AnnotationManager
     @SuppressWarnings("unchecked")
     public <X> Method getDisposalWithGivenAnnotatedMethod(AnnotatedType<X> 
annotatedType, Type beanType, Annotation[] qualifiers)
     {
-        Set<AnnotatedMethod<? super X>> annotatedMethods = 
annotatedType.getMethods();
+        Set<AnnotatedMethod<? super X>> annotatedMethods = 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType);
 
         if(annotatedMethods != null)
         {

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
 Mon Jun 30 15:33:43 2014
@@ -726,7 +726,7 @@ public abstract class BeanAttributesBuil
         protected AnnotatedMethod<? super M> getSuperAnnotated()
         {
             AnnotatedMethod<M> thisMethod = getAnnotated();
-            for (AnnotatedMethod<? super M> superMethod: 
getSuperType().getMethods())
+            for (AnnotatedMethod<? super M> superMethod: 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(getSuperType()))
             {
                 List<AnnotatedParameter<M>> thisParameters = 
thisMethod.getParameters();
                 if 
(thisMethod.getJavaMember().getName().equals(superMethod.getJavaMember().getName())

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=1606787&r1=1606786&r2=1606787&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
 Mon Jun 30 15:33:43 2014
@@ -57,7 +57,7 @@ public class CdiInterceptorBeanBuilder<T
         validateNoProducerMethod(annotatedType);
 
         // make sure that CDI interceptors do not have a Disposes method
-        validateNoDisposerWithoutProducer(annotatedType.getMethods(), 
Collections.EMPTY_SET);
+        
validateNoDisposerWithoutProducer(webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType),
 Collections.EMPTY_SET);
     }
 
     @Override

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=1606787&r1=1606786&r2=1606787&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
 Mon Jun 30 15:33:43 2014
@@ -135,7 +135,7 @@ public class DecoratorBeanBuilder<T> ext
         validateNoProducerMethod(annotatedType);
 
         // make sure that CDI Decorator do not have a Disposes method
-        validateNoDisposerWithoutProducer(annotatedType.getMethods(), 
Collections.EMPTY_SET);
+        
validateNoDisposerWithoutProducer(webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType),
 Collections.EMPTY_SET);
 
     }
 
@@ -248,7 +248,7 @@ public class DecoratorBeanBuilder<T> ext
             return;
         }
         collectPostConstructMethods(type.getSuperclass(), 
postConstructMethods);
-        for (AnnotatedMethod<?> annotatedMethod: annotatedType.getMethods())
+        for (AnnotatedMethod<?> annotatedMethod: 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType))
         {
             if (annotatedMethod.getJavaMember().getDeclaringClass() == type
                 && annotatedMethod.isAnnotationPresent(PostConstruct.class)
@@ -273,7 +273,7 @@ public class DecoratorBeanBuilder<T> ext
             return;
         }
         collectPreDestroyMethods(type.getSuperclass(), preDestroyMethods);
-        for (AnnotatedMethod<?> annotatedMethod: annotatedType.getMethods())
+        for (AnnotatedMethod<?> annotatedMethod: 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType))
         {
             if (annotatedMethod.getJavaMember().getDeclaringClass() == type
                 && annotatedMethod.isAnnotationPresent(PreDestroy.class)

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
 Mon Jun 30 15:33:43 2014
@@ -94,7 +94,7 @@ public abstract class InterceptorBeanBui
 
     protected void checkInterceptorConditions()
     {
-        Set<AnnotatedMethod<? super T>> methods = annotatedType.getMethods();
+        Set<AnnotatedMethod<? super T>> methods = 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType);
         for(AnnotatedMethod<?> method : methods)
         {
             for (AnnotatedParameter<?> parameter : method.getParameters())
@@ -143,7 +143,7 @@ public abstract class InterceptorBeanBui
 
         boolean interceptorFound = false;
 
-        Set<AnnotatedMethod<? super T>> methods = annotatedType.getMethods();
+        Set<AnnotatedMethod<? super T>> methods = 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType);
 
         for (Class clazz : classHierarchy)
         {

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/MethodProducerFactory.java
 Mon Jun 30 15:33:43 2014
@@ -89,7 +89,8 @@ public class MethodProducerFactory<P> im
                 producerQualifiersWithoutNamed.add(qualifier);
             }
         }
-        Set<AnnotatedMethod<? super P>> annotatedMethods = 
(Set<AnnotatedMethod<? super 
P>>)(Set<?>)producerMethod.getDeclaringType().getMethods();        
+        Set<AnnotatedMethod<? super P>> annotatedMethods
+            = (Set<AnnotatedMethod<? super 
P>>)(Set<?>)webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(producerMethod.getDeclaringType());
        
         for (AnnotatedMethod<? super P> annotatedMethod : annotatedMethods)
         {            
             if 
(annotatedMethod.getDeclaringType().equals(producerMethod.getDeclaringType()))

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
 Mon Jun 30 15:33:43 2014
@@ -68,7 +68,7 @@ public class ObserverMethodsBuilder<T, I
     public Set<ObserverMethod<?>> defineObserverMethods(AbstractOwbBean<T> 
bean)
     {   
         Set<ObserverMethod<?>> definedObservers = new 
HashSet<ObserverMethod<?>>();
-        for (AnnotatedMethod<?> annotatedMethod : annotatedType.getMethods())
+        for (AnnotatedMethod<?> annotatedMethod : 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType))
         {
             List<AnnotatedParameter<?>> parameters = 
(List<AnnotatedParameter<?>>)(List<?>)annotatedMethod.getParameters();
             AnnotatedParameter<?> observesParameter = null;

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
 Mon Jun 30 15:33:43 2014
@@ -73,36 +73,6 @@ public class ProducerMethodBeanBuilder<T
         bean.setSpecializedBean(true);        
     }
 
-    //X TODO arne: this should get implemented or removed if not needed anymore
-    protected AnnotatedMethod<?> getSuperAnnotated()
-    {
-        AnnotatedMethod<?> thisMethod = annotatedMember;
-        for (AnnotatedMethod<?> superMethod: getSuperType().getMethods())
-        {
-            List<AnnotatedParameter<?>> thisParameters = 
(List<AnnotatedParameter<?>>)(List<?>)thisMethod.getParameters();
-            if 
(thisMethod.getJavaMember().getName().equals(superMethod.getJavaMember().getName())
-                && thisMethod.getBaseType().equals(superMethod.getBaseType())
-                && thisParameters.size() == superMethod.getParameters().size())
-            {
-                List<AnnotatedParameter<?>> superParameters = 
(List<AnnotatedParameter<?>>)(List<?>)superMethod.getParameters();
-                boolean match = true;
-                for (int i = 0; i < thisParameters.size(); i++)
-                {
-                    if 
(!thisParameters.get(i).getBaseType().equals(superParameters.get(i).getBaseType()))
-                    {
-                        match = false;
-                        break;
-                    }
-                }
-                if (match)
-                {
-                    return superMethod;
-                }
-            }
-        }
-        return null;
-    }
-
     @Override
     protected <P> ProducerMethodBean<T> createBean(InjectionTargetBean<P> 
parent, Class<T> beanClass)
     {

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
 Mon Jun 30 15:33:43 2014
@@ -64,7 +64,7 @@ public class ProducerMethodBeansBuilder<
     public Set<ProducerMethodBean<?>> 
defineProducerMethods(InjectionTargetBean<T> bean)
     {
         Set<ProducerMethodBean<?>> producerBeans = new 
HashSet<ProducerMethodBean<?>>();
-        Set<AnnotatedMethod<? super T>> annotatedMethods = 
annotatedType.getMethods();
+        Set<AnnotatedMethod<? super T>> annotatedMethods = 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType);
         
         for(AnnotatedMethod<? super T> annotatedMethod: annotatedMethods)
         {

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=1606787&r1=1606786&r2=1606787&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
 Mon Jun 30 15:33:43 2014
@@ -92,7 +92,7 @@ public class InjectionPointFactory
                 injectionPoints.add(buildInjectionPoint(owner, field));
             }
         }
-        for (AnnotatedMethod<? super X> method: annotatedType.getMethods())
+        for (AnnotatedMethod<? super X> method: 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType))
         {
             if (method.isAnnotationPresent(Inject.class) && 
!Modifier.isStatic(method.getJavaMember().getModifiers()))
             {

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=1606787&r1=1606786&r2=1606787&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 15:33:43 2014
@@ -649,7 +649,7 @@ public class InterceptorResolutionServic
 
         List<AnnotatedMethod> interceptableAnnotatedMethods = new 
ArrayList<AnnotatedMethod>();
 
-        Set<AnnotatedMethod> annotatedMethods = annotatedType.getMethods();
+        Set<AnnotatedMethod> annotatedMethods = 
(Set<AnnotatedMethod>)webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType);
         for (Method interceptableMethod : interceptableMethods)
         {
             for (AnnotatedMethod<?> annotatedMethod : annotatedMethods)

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
 Mon Jun 30 15:33:43 2014
@@ -67,7 +67,7 @@ public final class InterceptorUtil
         List<Class> classes = 
getReverseClassHierarchy(annotatedType.getJavaClass());
         for (Class clazz : classes)
         {
-            for (AnnotatedMethod<?> annotatedMethod : 
annotatedType.getMethods())
+            for (AnnotatedMethod<?> annotatedMethod : 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType))
             {
                 if (annotatedMethod.getJavaMember().getDeclaringClass() != 
clazz)
                 {

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedElementFactory.java
 Mon Jun 30 15:33:43 2014
@@ -21,6 +21,9 @@ package org.apache.webbeans.portable;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.logging.Level;
@@ -35,6 +38,7 @@ import org.apache.webbeans.config.OWBLog
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
 import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.ClassUtil;
 
 /**
  * Factory for {@link javax.enterprise.inject.spi.Annotated} elements.
@@ -73,6 +77,10 @@ public final class AnnotatedElementFacto
     private ConcurrentMap<Field, AnnotatedField<?>> annotatedFieldCache =
         new ConcurrentHashMap<Field, AnnotatedField<?>>();
 
+    //Cache of AnnotatedMethod
+    private ConcurrentMap<AnnotatedType<?>, Set<AnnotatedMethod<?>>> 
annotatedMethodsOfTypeCache =
+        new ConcurrentHashMap<AnnotatedType<?>, Set<AnnotatedMethod<?>>>();
+
     private WebBeansContext webBeansContext;
 
     /**
@@ -306,6 +314,36 @@ public final class AnnotatedElementFacto
     }
     
     /**
+     * Returns the {@link AnnotatedMethod}s of the specified {@link 
AnnotatedType},
+     * filtering out the overridden methods.
+     */
+    public <T> Set<AnnotatedMethod<? super T>> 
getFilteredAnnotatedMethods(AnnotatedType<T> annotatedType)
+    {
+        Asserts.assertNotNull(annotatedType, "annotatedType is null");
+
+        Set<AnnotatedMethod<?>> methods = 
annotatedMethodsOfTypeCache.get(annotatedType);
+        if (methods != null)
+        {
+            return cast(methods);
+        }
+        methods = Collections.unmodifiableSet(getFilteredMethods(
+                annotatedType.getJavaClass(),
+                (Set<AnnotatedMethod<?>>)(Set<?>)annotatedType.getMethods(),
+                new HashSet<AnnotatedMethod<?>>()));
+        Set<AnnotatedMethod<?>> old = 
annotatedMethodsOfTypeCache.putIfAbsent(annotatedType, methods);
+        if (old != null)
+        {
+            return cast(old);
+        }
+        return cast(methods);
+    }
+    
+    private <T> Set<AnnotatedMethod<? super T>> cast(Set<AnnotatedMethod<?>> 
methods)
+    {
+        return (Set<AnnotatedMethod<? super T>>)(Set<?>)methods;
+    }
+
+    /**
      * Clear caches.
      */
     public void clear()
@@ -315,8 +353,37 @@ public final class AnnotatedElementFacto
         annotatedConstructorCache.clear();
         annotatedFieldCache.clear();
         annotatedMethodCache.clear();
+        annotatedMethodsOfTypeCache.clear();
     }
     
+    private Set<? extends AnnotatedMethod<?>> getFilteredMethods(Class<?> 
type, Set<AnnotatedMethod<?>> allMethods, Set<AnnotatedMethod<?>> 
filteredMethods)
+    {
+        if (type == null)
+        {
+            return filteredMethods;
+        }
+        for (AnnotatedMethod<?> annotatedMethod: allMethods)
+        {
+            if (annotatedMethod.getJavaMember().getDeclaringClass() == type && 
!isOverridden(annotatedMethod, filteredMethods))
+            {
+                filteredMethods.add(annotatedMethod);
+            }
+        }
+        return getFilteredMethods(type.getSuperclass(), allMethods, 
filteredMethods);
+    }
+
+    private boolean isOverridden(AnnotatedMethod<?> superclassMethod, 
Set<AnnotatedMethod<?>> methods)
+    {
+        for (AnnotatedMethod<?> subclassMethod : methods)
+        {
+            if (ClassUtil.isOverridden(subclassMethod.getJavaMember(), 
superclassMethod.getJavaMember()))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private <T> ConcurrentMap<String, AnnotatedType<T>> 
getAnnotatedTypeCache(Class<T> type)
     {
         ConcurrentMap<String, AnnotatedType<?>> annotatedTypes = 
annotatedTypeCache.get(type);

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
 Mon Jun 30 15:33:43 2014
@@ -29,18 +29,13 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.BeanManager;
-import javax.interceptor.AroundConstruct;
-import javax.interceptor.AroundInvoke;
 
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.util.ClassUtil;
 
 /**
  * Implementation of the {@link AnnotatedType} interface.
@@ -260,42 +255,10 @@ class AnnotatedTypeImpl<X>
                 }
                 for (AnnotatedMethod<? super X> method : 
supertype.getMethods())
                 {
-                    if (!isOverridden(method))
-                    {
-                        methods.add(new 
AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(), 
AnnotatedTypeImpl.this));
-                    }
+                    methods.add(new 
AnnotatedMethodImpl<X>(getWebBeansContext(), method.getJavaMember(), 
AnnotatedTypeImpl.this));
                 }
             }
 
         }
-
-        private boolean isOverridden(AnnotatedMethod<? super X> 
superclassMethod)
-        {
-            for (AnnotatedMethod<? super X> subclassMethod : methods)
-            {
-                if (ClassUtil.isOverridden(subclassMethod.getJavaMember(), 
superclassMethod.getJavaMember()))
-                {
-                    final Set<Annotation> superAnnotations = 
superclassMethod.getAnnotations();
-                    final Set<Annotation> subAnnotations = 
subclassMethod.getAnnotations();
-                    // check that's not a deactivation of 
interceptors/lifecycle
-                    // before checking that's the exact same method
-                    // TODO: same for EJBs?
-                    for (final Annotation a : superAnnotations)
-                    {
-                        final Class<? extends Annotation> annotationType = 
a.annotationType();
-                        if (annotationType == AroundConstruct.class || 
annotationType == AroundInvoke.class
-                            || annotationType == PostConstruct.class || 
annotationType == PreDestroy.class)
-                        {
-                            if (!subAnnotations.contains(a))
-                            {
-                                return true;
-                            }
-                        }
-                    }
-                    return subAnnotations.equals(superAnnotations);
-                }
-            }
-            return false;
-        }
     }
 }

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java?rev=1606787&r1=1606786&r2=1606787&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
 Mon Jun 30 15:33:43 2014
@@ -249,7 +249,7 @@ public class InjectionTargetImpl<T> exte
      */
     private void injectInitializerMethods(Class<?> declaringType, T instance, 
CreationalContextImpl<T> context)
     {
-        for (AnnotatedMethod<? super T> method : annotatedType.getMethods())
+        for (AnnotatedMethod<? super T> method : 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(annotatedType))
         {
             if (method.getDeclaringType().getJavaClass().equals(declaringType) 
&& method.isAnnotationPresent(Inject.class) && method.getParameters().isEmpty())
             {

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=1606787&r1=1606786&r2=1606787&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
 Mon Jun 30 15:33:43 2014
@@ -1470,7 +1470,7 @@ public final class WebBeansUtil
             throw new WebBeansConfigurationException("Final managed bean class 
with name : " + clazz.getName() + " can not define any InterceptorBindings");
         }
 
-        Set<AnnotatedMethod<? super X>> methods = type.getMethods();
+        Set<AnnotatedMethod<? super X>> methods = 
webBeansContext.getAnnotatedElementFactory().getFilteredAnnotatedMethods(type);
         for(AnnotatedMethod<? super X> methodA : methods)
         {
             Method method = methodA.getJavaMember();


Reply via email to