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