Author: peterreilly Date: Wed Sep 20 15:32:24 2006 New Revision: 448377 URL: http://svn.apache.org/viewvc?view=rev&rev=448377 Log: Performace: cache last FileUtils.fromUri() result
Modified: ant/core/trunk/src/main/org/apache/tools/ant/util/FileUtils.java Modified: ant/core/trunk/src/main/org/apache/tools/ant/util/FileUtils.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/FileUtils.java?view=diff&rev=448377&r1=448376&r2=448377 ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/util/FileUtils.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/util/FileUtils.java Wed Sep 20 15:32:24 2006 @@ -87,6 +87,16 @@ /** + * A one item cache for fromUri. + * fromUri is called for each element when parseing ant build + * files. It is a costly operation. This just caches the result + * of the last call. + */ + private Object cacheFromUriLock = new Object(); + private String cacheFromUriRequest = null; + private String cacheFromUriResponse = null; + + /** * Factory method. * * @return a new instance of FileUtils. @@ -1137,8 +1147,17 @@ * @since Ant 1.6 */ public String fromURI(String uri) { - String path = Locator.fromURI(uri); - return isAbsolutePath(path) ? normalize(path).getAbsolutePath() : path; + synchronized (cacheFromUriLock) { + if (uri.equals(cacheFromUriRequest)) { + return cacheFromUriResponse; + } + String path = Locator.fromURI(uri); + String ret = isAbsolutePath(path) + ? normalize(path).getAbsolutePath() : path; + cacheFromUriRequest = uri; + cacheFromUriResponse = ret; + return ret; + } } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]