Author: arne
Date: Wed Jan  2 23:20:30 2013
New Revision: 1428107

URL: http://svn.apache.org/viewvc?rev=1428107&view=rev
Log:
OWB-748: Fixed annotated type

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AnnotatedTypeImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java

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=1428107&r1=1428106&r2=1428107&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
 Wed Jan  2 23:20:30 2013
@@ -19,12 +19,15 @@
 package org.apache.webbeans.portable;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.util.ClassUtil;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.enterprise.inject.spi.AnnotatedConstructor;
@@ -74,35 +77,43 @@ class AnnotatedTypeImpl<X> extends Abstr
             fields = new HashSet<AnnotatedField<? super X>>();
             methods = new HashSet<AnnotatedMethod<? super X>>();
 
-            Field[] decFields = 
getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredFields(annotatedClass);
-            Method[] decMethods = 
getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredMethods(annotatedClass);
             Constructor<?>[] decCtxs = 
getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredConstructors(annotatedClass);
-            for(Field f : decFields)
+
+            for(Constructor<?> ct : decCtxs)
             {
-                if (!f.isSynthetic())
+                if (!ct.isSynthetic())
                 {
-                    AnnotatedField<X> af = new 
AnnotatedFieldImpl<X>(getWebBeansContext(), f, this);
-                    fields.add(af);
+                    AnnotatedConstructor<X> ac = new 
AnnotatedConstructorImpl<X>(getWebBeansContext(), (Constructor<X>) ct,this);
+                    constructors.add(ac);
                 }
             }
 
-            for(Method m : decMethods)
+            Class<?> currentClass = annotatedClass;
+            List<Method> addedMethods = new ArrayList<Method>();
+            do
             {
-                if (!m.isSynthetic() && !m.isBridge())
+                Field[] decFields = 
getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredFields(currentClass);
+                Method[] decMethods = 
getWebBeansContext().getSecurityService().doPrivilegedGetDeclaredMethods(currentClass);
+                for(Field f : decFields)
                 {
-                    AnnotatedMethod<X> am = new 
AnnotatedMethodImpl<X>(getWebBeansContext(), m,this);
-                    methods.add(am);
+                    if (!f.isSynthetic())
+                    {
+                        AnnotatedField<X> af = new 
AnnotatedFieldImpl<X>(getWebBeansContext(), f, this);
+                        fields.add(af);
+                    }
                 }
-            }
 
-            for(Constructor<?> ct : decCtxs)
-            {
-                if (!ct.isSynthetic())
+                for(Method m : decMethods)
                 {
-                    AnnotatedConstructor<X> ac = new 
AnnotatedConstructorImpl<X>(getWebBeansContext(), (Constructor<X>) ct,this);
-                    constructors.add(ac);
+                    if (!m.isSynthetic() && !m.isBridge() && 
!ClassUtil.isOverridden(addedMethods, m))
+                    {
+                        AnnotatedMethod<X> am = new 
AnnotatedMethodImpl<X>(getWebBeansContext(), m,this);
+                        methods.add(am);
+                        addedMethods.add(m);
+                    }
                 }
-            }
+                currentClass = currentClass.getSuperclass();
+            } while (currentClass != Object.class);
         }
     }
 

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=1428107&r1=1428106&r2=1428107&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
 Wed Jan  2 23:20:30 2013
@@ -319,11 +319,11 @@ public final class ClassUtil
      * @param methods
      * @param method
      */
-    private static boolean isOverridden(final List<Method> methods, final 
Method method)
+    public static boolean isOverridden(final List<Method> methods, final 
Method method)
     {
         for (final Method m : methods)
         {
-            if (Arrays.equals(m.getParameterTypes(), 
method.getParameterTypes()))
+            if (isOverridden(m, method))
             {
                 return true;
             }


Reply via email to