Author: niallp
Date: Thu Jan 28 14:27:50 2010
New Revision: 904101

URL: http://svn.apache.org/viewvc?rev=904101&view=rev
Log:
Partial Port of LANG-500 to 2.x branch - Improving performance of 
getAllInterfaces (changes couldn't be fully ported as LinkedHashSet requires 
JDK 1.4)

Modified:
    
commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/ClassUtils.java

Modified: 
commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/ClassUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/ClassUtils.java?rev=904101&r1=904100&r2=904101&view=diff
==============================================================================
--- 
commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/ClassUtils.java
 (original)
+++ 
commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/ClassUtils.java
 Thu Jan 28 14:27:50 2010
@@ -314,25 +314,33 @@
         if (cls == null) {
             return null;
         }
-        List list = new ArrayList();
+
+        List interfacesFound = new ArrayList();
+        getAllInterfaces(cls, interfacesFound);
+
+        return interfacesFound;
+    }
+
+    /**
+     * Get the interfaces for the specified class.
+     *
+     * @param cls  the class to look up, may be <code>null</code>
+     * @param interfacesFound the <code>Set</code> of interfaces for the class
+     */
+    private static void getAllInterfaces(Class cls, List interfacesFound) {
         while (cls != null) {
             Class[] interfaces = cls.getInterfaces();
+
             for (int i = 0; i < interfaces.length; i++) {
-                if (list.contains(interfaces[i]) == false) {
-                    list.add(interfaces[i]);
-                }
-                List superInterfaces = getAllInterfaces(interfaces[i]);
-                for (Iterator it = superInterfaces.iterator(); it.hasNext();) {
-                    Class intface = (Class) it.next();
-                    if (list.contains(intface) == false) {
-                        list.add(intface);
-                    }
+                if (!interfacesFound.contains(interfaces[i])) {
+                    interfacesFound.add(interfaces[i]);
+                    getAllInterfaces(interfaces[i], interfacesFound);
                 }
             }
+
             cls = cls.getSuperclass();
-        }
-        return list;
-    }
+         }
+     }
 
     // Convert list
     // ----------------------------------------------------------------------


Reply via email to