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]

Reply via email to