[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