git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@671690 13f79535-47bb-0310-9956-ffa450edef68master
@@ -83,15 +83,17 @@ public class Delete extends MatchingTask { | |||||
return ((Comparable) foo).compareTo(bar) * -1; | return ((Comparable) foo).compareTo(bar) * -1; | ||||
} | } | ||||
}; | }; | ||||
private Project project; | |||||
private File basedir; | private File basedir; | ||||
private String[] dirs; | private String[] dirs; | ||||
ReverseDirs(File basedir, String[] dirs) { | |||||
ReverseDirs(Project project, File basedir, String[] dirs) { | |||||
this.project = project; | |||||
this.basedir = basedir; | this.basedir = basedir; | ||||
this.dirs = dirs; | this.dirs = dirs; | ||||
Arrays.sort(this.dirs, REVERSE); | Arrays.sort(this.dirs, REVERSE); | ||||
} | } | ||||
public Iterator iterator() { | public Iterator iterator() { | ||||
return new FileResourceIterator(basedir, dirs); | |||||
return new FileResourceIterator(project, basedir, dirs); | |||||
} | } | ||||
public boolean isFilesystemOnly() { return true; } | public boolean isFilesystemOnly() { return true; } | ||||
public int size() { return dirs.length; } | public int size() { return dirs.length; } | ||||
@@ -571,7 +573,7 @@ public class Delete extends MatchingTask { | |||||
} else { | } else { | ||||
resourcesToDelete.add(fs); | resourcesToDelete.add(fs); | ||||
if (includeEmpty) { | if (includeEmpty) { | ||||
filesetDirs.add(new ReverseDirs(fsDir, fs | |||||
filesetDirs.add(new ReverseDirs(getProject(), fsDir, fs | |||||
.getDirectoryScanner().getIncludedDirectories())); | .getDirectoryScanner().getIncludedDirectories())); | ||||
} | } | ||||
} | } | ||||
@@ -270,7 +270,7 @@ public abstract class ArchiveFileSet extends FileSet { | |||||
return super.iterator(); | return super.iterator(); | ||||
} | } | ||||
ArchiveScanner as = (ArchiveScanner) getDirectoryScanner(getProject()); | ArchiveScanner as = (ArchiveScanner) getDirectoryScanner(getProject()); | ||||
return as.getResourceFiles(); | |||||
return as.getResourceFiles(getProject()); | |||||
} | } | ||||
/** | /** | ||||
@@ -25,6 +25,7 @@ import java.util.TreeMap; | |||||
import java.util.Iterator; | import java.util.Iterator; | ||||
import org.apache.tools.ant.DirectoryScanner; | 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.FileResource; | ||||
import org.apache.tools.ant.types.resources.FileResourceIterator; | 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. | * Get the set of Resources that represent files. | ||||
* @param project since Ant 1.8 | |||||
* @return an Iterator of Resources. | * @return an Iterator of Resources. | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
/* package-private for now */ Iterator getResourceFiles() { | |||||
/* package-private for now */ Iterator getResourceFiles(Project project) { | |||||
if (src == null) { | if (src == null) { | ||||
return new FileResourceIterator(getBasedir(), getIncludedFiles()); | |||||
return new FileResourceIterator(project, getBasedir(), getIncludedFiles()); | |||||
} | } | ||||
scanme(); | scanme(); | ||||
return matchFileEntries.values().iterator(); | return matchFileEntries.values().iterator(); | ||||
@@ -202,12 +204,13 @@ public abstract class ArchiveScanner extends DirectoryScanner { | |||||
/** | /** | ||||
* Get the set of Resources that represent directories. | * Get the set of Resources that represent directories. | ||||
* @param project since Ant 1.8 | |||||
* @return an Iterator of Resources. | * @return an Iterator of Resources. | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
/* package-private for now */ Iterator getResourceDirectories() { | |||||
/* package-private for now */ Iterator getResourceDirectories(Project project) { | |||||
if (src == null) { | if (src == null) { | ||||
return new FileResourceIterator(getBasedir(), getIncludedDirectories()); | |||||
return new FileResourceIterator(project, getBasedir(), getIncludedDirectories()); | |||||
} | } | ||||
scanme(); | scanme(); | ||||
return matchDirEntries.values().iterator(); | return matchDirEntries.values().iterator(); | ||||
@@ -67,7 +67,7 @@ public class DirSet extends AbstractFileSet implements ResourceCollection { | |||||
if (isReference()) { | if (isReference()) { | ||||
return ((DirSet) getRef(getProject())).iterator(); | return ((DirSet) getRef(getProject())).iterator(); | ||||
} | } | ||||
return new FileResourceIterator(getDir(getProject()), | |||||
return new FileResourceIterator(getProject(), getDir(getProject()), | |||||
getDirectoryScanner(getProject()).getIncludedDirectories()); | getDirectoryScanner(getProject()).getIncludedDirectories()); | ||||
} | } | ||||
@@ -192,7 +192,7 @@ public class FileList extends DataType implements ResourceCollection { | |||||
if (isReference()) { | if (isReference()) { | ||||
return ((FileList) getRef(getProject())).iterator(); | return ((FileList) getRef(getProject())).iterator(); | ||||
} | } | ||||
return new FileResourceIterator(dir, | |||||
return new FileResourceIterator(getProject(), dir, | |||||
(String[]) (filenames.toArray(new String[filenames.size()]))); | (String[]) (filenames.toArray(new String[filenames.size()]))); | ||||
} | } | ||||
@@ -66,7 +66,7 @@ public class FileSet extends AbstractFileSet implements ResourceCollection { | |||||
if (isReference()) { | if (isReference()) { | ||||
return ((FileSet) getRef(getProject())).iterator(); | return ((FileSet) getRef(getProject())).iterator(); | ||||
} | } | ||||
return new FileResourceIterator(getDir(getProject()), | |||||
return new FileResourceIterator(getProject(), getDir(getProject()), | |||||
getDirectoryScanner(getProject()).getIncludedFiles()); | getDirectoryScanner(getProject()).getIncludedFiles()); | ||||
} | } | ||||
@@ -121,7 +121,7 @@ public class Path extends DataType implements Cloneable, ResourceCollection { | |||||
* @return an iterator. | * @return an iterator. | ||||
*/ | */ | ||||
public Iterator 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(); | dieOnCircularReference(); | ||||
if (getPreserveBC()) { | if (getPreserveBC()) { | ||||
return new FileResourceIterator(null, list()); | |||||
return new FileResourceIterator(getProject(), null, list()); | |||||
} | } | ||||
return union == null ? EMPTY_ITERATOR | return union == null ? EMPTY_ITERATOR | ||||
: assertFilesystemOnly(union).iterator(); | : assertFilesystemOnly(union).iterator(); | ||||
@@ -50,7 +50,7 @@ public class BCFileSet extends FileSet { | |||||
if (isReference()) { | if (isReference()) { | ||||
return ((FileSet) getRef(getProject())).iterator(); | return ((FileSet) getRef(getProject())).iterator(); | ||||
} | } | ||||
FileResourceIterator result = new FileResourceIterator(getDir()); | |||||
FileResourceIterator result = new FileResourceIterator(getProject(), getDir()); | |||||
result.addFiles(getDirectoryScanner().getIncludedFiles()); | result.addFiles(getDirectoryScanner().getIncludedFiles()); | ||||
result.addFiles(getDirectoryScanner().getIncludedDirectories()); | result.addFiles(getDirectoryScanner().getIncludedDirectories()); | ||||
return result; | return result; | ||||
@@ -21,39 +21,78 @@ import java.io.File; | |||||
import java.util.Iterator; | import java.util.Iterator; | ||||
import java.util.NoSuchElementException; | import java.util.NoSuchElementException; | ||||
import org.apache.tools.ant.Project; | |||||
/** | /** | ||||
* Iterator of FileResources from filenames. | * Iterator of FileResources from filenames. | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
public class FileResourceIterator implements Iterator { | public class FileResourceIterator implements Iterator { | ||||
private Project project; | |||||
private File basedir; | private File basedir; | ||||
private String[] files; | private String[] files; | ||||
private int pos = 0; | private int pos = 0; | ||||
/** | /** | ||||
* Construct a new FileResourceIterator. | * Construct a new FileResourceIterator. | ||||
* @deprecated in favor of {@link FileResourceIterator#FileResourceIterator(Project)} | |||||
*/ | */ | ||||
public FileResourceIterator() { | 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 | * Construct a new FileResourceIterator relative to the specified | ||||
* base directory. | * 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, | * Construct a new FileResourceIterator over the specified filenames, | ||||
* relative to the specified base directory. | * 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()) { | if (!hasNext()) { | ||||
throw new NoSuchElementException(); | throw new NoSuchElementException(); | ||||
} | } | ||||
return new FileResource(basedir, files[pos++]); | |||||
FileResource result = new FileResource(basedir, files[pos++]); | |||||
result.setProject(project); | |||||
return result; | |||||
} | } | ||||
} | } |
@@ -321,7 +321,7 @@ public class Files extends AbstractSelectorContainer | |||||
if (fct + dct == 0) { | if (fct + dct == 0) { | ||||
return EMPTY_ITERATOR; | return EMPTY_ITERATOR; | ||||
} | } | ||||
FileResourceIterator result = new FileResourceIterator(); | |||||
FileResourceIterator result = new FileResourceIterator(getProject()); | |||||
if (fct > 0) { | if (fct > 0) { | ||||
result.addFiles(ds.getIncludedFiles()); | result.addFiles(ds.getIncludedFiles()); | ||||
} | } | ||||