Author: bodewig Date: Thu Aug 27 14:08:13 2009 New Revision: 808421 URL: http://svn.apache.org/viewvc?rev=808421&view=rev Log: Optionally enable caching for <path>. Should help in situations like PR 45696
Modified: ant/core/trunk/WHATSNEW ant/core/trunk/docs/manual/using.html ant/core/trunk/src/main/org/apache/tools/ant/types/Path.java Modified: ant/core/trunk/WHATSNEW URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=808421&r1=808420&r2=808421&view=diff ============================================================================== --- ant/core/trunk/WHATSNEW (original) +++ ant/core/trunk/WHATSNEW Thu Aug 27 14:08:13 2009 @@ -934,6 +934,8 @@ attribute different from the <classfileset>. Bugzilla Report 37763. + * <path> can now optionally cache its contents. + Changes from Ant 1.7.0 TO Ant 1.7.1 ============================================= Modified: ant/core/trunk/docs/manual/using.html URL: http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/using.html?rev=808421&r1=808420&r2=808421&view=diff ============================================================================== --- ant/core/trunk/docs/manual/using.html (original) +++ ant/core/trunk/docs/manual/using.html Thu Aug 27 14:08:13 2009 @@ -551,6 +551,18 @@ same level as <i>target</i>s, and reference them via their <i>id</i> attribute--see <a href="#references">References</a> for an example.</p> + +<p>By default a path like structure will re-evaluate all nested + resource collections whenever it is used, which may lead to + unnecessary re-scanning of the filesystem. Since Ant 1.8.0 path has + an optional <i>cache</i> attribute, if it is set to true, the path + instance will only scan its nested resource collections once and + assume it doesn't change during the build anymore (the default + for <i>cache</i> still is <i>false</i>). Even if you are using the + path only in a single task it may improve overall performance to set + <i>cache</i> to <i>true</i> if you are using complex nested + constructs.</p> + <p>A path-like structure can include a reference to another path-like structure (a path being itself a resource collection) via nested <code><path></code> elements:</p> @@ -563,7 +575,7 @@ <pathelement location="classes"/> </path> - <path id="tests.path"> + <path id="tests.path" cache="true"> <path refid="base.path"/> <pathelement location="testclasses"/> </path> Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/Path.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/Path.java?rev=808421&r1=808420&r2=808421&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/types/Path.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/types/Path.java Thu Aug 27 14:08:13 2009 @@ -78,6 +78,11 @@ public static Path systemBootClasspath = new Path(null, System.getProperty("sun.boot.class.path")); + static { + systemClasspath.setCache(true); + systemBootClasspath.setCache(true); + } + private static final Iterator EMPTY_ITERATOR = Collections.EMPTY_SET.iterator(); @@ -145,6 +150,7 @@ private Boolean preserveBC; private Union union = null; + private boolean cache = false; /** * Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> @@ -280,7 +286,7 @@ if (union == null) { union = new Union(); union.setProject(getProject()); - union.setCache(false); + union.setCache(cache); } union.add(c); setChecked(false); @@ -349,6 +355,17 @@ } /** + * Whether to cache the current path. + */ + public void setCache(boolean b) { + checkAttributesAllowed(); + cache = b; + if (union != null) { + union.setCache(b); + } + } + + /** * Returns all path elements defined by this and nested path objects. * @return list of path elements. */