Author: gavin.king(a)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");
+ }
+
}
Show replies by date