Author: mbenson Date: Tue Jul 24 16:05:39 2007 New Revision: 559252 URL: http://svn.apache.org/viewvc?view=rev&rev=559252 Log: Merge fix for Bugzilla 42967.
Modified: ant/core/branches/ANT_17_BRANCH/WHATSNEW ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/types/Path.java Modified: ant/core/branches/ANT_17_BRANCH/WHATSNEW URL: http://svn.apache.org/viewvc/ant/core/branches/ANT_17_BRANCH/WHATSNEW?view=diff&rev=559252&r1=559251&r2=559252 ============================================================================== --- ant/core/branches/ANT_17_BRANCH/WHATSNEW (original) +++ ant/core/branches/ANT_17_BRANCH/WHATSNEW Tue Jul 24 16:05:39 2007 @@ -105,6 +105,9 @@ * Modified selector doesn't update the cache if only one file has changed. Bugzilla 42802. +* Regression: Path subclasses that overrode list() stopped working in + resourceCollection contexts in Ant 1.7.0. Bugzilla 42967. + Other changes: -------------- * <script> now has basic support for JavaFX scripts Modified: ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/types/Path.java URL: http://svn.apache.org/viewvc/ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/types/Path.java?view=diff&rev=559252&r1=559251&r2=559252 ============================================================================== --- ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/types/Path.java (original) +++ ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/types/Path.java Tue Jul 24 16:05:39 2007 @@ -19,6 +19,7 @@ package org.apache.tools.ant.types; import java.io.File; +import java.lang.reflect.Method; import java.util.Collections; import java.util.Iterator; import java.util.Locale; @@ -141,6 +142,8 @@ } + private Boolean preserveBC; + private Union union = null; /** @@ -684,6 +687,9 @@ return ((Path) getCheckedRef()).iterator(); } dieOnCircularReference(); + if (getPreserveBC()) { + return new FileResourceIterator(null, list()); + } return union == null ? EMPTY_ITERATOR : assertFilesystemOnly(union).iterator(); } @@ -713,5 +719,33 @@ + " allows only filesystem resources."); } return rc; + } + + /** + * Helps determine whether to preserve BC by calling <code>list()</code> on subclasses. + * The default behavior of this method is to return <code>true</code> for any subclass + * that implements <code>list()</code>; this can, of course, be avoided by overriding + * this method to return <code>false</code>. It is not expected that the result of this + * method should change over time, thus it is called only once. + * @return <code>true</code> if <code>iterator()</code> should delegate to <code>list()</code>. + */ + protected boolean delegateIteratorToList() { + if (getClass().equals(Path.class)) { + return false; + } + try { + Method listMethod = getClass().getMethod("list", (Class[]) null); + return !listMethod.getDeclaringClass().equals(Path.class); + } catch (Exception e) { + //shouldn't happen, but + return false; + } + } + + private synchronized boolean getPreserveBC() { + if (preserveBC == null) { + preserveBC = delegateIteratorToList() ? Boolean.TRUE : Boolean.FALSE; + } + return preserveBC.booleanValue(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]