Return-Path: Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: (qmail 81144 invoked from network); 28 Jan 2010 14:28:13 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 28 Jan 2010 14:28:13 -0000 Received: (qmail 32727 invoked by uid 500); 28 Jan 2010 14:28:12 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 32656 invoked by uid 500); 28 Jan 2010 14:28:12 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 32647 invoked by uid 99); 28 Jan 2010 14:28:12 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 28 Jan 2010 14:28:12 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 28 Jan 2010 14:28:11 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 56DC92388980; Thu, 28 Jan 2010 14:27:51 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r904101 - /commons/proper/lang/branches/LANG_2_X/src/main/java/org/apache/commons/lang/ClassUtils.java Date: Thu, 28 Jan 2010 14:27:51 -0000 To: commits@commons.apache.org From: niallp@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100128142751.56DC92388980@eris.apache.org> 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 null + * @param interfacesFound the Set 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 // ----------------------------------------------------------------------