[webbeans-commits] Webbeans SVN: r263 - in ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans: util and 1 other directory.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Thu Nov 6 11:32:17 EST 2008
Author: gavin.king at jboss.com
Date: 2008-11-06 11:32:17 -0500 (Thu, 06 Nov 2008)
New Revision: 263
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/impl/AbstractAnnotatedItem.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/impl/SimpleAnnotatedClass.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java
Log:
fix the use of getMethod(), getField(), instead use getDeclaredXxxx() and setAccessible(true)
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/impl/AbstractAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/impl/AbstractAnnotatedItem.java 2008-11-06 16:12:09 UTC (rev 262)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/impl/AbstractAnnotatedItem.java 2008-11-06 16:32:17 UTC (rev 263)
@@ -149,6 +149,8 @@
private boolean isAssignableFrom(Class<?> type, Type[] actualTypeArguments)
{
+ //TODO: primitive types and wrapper types should be considered equal
+ //TODO: array types should be considered equal only if the element type matches
return getType().isAssignableFrom(type) && Arrays.equals(getActualTypeArguments(), actualTypeArguments);
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/impl/SimpleAnnotatedClass.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/impl/SimpleAnnotatedClass.java 2008-11-06 16:12:09 UTC (rev 262)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/impl/SimpleAnnotatedClass.java 2008-11-06 16:32:17 UTC (rev 263)
@@ -92,9 +92,13 @@
private void initFields()
{
this.fields = new HashSet<AnnotatedField<Object>>();
- for(Field field : clazz.getFields())
+ for(Class c=clazz;c!=Object.class;c=c.getSuperclass())
{
- fields.add(new SimpleAnnotatedField<Object>(field));
+ for(Field field : clazz.getDeclaredFields())
+ {
+ if ( !field.isAccessible() ) field.setAccessible(true);
+ fields.add(new SimpleAnnotatedField<Object>(field));
+ }
}
}
@@ -176,9 +180,13 @@
private void initMethods()
{
this.methods = new HashSet<AnnotatedMethod<Object>>();
- for (Method member : clazz.getDeclaredMethods())
+ for(Class c=clazz;c!=Object.class;c=c.getSuperclass())
{
- methods.add(new SimpleAnnotatedMethod<Object>(member));
+ for (Method method : clazz.getDeclaredMethods())
+ {
+ if (!method.isAccessible()) method.setAccessible(true);
+ methods.add(new SimpleAnnotatedMethod<Object>(method));
+ }
}
}
@@ -226,6 +234,7 @@
for (Constructor<T> constructor : clazz.getDeclaredConstructors())
{
AnnotatedConstructor<T> annotatedConstructor = new SimpleAnnotatedConstructor<T>(constructor);
+ if (!constructor.isAccessible()) constructor.setAccessible(true);
constructors.add(annotatedConstructor);
constructorsByArgumentMap.put(new HashSet<Class<?>>(Arrays.asList(constructor.getParameterTypes())), annotatedConstructor);
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java 2008-11-06 16:12:09 UTC (rev 262)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java 2008-11-06 16:32:17 UTC (rev 263)
@@ -33,8 +33,23 @@
}
Context context = manager.getContext(bean.getScopeType());
Object proxiedInstance = context.get(bean, true);
- Method proxiedMethod = proxiedInstance.getClass().getMethod(method.getName(), method.getParameterTypes());
+ Method proxiedMethod = getMethod(method, proxiedInstance);
return proxiedMethod.invoke(proxiedInstance, args);
}
+ private static Method getMethod(Method method, Object instance)
+ {
+ for (Class<? extends Object> c = instance.getClass(); c!=Object.class; c=c.getSuperclass())
+ {
+ try
+ {
+ Method m = c.getDeclaredMethod(method.getName(), method.getParameterTypes());
+ if (!m.isAccessible()) m.setAccessible(true);
+ return m;
+ }
+ catch (NoSuchMethodException nsme) {}
+ }
+ throw new IllegalArgumentException("method not implemented by instance");
+ }
+
}
More information about the weld-commits
mailing list