You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2012/07/31 19:23:51 UTC

svn commit: r1367686 - in /aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint: container/BeanRecipe.java utils/ReflectionUtils.java

Author: gnodet
Date: Tue Jul 31 17:23:51 2012
New Revision: 1367686

URL: http://svn.apache.org/viewvc?rev=1367686&view=rev
Log:
[ARIES-894] Cache values for performances

Modified:
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java?rev=1367686&r1=1367685&r2=1367686&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java Tue Jul 31 17:23:51 2012
@@ -345,7 +345,7 @@ public class BeanRecipe extends Abstract
     private Map<Method, List<Object>> findMatchingMethods(Class type, String name, boolean instance, List<Object> args, List<ReifiedType> types) {
         Map<Method, List<Object>> matches = new HashMap<Method, List<Object>>();
         // Get constructors
-        List<Method> methods = getPublicMethods(type);
+        List<Method> methods = new ArrayList<Method>(Arrays.asList(getPublicMethods(type)));
         // Discard any signature with wrong cardinality
         for (Iterator<Method> it = methods.iterator(); it.hasNext();) {
             Method mth = it.next();

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java?rev=1367686&r1=1367685&r2=1367686&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/ReflectionUtils.java Tue Jul 31 17:23:51 2012
@@ -53,6 +53,7 @@ import org.osgi.service.blueprint.contai
  */
 public class ReflectionUtils {
 
+    private static Map<Class<?>, WeakReference<Method[]>> publicMethods = Collections.synchronizedMap(new WeakHashMap<Class<?>, WeakReference<Method[]>>());
     private static Map<Class<?>, PropertyDescriptor[][]> beanInfos = Collections.synchronizedMap(new WeakHashMap<Class<?>, PropertyDescriptor[][]>());
 
     public static boolean hasDefaultConstructor(Class type) {
@@ -121,9 +122,15 @@ public class ReflectionUtils {
         return null;
     }
 
-    public static List<Method> getPublicMethods(Class clazz) {
-        ArrayList<Method> methods = new ArrayList<Method>();
-        doGetPublicMethods(clazz, methods);
+    public static Method[] getPublicMethods(Class clazz) {
+        WeakReference<Method[]> ref = publicMethods.get(clazz);
+        Method[] methods = ref != null ? ref.get() : null;
+        if (methods == null) {
+            ArrayList<Method> array = new ArrayList<Method>();
+            doGetPublicMethods(clazz, array);
+            methods = array.toArray(new Method[array.size()]);
+            publicMethods.put(clazz, new WeakReference<Method[]>(methods));
+        }
         return methods;
     }