Author: mbenson
Date: Tue Jul 24 09:32:09 2007
New Revision: 559096
URL: http://svn.apache.org/viewvc?view=rev&rev=559096
Log:
Regression: Path subclasses that overrode list() stopped working in
resourceCollection contexts in Ant 1.7.0. Bugzilla 42967.
Modified:
ant/core/trunk/WHATSNEW
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?view=diff&rev=559096&r1=559095&r2=559096
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Tue Jul 24 09:32:09 2007
@@ -124,6 +124,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/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?view=diff&rev=559096&r1=559095&r2=559096
==============================================================================
--- 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 Tue Jul 24
09:32:09 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 final boolean preserveBC = delegateIteratorToList();
+
private Union union = null;
/**
@@ -684,6 +687,9 @@
return ((Path) getCheckedRef()).iterator();
}
dieOnCircularReference();
+ if (preserveBC) {
+ return new FileResourceIterator(null, list());
+ }
return union == null ? EMPTY_ITERATOR
: assertFilesystemOnly(union).iterator();
}
@@ -713,5 +719,27 @@
+ " 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 a single time during
instance
+ * initialization.
+ * @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;
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]