diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java index 8827ae54f..7a03a2b93 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Delete.java +++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java @@ -83,15 +83,17 @@ public class Delete extends MatchingTask { return ((Comparable) foo).compareTo(bar) * -1; } }; + private Project project; private File basedir; private String[] dirs; - ReverseDirs(File basedir, String[] dirs) { + ReverseDirs(Project project, File basedir, String[] dirs) { + this.project = project; this.basedir = basedir; this.dirs = dirs; Arrays.sort(this.dirs, REVERSE); } public Iterator iterator() { - return new FileResourceIterator(basedir, dirs); + return new FileResourceIterator(project, basedir, dirs); } public boolean isFilesystemOnly() { return true; } public int size() { return dirs.length; } @@ -571,7 +573,7 @@ public class Delete extends MatchingTask { } else { resourcesToDelete.add(fs); if (includeEmpty) { - filesetDirs.add(new ReverseDirs(fsDir, fs + filesetDirs.add(new ReverseDirs(getProject(), fsDir, fs .getDirectoryScanner().getIncludedDirectories())); } } diff --git a/src/main/org/apache/tools/ant/types/ArchiveFileSet.java b/src/main/org/apache/tools/ant/types/ArchiveFileSet.java index 278038924..40152db3c 100755 --- a/src/main/org/apache/tools/ant/types/ArchiveFileSet.java +++ b/src/main/org/apache/tools/ant/types/ArchiveFileSet.java @@ -270,7 +270,7 @@ public abstract class ArchiveFileSet extends FileSet { return super.iterator(); } ArchiveScanner as = (ArchiveScanner) getDirectoryScanner(getProject()); - return as.getResourceFiles(); + return as.getResourceFiles(getProject()); } /** diff --git a/src/main/org/apache/tools/ant/types/ArchiveScanner.java b/src/main/org/apache/tools/ant/types/ArchiveScanner.java index 59b89903e..f6670f659 100755 --- a/src/main/org/apache/tools/ant/types/ArchiveScanner.java +++ b/src/main/org/apache/tools/ant/types/ArchiveScanner.java @@ -25,6 +25,7 @@ import java.util.TreeMap; import java.util.Iterator; import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.Project; import org.apache.tools.ant.types.resources.FileResource; import org.apache.tools.ant.types.resources.FileResourceIterator; @@ -189,12 +190,13 @@ public abstract class ArchiveScanner extends DirectoryScanner { /** * Get the set of Resources that represent files. + * @param project since Ant 1.8 * @return an Iterator of Resources. * @since Ant 1.7 */ - /* package-private for now */ Iterator getResourceFiles() { + /* package-private for now */ Iterator getResourceFiles(Project project) { if (src == null) { - return new FileResourceIterator(getBasedir(), getIncludedFiles()); + return new FileResourceIterator(project, getBasedir(), getIncludedFiles()); } scanme(); return matchFileEntries.values().iterator(); @@ -202,12 +204,13 @@ public abstract class ArchiveScanner extends DirectoryScanner { /** * Get the set of Resources that represent directories. + * @param project since Ant 1.8 * @return an Iterator of Resources. * @since Ant 1.7 */ - /* package-private for now */ Iterator getResourceDirectories() { + /* package-private for now */ Iterator getResourceDirectories(Project project) { if (src == null) { - return new FileResourceIterator(getBasedir(), getIncludedDirectories()); + return new FileResourceIterator(project, getBasedir(), getIncludedDirectories()); } scanme(); return matchDirEntries.values().iterator(); diff --git a/src/main/org/apache/tools/ant/types/DirSet.java b/src/main/org/apache/tools/ant/types/DirSet.java index 447db98a6..0440428f1 100644 --- a/src/main/org/apache/tools/ant/types/DirSet.java +++ b/src/main/org/apache/tools/ant/types/DirSet.java @@ -67,7 +67,7 @@ public class DirSet extends AbstractFileSet implements ResourceCollection { if (isReference()) { return ((DirSet) getRef(getProject())).iterator(); } - return new FileResourceIterator(getDir(getProject()), + return new FileResourceIterator(getProject(), getDir(getProject()), getDirectoryScanner(getProject()).getIncludedDirectories()); } diff --git a/src/main/org/apache/tools/ant/types/FileList.java b/src/main/org/apache/tools/ant/types/FileList.java index f01636e2a..8de213d74 100644 --- a/src/main/org/apache/tools/ant/types/FileList.java +++ b/src/main/org/apache/tools/ant/types/FileList.java @@ -192,7 +192,7 @@ public class FileList extends DataType implements ResourceCollection { if (isReference()) { return ((FileList) getRef(getProject())).iterator(); } - return new FileResourceIterator(dir, + return new FileResourceIterator(getProject(), dir, (String[]) (filenames.toArray(new String[filenames.size()]))); } diff --git a/src/main/org/apache/tools/ant/types/FileSet.java b/src/main/org/apache/tools/ant/types/FileSet.java index 443efe463..bfb05ebb6 100644 --- a/src/main/org/apache/tools/ant/types/FileSet.java +++ b/src/main/org/apache/tools/ant/types/FileSet.java @@ -66,7 +66,7 @@ public class FileSet extends AbstractFileSet implements ResourceCollection { if (isReference()) { return ((FileSet) getRef(getProject())).iterator(); } - return new FileResourceIterator(getDir(getProject()), + return new FileResourceIterator(getProject(), getDir(getProject()), getDirectoryScanner(getProject()).getIncludedFiles()); } diff --git a/src/main/org/apache/tools/ant/types/Path.java b/src/main/org/apache/tools/ant/types/Path.java index abf4dce6d..60b9c5b6f 100644 --- a/src/main/org/apache/tools/ant/types/Path.java +++ b/src/main/org/apache/tools/ant/types/Path.java @@ -121,7 +121,7 @@ public class Path extends DataType implements Cloneable, ResourceCollection { * @return an iterator. */ public Iterator iterator() { - return new FileResourceIterator(null, parts); + return new FileResourceIterator(getProject(), null, parts); } /** @@ -688,7 +688,7 @@ public class Path extends DataType implements Cloneable, ResourceCollection { } dieOnCircularReference(); if (getPreserveBC()) { - return new FileResourceIterator(null, list()); + return new FileResourceIterator(getProject(), null, list()); } return union == null ? EMPTY_ITERATOR : assertFilesystemOnly(union).iterator(); diff --git a/src/main/org/apache/tools/ant/types/resources/BCFileSet.java b/src/main/org/apache/tools/ant/types/resources/BCFileSet.java index 49e2e45e7..c8a079936 100644 --- a/src/main/org/apache/tools/ant/types/resources/BCFileSet.java +++ b/src/main/org/apache/tools/ant/types/resources/BCFileSet.java @@ -50,7 +50,7 @@ public class BCFileSet extends FileSet { if (isReference()) { return ((FileSet) getRef(getProject())).iterator(); } - FileResourceIterator result = new FileResourceIterator(getDir()); + FileResourceIterator result = new FileResourceIterator(getProject(), getDir()); result.addFiles(getDirectoryScanner().getIncludedFiles()); result.addFiles(getDirectoryScanner().getIncludedDirectories()); return result; diff --git a/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java b/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java index a4bdbda65..cc262f702 100644 --- a/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java +++ b/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java @@ -21,39 +21,78 @@ import java.io.File; import java.util.Iterator; import java.util.NoSuchElementException; +import org.apache.tools.ant.Project; + /** * Iterator of FileResources from filenames. * @since Ant 1.7 */ public class FileResourceIterator implements Iterator { + private Project project; private File basedir; private String[] files; private int pos = 0; /** * Construct a new FileResourceIterator. + * @deprecated in favor of {@link FileResourceIterator#FileResourceIterator(Project)} */ public FileResourceIterator() { } + /** + * Create a new FileResourceIterator. + * @param project associated Project instance + * @since Ant 1.8 + */ + public FileResourceIterator(Project project) { + this.project = project; + } + /** * Construct a new FileResourceIterator relative to the specified * base directory. - * @param f the base directory of this instance. + * @param basedir the base directory of this instance. + * @deprecated in favor of {@link FileResourceIterator#FileResourceIterator(Project, File)} + */ + public FileResourceIterator(File basedir) { + this(null, basedir); + } + + /** + * Construct a new FileResourceIterator relative to the specified + * base directory. + * @param project associated Project instance + * @param basedir the base directory of this instance. + * @since Ant 1.8 + */ + public FileResourceIterator(Project project, File basedir) { + this(project); + this.basedir = basedir; + } + + /** + * Construct a new FileResourceIterator over the specified filenames, + * relative to the specified base directory. + * @param basedir the base directory of this instance. + * @param filenames the String[] of filenames. + * @deprecated in favor of {@link FileResourceIterator#FileResourceIterator(Project, File, String[])} */ - public FileResourceIterator(File f) { - basedir = f; + public FileResourceIterator(File basedir, String[] filenames) { + this(null, basedir, filenames); } /** * Construct a new FileResourceIterator over the specified filenames, * relative to the specified base directory. - * @param f the base directory of this instance. - * @param s the String[] of filenames. + * @param project associated Project instance + * @param basedir the base directory of this instance. + * @param filenames the String[] of filenames. + * @since Ant 1.8 */ - public FileResourceIterator(File f, String[] s) { - this(f); - addFiles(s); + public FileResourceIterator(Project project, File basedir, String[] filenames) { + this(project, basedir); + addFiles(filenames); } /** @@ -101,7 +140,9 @@ public class FileResourceIterator implements Iterator { if (!hasNext()) { throw new NoSuchElementException(); } - return new FileResource(basedir, files[pos++]); + FileResource result = new FileResource(basedir, files[pos++]); + result.setProject(project); + return result; } } diff --git a/src/main/org/apache/tools/ant/types/resources/Files.java b/src/main/org/apache/tools/ant/types/resources/Files.java index 394f5debd..cfd7190a3 100644 --- a/src/main/org/apache/tools/ant/types/resources/Files.java +++ b/src/main/org/apache/tools/ant/types/resources/Files.java @@ -321,7 +321,7 @@ public class Files extends AbstractSelectorContainer if (fct + dct == 0) { return EMPTY_ITERATOR; } - FileResourceIterator result = new FileResourceIterator(); + FileResourceIterator result = new FileResourceIterator(getProject()); if (fct > 0) { result.addFiles(ds.getIncludedFiles()); }