diff --git a/src/main/org/apache/tools/ant/taskdefs/Checksum.java b/src/main/org/apache/tools/ant/taskdefs/Checksum.java index 65e257f67..353af08ca 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Checksum.java +++ b/src/main/org/apache/tools/ant/taskdefs/Checksum.java @@ -394,7 +394,8 @@ public class Checksum extends MatchingTask implements Condition { if (resources != null) { for (Iterator i = resources.iterator(); i.hasNext();) { Resource r = (Resource) i.next(); - File src = ((FileProvider) r).getFile(); + File src = ((FileProvider) r.as(FileProvider.class)) + .getFile(); if (totalproperty != null || todir != null) { // Use '/' to calculate digest based on file name. // This is required in order to get the same result diff --git a/src/main/org/apache/tools/ant/taskdefs/Copy.java b/src/main/org/apache/tools/ant/taskdefs/Copy.java index 9943cd619..d37b16af2 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Copy.java +++ b/src/main/org/apache/tools/ant/taskdefs/Copy.java @@ -469,8 +469,9 @@ public class Copy extends Task { File baseDir = NULL_FILE_PLACEHOLDER; String name = r.getName(); - if (r instanceof FileProvider) { - FileResource fr = ResourceUtils.asFileResource((FileProvider) r); + FileProvider fp = (FileProvider) r.as(FileProvider.class); + if (fp != null) { + FileResource fr = ResourceUtils.asFileResource(fp); baseDir = getKeyFile(fr.getBaseDir()); if (fr.getBaseDir() == null) { name = fr.getFile().getAbsolutePath(); @@ -480,7 +481,7 @@ public class Copy extends Task { // copying of dirs is trivial and can be done // for non-file resources as well as for real // files. - if (r.isDirectory() || r instanceof FileProvider) { + if (r.isDirectory() || fp != null) { add(baseDir, name, r.isDirectory() ? dirsByBasedir : filesByBasedir); @@ -626,7 +627,8 @@ public class Copy extends Task { throw new BuildException( "Cannot perform operation from directory to file."); } else if (rc.size() == 1) { - FileProvider r = (FileProvider) rc.iterator().next(); + Resource res = (Resource) rc.iterator().next(); + FileProvider r = (FileProvider) res.as(FileProvider.class); if (file == null) { file = r.getFile(); rcs.removeElementAt(0); diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java index f131e1c74..ce47cbffe 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Delete.java +++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java @@ -30,6 +30,7 @@ import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.taskdefs.condition.Os; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.PatternSet; +import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.ResourceCollection; import org.apache.tools.ant.types.resources.FileProvider; import org.apache.tools.ant.types.resources.Sort; @@ -646,7 +647,9 @@ public class Delete extends MatchingTask { for (Iterator iter = resourcesToDelete.iterator(); iter.hasNext();) { // nonexistent resources could only occur if we already // deleted something from a fileset: - File f = ((FileProvider) iter.next()).getFile(); + Resource r = (Resource) iter.next(); + File f = ((FileProvider) r.as(FileProvider.class)) + .getFile(); if (!f.exists()) { continue; } diff --git a/src/main/org/apache/tools/ant/taskdefs/Echo.java b/src/main/org/apache/tools/ant/taskdefs/Echo.java index 341b750ef..0218b3e61 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Echo.java +++ b/src/main/org/apache/tools/ant/taskdefs/Echo.java @@ -99,7 +99,8 @@ public class Echo extends Task { throw new BuildException("Cannot set > 1 output target"); } this.output = output; - this.file = output instanceof FileProvider ? ((FileProvider) output).getFile() : null; + FileProvider fp = (FileProvider) output.as(FileProvider.class); + this.file = fp != null ? fp.getFile() : null; } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java index 36fd67a31..0e3147190 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java +++ b/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java @@ -426,8 +426,9 @@ public class ExecuteOn extends ExecTask { File base = null; String name = res.getName(); - if (res instanceof FileProvider) { - FileResource fr = ResourceUtils.asFileResource((FileProvider) res); + FileProvider fp = (FileProvider) res.as(FileProvider.class); + if (fp != null) { + FileResource fr = ResourceUtils.asFileResource(fp); base = fr.getBaseDir(); if (base == null) { name = fr.getFile().getAbsolutePath(); diff --git a/src/main/org/apache/tools/ant/taskdefs/Expand.java b/src/main/org/apache/tools/ant/taskdefs/Expand.java index bef0079d3..0b6243fb3 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Expand.java +++ b/src/main/org/apache/tools/ant/taskdefs/Expand.java @@ -139,8 +139,9 @@ public class Expand extends Task { continue; } - if (r instanceof FileProvider) { - expandFile(FILE_UTILS, ((FileProvider) r).getFile(), dest); + FileProvider fp = (FileProvider) r.as(FileProvider.class); + if (fp != null) { + expandFile(FILE_UTILS, fp.getFile(), dest); } else { expandResource(r, dest); } diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java index d830098ee..2d83f3b8e 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java @@ -45,6 +45,7 @@ import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.PatternSet; import org.apache.tools.ant.types.Reference; +import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.ResourceCollection; import org.apache.tools.ant.types.resources.FileProvider; import org.apache.tools.ant.util.FileUtils; @@ -2313,7 +2314,8 @@ public class Javadoc extends Task { } Iterator iter = rc.iterator(); while (iter.hasNext()) { - sf.addElement(new SourceFile(((FileProvider) iter.next()) + Resource r = (Resource) iter.next(); + sf.addElement(new SourceFile(((FileProvider) r.as(FileProvider.class)) .getFile())); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/Pack.java b/src/main/org/apache/tools/ant/taskdefs/Pack.java index 6b5a34fca..d2c50f47d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Pack.java +++ b/src/main/org/apache/tools/ant/taskdefs/Pack.java @@ -75,8 +75,9 @@ public abstract class Pack extends Task { if (src.isDirectory()) { throw new BuildException("the source can't be a directory"); } - if (src instanceof FileProvider) { - source = ((FileProvider) src).getFile(); + FileProvider fp = (FileProvider) src.as(FileProvider.class); + if (fp != null) { + source = fp.getFile(); } else if (!supportsNonFileResources()) { throw new BuildException("Only FileSystem resources are supported."); } diff --git a/src/main/org/apache/tools/ant/taskdefs/SQLExec.java b/src/main/org/apache/tools/ant/taskdefs/SQLExec.java index 0411fda31..5bc4c5047 100644 --- a/src/main/org/apache/tools/ant/taskdefs/SQLExec.java +++ b/src/main/org/apache/tools/ant/taskdefs/SQLExec.java @@ -570,9 +570,12 @@ public class SQLExec extends JDBCTask { if (output != null) { log("Opening PrintStream to output Resource " + output, Project.MSG_VERBOSE); OutputStream os; - if (output instanceof FileProvider) { - os = new FileOutputStream(((FileProvider) output).getFile(), append); + FileProvider fp = + (FileProvider) output.as(FileProvider.class); + if (fp != null) { + os = new FileOutputStream(fp.getFile(), append); } else { + // TODO use Appendable os = output.getOutputStream(); if (append) { log("Ignoring append=true for non-file resource " + output, Project.MSG_WARN); diff --git a/src/main/org/apache/tools/ant/taskdefs/SignJar.java b/src/main/org/apache/tools/ant/taskdefs/SignJar.java index ed62f3a0e..9a6c671fa 100644 --- a/src/main/org/apache/tools/ant/taskdefs/SignJar.java +++ b/src/main/org/apache/tools/ant/taskdefs/SignJar.java @@ -26,6 +26,7 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.condition.IsSigned; import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.resources.FileProvider; import org.apache.tools.ant.types.resources.FileResource; import org.apache.tools.ant.util.FileUtils; @@ -322,7 +323,9 @@ public class SignJar extends AbstractJarSignerTask { // deal with the paths Iterator iter = sources.iterator(); while (iter.hasNext()) { - FileResource fr = ResourceUtils.asFileResource((FileProvider) iter.next()); + Resource r = (Resource) iter.next(); + FileResource fr = ResourceUtils + .asFileResource((FileProvider) r.as(FileProvider.class)); //calculate our destination directory; it is either the destDir //attribute, or the base dir of the fileset (for in situ updates) diff --git a/src/main/org/apache/tools/ant/taskdefs/Tar.java b/src/main/org/apache/tools/ant/taskdefs/Tar.java index d1532a2ad..69a7f083b 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Tar.java +++ b/src/main/org/apache/tools/ant/taskdefs/Tar.java @@ -561,7 +561,9 @@ public class Tar extends MatchingTask { HashMap basedirToFilesMap = new HashMap(); Iterator iter = rc.iterator(); while (iter.hasNext()) { - FileResource r = ResourceUtils.asFileResource((FileProvider) iter.next()); + Resource res = (Resource) iter.next(); + FileResource r = ResourceUtils + .asFileResource((FileProvider) res.as(FileProvider.class)); File base = r.getBaseDir(); if (base == null) { base = Copy.NULL_FILE_PLACEHOLDER; @@ -654,7 +656,8 @@ public class Tar extends MatchingTask { } else if (rc.isFilesystemOnly()) { Iterator iter = rc.iterator(); while (iter.hasNext()) { - File f = ((FileProvider) iter.next()).getFile(); + Resource r = (Resource) iter.next(); + File f = ((FileProvider) r.as(FileProvider.class)).getFile(); tarFile(f, tOut, f.getName(), tfs); } } else { // non-file resources diff --git a/src/main/org/apache/tools/ant/taskdefs/Touch.java b/src/main/org/apache/tools/ant/taskdefs/Touch.java index 8c965979b..80d4babed 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Touch.java +++ b/src/main/org/apache/tools/ant/taskdefs/Touch.java @@ -340,9 +340,10 @@ public class Touch extends Task { private void touch(Resource r, long defaultTimestamp) { if (fileNameMapper == null) { - if (r instanceof FileProvider) { + FileProvider fp = (FileProvider) r.as(FileProvider.class); + if (fp != null) { // use this to create file and deal with non-writable files - touch(((FileProvider) r).getFile(), defaultTimestamp); + touch(fp.getFile(), defaultTimestamp); } else { ((Touchable) r.as(Touchable.class)).touch(defaultTimestamp); } diff --git a/src/main/org/apache/tools/ant/taskdefs/Truncate.java b/src/main/org/apache/tools/ant/taskdefs/Truncate.java index 0f059adb2..5ca5e0637 100755 --- a/src/main/org/apache/tools/ant/taskdefs/Truncate.java +++ b/src/main/org/apache/tools/ant/taskdefs/Truncate.java @@ -26,6 +26,7 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.ResourceCollection; import org.apache.tools.ant.types.resources.FileProvider; import org.apache.tools.ant.types.resources.FileResource; @@ -126,7 +127,8 @@ public class Truncate extends Task { throw new BuildException(NO_CHILD); } for (Iterator it = path.iterator(); it.hasNext();) { - File f = ((FileProvider) it.next()).getFile(); + Resource r = (Resource) it.next(); + File f = ((FileProvider) r.as(FileProvider.class)).getFile(); if (shouldProcess(f)) { process(f); } diff --git a/src/main/org/apache/tools/ant/taskdefs/Unpack.java b/src/main/org/apache/tools/ant/taskdefs/Unpack.java index 9c04cefe8..393ef9fb3 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Unpack.java +++ b/src/main/org/apache/tools/ant/taskdefs/Unpack.java @@ -91,8 +91,9 @@ public abstract class Unpack extends Task { throw new BuildException( "the archive " + src.getName() + " can't be a directory"); } - if (src instanceof FileProvider) { - source = ((FileProvider) src).getFile(); + FileProvider fp = (FileProvider) src.as(FileProvider.class); + if (fp != null) { + source = fp.getFile(); } else if (!supportsNonFileResources()) { throw new BuildException( "The source " + src.getName() diff --git a/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java b/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java index abdc991c3..c4f9cb87d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java +++ b/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java @@ -24,6 +24,7 @@ import org.apache.tools.ant.filters.ChainableReader; import org.apache.tools.ant.types.RedirectorElement; import org.apache.tools.ant.types.FilterChain; import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.resources.FileProvider; import org.apache.tools.ant.types.resources.FileResource; @@ -91,7 +92,8 @@ public class VerifyJar extends AbstractJarSignerTask { Path sources = createUnifiedSourcePath(); Iterator iter = sources.iterator(); while (iter.hasNext()) { - FileProvider fr = (FileProvider) iter.next(); + Resource r = (Resource) iter.next(); + FileProvider fr = (FileProvider) r.as(FileProvider.class); verifyOneJar(fr.getFile()); } diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java index 82ee81c35..f11627c4d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java +++ b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java @@ -592,8 +592,9 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { } File base = baseDir; String name = r.getName(); - if (r instanceof FileProvider) { - FileResource f = ResourceUtils.asFileResource((FileProvider) r); + FileProvider fp = (FileProvider) r.as(FileProvider.class); + if (fp != null) { + FileResource f = ResourceUtils.asFileResource(fp); base = f.getBaseDir(); if (base == null) { name = f.getFile().getAbsolutePath(); @@ -989,8 +990,10 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { // If we are here we cannot set the stylesheet as // a resource, but we can set it as a file. So, // we make an attempt to get it as a file - if (stylesheet instanceof FileProvider) { - liaison.setStylesheet(((FileProvider) stylesheet).getFile()); + FileProvider fp = + (FileProvider) stylesheet.as(FileProvider.class); + if (fp != null) { + liaison.setStylesheet(fp.getFile()); } else { throw new BuildException(liaison.getClass().toString() + " accepts the stylesheet only as a file", getLocation()); diff --git a/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java b/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java index 1a18a09a3..0f9832d4d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java +++ b/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java @@ -244,8 +244,9 @@ public class XmlProperty extends org.apache.tools.ant.Task { DocumentBuilder builder = factory.newDocumentBuilder(); builder.setEntityResolver(getEntityResolver()); Document document = null; - if (src instanceof FileProvider) { - document = builder.parse(((FileProvider) src).getFile()); + FileProvider fp = (FileProvider) src.as(FileProvider.class); + if (fp != null) { + document = builder.parse(fp.getFile()); } else { document = builder.parse(src.getInputStream()); } @@ -574,7 +575,7 @@ public class XmlProperty extends org.apache.tools.ant.Task { if (src.isDirectory()) { throw new BuildException("the source can't be a directory"); } - if (src instanceof FileProvider || supportsNonFileResources()) { + if (src.as(FileProvider.class) != null || supportsNonFileResources()) { this.src = src; } else { throw new BuildException("Only FileSystem resources are supported."); @@ -669,7 +670,8 @@ public class XmlProperty extends org.apache.tools.ant.Task { * @return the file attribute. */ protected File getFile () { - return src instanceof FileProvider ? ((FileProvider) src).getFile() : null; + FileProvider fp = (FileProvider) src.as(FileProvider.class); + return fp != null ? fp.getFile() : null; } /** @@ -679,8 +681,9 @@ public class XmlProperty extends org.apache.tools.ant.Task { // delegate this way around to support subclasses that // overwrite getFile File f = getFile(); - return f == null ? src : src instanceof FileProvider - && ((FileProvider) src).getFile().equals(f) ? src : new FileResource(f); + FileProvider fp = (FileProvider) src.as(FileProvider.class); + return f == null ? src : fp != null + && fp.getFile().equals(f) ? src : new FileResource(f); } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/Zip.java b/src/main/org/apache/tools/ant/taskdefs/Zip.java index 5d6961be8..ae4952910 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Zip.java +++ b/src/main/org/apache/tools/ant/taskdefs/Zip.java @@ -927,8 +927,9 @@ public class Zip extends MatchingTask { continue; } File base = null; - if (resources[i] instanceof FileProvider) { - base = ResourceUtils.asFileResource((FileProvider) resources[i]).getBaseDir(); + FileProvider fp = (FileProvider) resources[i].as(FileProvider.class); + if (fp != null) { + base = ResourceUtils.asFileResource(fp).getBaseDir(); } if (resources[i].isDirectory()) { if (!name.endsWith("/")) { @@ -940,8 +941,8 @@ public class Zip extends MatchingTask { ArchiveFileSet.DEFAULT_DIR_MODE); if (!resources[i].isDirectory()) { - if (resources[i] instanceof FileProvider) { - File f = ((FileProvider) resources[i]).getFile(); + if (fp != null) { + File f = (fp).getFile(); zipFile(f, zOut, name, ArchiveFileSet.DEFAULT_FILE_MODE); } else { InputStream is = null; @@ -1321,9 +1322,9 @@ public class Zip extends MatchingTask { } for (int j = 0; j < initialResources[i].length; j++) { - if (initialResources[i][j] instanceof FileProvider - && zipFile.equals(((FileProvider) - initialResources[i][j]).getFile())) { + FileProvider fp = + (FileProvider) initialResources[i][j].as(FileProvider.class); + if (fp != null && zipFile.equals(fp.getFile())) { throw new BuildException("A zip file cannot include " + "itself", getLocation()); } diff --git a/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java b/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java index 9eb03d44d..b0a4d62ab 100644 --- a/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java @@ -28,6 +28,7 @@ import org.apache.tools.ant.Task; import org.apache.tools.ant.types.EnumeratedAttribute; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.resources.FileProvider; import org.apache.tools.ant.types.resources.FileResource; import org.apache.tools.ant.util.ClasspathUtils; @@ -533,7 +534,9 @@ public class EmailTask extends Task { Iterator iter = attachments.iterator(); while (iter.hasNext()) { - files.addElement(((FileProvider) iter.next()).getFile()); + Resource r = (Resource) iter.next(); + files.addElement(((FileProvider) r.as(FileProvider.class)) + .getFile()); } } // let the user know what's going to happen diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java index b6d2a52d2..ad8a47436 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java @@ -272,9 +272,10 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware } private String resourceToURI(Resource resource) { - if (resource instanceof FileProvider) { - File f = ((FileProvider) resource).getFile(); - return FILE_UTILS.toURI(f.getAbsolutePath()); + // TODO turn URLResource into Provider + FileProvider fp = (FileProvider) resource.as(FileProvider.class); + if (fp != null) { + return FILE_UTILS.toURI(fp.getFile().getAbsolutePath()); } if (resource instanceof URLResource) { URL u = ((URLResource) resource).getURL(); diff --git a/src/main/org/apache/tools/ant/types/ArchiveFileSet.java b/src/main/org/apache/tools/ant/types/ArchiveFileSet.java index c07fc25f8..29ae4d803 100755 --- a/src/main/org/apache/tools/ant/types/ArchiveFileSet.java +++ b/src/main/org/apache/tools/ant/types/ArchiveFileSet.java @@ -166,8 +166,11 @@ public abstract class ArchiveFileSet extends FileSet { * @return the archive in case the archive is a file, null otherwise. */ public File getSrc() { - if (src instanceof FileProvider) { - return ((FileProvider) src).getFile(); + if (src != null) { + FileProvider fp = (FileProvider) src.as(FileProvider.class); + if (fp != null) { + return fp.getFile(); + } } return null; } diff --git a/src/main/org/apache/tools/ant/types/ArchiveScanner.java b/src/main/org/apache/tools/ant/types/ArchiveScanner.java index d525ee36c..9ad3df314 100755 --- a/src/main/org/apache/tools/ant/types/ArchiveScanner.java +++ b/src/main/org/apache/tools/ant/types/ArchiveScanner.java @@ -115,8 +115,9 @@ public abstract class ArchiveScanner extends DirectoryScanner { */ public void setSrc(Resource src) { this.src = src; - if (src instanceof FileProvider) { - srcFile = ((FileProvider) src).getFile(); + FileProvider fp = (FileProvider) src.as(FileProvider.class); + if (fp != null) { + srcFile = fp.getFile(); } } diff --git a/src/main/org/apache/tools/ant/types/Resource.java b/src/main/org/apache/tools/ant/types/Resource.java index 40ccbcdff..fe7ece5c8 100644 --- a/src/main/org/apache/tools/ant/types/Resource.java +++ b/src/main/org/apache/tools/ant/types/Resource.java @@ -380,7 +380,7 @@ public class Resource extends DataType implements Cloneable, Comparable, Resourc */ public boolean isFilesystemOnly() { return (isReference() && ((Resource) getCheckedRef()).isFilesystemOnly()) - || this instanceof FileProvider; + || this.as(FileProvider.class) != null; } /** diff --git a/src/main/org/apache/tools/ant/types/ZipScanner.java b/src/main/org/apache/tools/ant/types/ZipScanner.java index c1cef0952..453d51f39 100644 --- a/src/main/org/apache/tools/ant/types/ZipScanner.java +++ b/src/main/org/apache/tools/ant/types/ZipScanner.java @@ -60,8 +60,9 @@ public class ZipScanner extends ArchiveScanner { ZipFile zf = null; File srcFile = null; - if (src instanceof FileProvider) { - srcFile = ((FileProvider) src).getFile(); + FileProvider fp = (FileProvider) src.as(FileProvider.class); + if (fp != null) { + srcFile = fp.getFile(); } else { throw new BuildException("Only file provider resources are supported"); } diff --git a/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java b/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java index 649852b4f..9d3e1ec3a 100644 --- a/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java +++ b/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java @@ -28,6 +28,7 @@ import java.util.Collections; import org.apache.tools.ant.Project; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.types.DataType; +import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.ResourceCollection; /** @@ -158,7 +159,8 @@ public abstract class BaseResourceCollectionContainer /* now check each Resource in case the child only lets through files from any children IT may have: */ for (Iterator i = cacheCollection().iterator(); i.hasNext();) { - if (!(i.next() instanceof FileProvider)) { + Resource r = (Resource) i.next(); + if (r.as(FileProvider.class) == null) { return false; } } diff --git a/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java b/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java index d20721e85..23027822d 100644 --- a/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java +++ b/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java @@ -25,6 +25,7 @@ import java.util.Collection; import org.apache.tools.ant.Project; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.types.DataType; +import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.ResourceCollection; /** @@ -122,7 +123,8 @@ public abstract class BaseResourceCollectionWrapper /* now check each Resource in case the child only lets through files from any children IT may have: */ for (Iterator i = cacheCollection().iterator(); i.hasNext();) { - if (!(i.next() instanceof FileProvider)) { + Resource r = (Resource) i.next(); + if (r.as(FileProvider.class) == null) { return false; } } diff --git a/src/main/org/apache/tools/ant/types/resources/FileResource.java b/src/main/org/apache/tools/ant/types/resources/FileResource.java index 56e5803c0..20758fec7 100644 --- a/src/main/org/apache/tools/ant/types/resources/FileResource.java +++ b/src/main/org/apache/tools/ant/types/resources/FileResource.java @@ -252,16 +252,20 @@ public class FileResource extends Resource implements Touchable, FileProvider, if (this.equals(another)) { return 0; } - if (another instanceof FileProvider) { - File f = getFile(); - if (f == null) { - return -1; + if (another instanceof Resource) { + Resource r = (Resource) another; + FileProvider otherFP = (FileProvider) r.as(FileProvider.class); + if (otherFP != null) { + File f = getFile(); + if (f == null) { + return -1; + } + File of = otherFP.getFile(); + if (of == null) { + return 1; + } + return f.compareTo(of); } - File of = ((FileProvider) another).getFile(); - if (of == null) { - return 1; - } - return f.compareTo(of); } return super.compareTo(another); } diff --git a/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java b/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java index 2a9780329..68ab1bab7 100644 --- a/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java +++ b/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java @@ -38,8 +38,8 @@ public class FileSystem extends ResourceComparator { * @throws ClassCastException if either resource is not an instance of FileResource. */ protected int resourceCompare(Resource foo, Resource bar) { - File foofile = ((FileProvider) foo).getFile(); - File barfile = ((FileProvider) bar).getFile(); + File foofile = ((FileProvider) foo.as(FileProvider.class)).getFile(); + File barfile = ((FileProvider) bar.as(FileProvider.class)).getFile(); return foofile.equals(barfile) ? 0 : FILE_UTILS.isLeadingPath(foofile, barfile) ? -1 : FILE_UTILS.normalize(foofile.getAbsolutePath()).compareTo( diff --git a/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java b/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java index 3eb02ab3a..07dbf2a9c 100644 --- a/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java +++ b/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java @@ -39,8 +39,9 @@ public class ReadableSelector implements FileSelector, ResourceSelector { } public boolean isSelected(Resource r) { - if (r instanceof FileProvider) { - return isSelected(null, null, ((FileProvider) r).getFile()); + FileProvider fp = (FileProvider) r.as(FileProvider.class); + if (fp != null) { + return isSelected(null, null, fp.getFile()); } return false; } diff --git a/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java b/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java index 4dc1096a2..495a6a98c 100644 --- a/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java +++ b/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java @@ -39,8 +39,9 @@ public class WritableSelector implements FileSelector, ResourceSelector { } public boolean isSelected(Resource r) { - if (r instanceof FileProvider) { - return isSelected(null, null, ((FileProvider) r).getFile()); + FileProvider fp = (FileProvider) r.as(FileProvider.class); + if (fp != null) { + return isSelected(null, null, fp.getFile()); } return false; } diff --git a/src/main/org/apache/tools/ant/util/ResourceUtils.java b/src/main/org/apache/tools/ant/util/ResourceUtils.java index 78aedc110..8d5d1583d 100644 --- a/src/main/org/apache/tools/ant/util/ResourceUtils.java +++ b/src/main/org/apache/tools/ant/util/ResourceUtils.java @@ -521,10 +521,12 @@ public class ResourceUtils { } /** - * Convenience method to turn any fileProvider into a basic FileResource with the - * file's immediate parent as the basedir, for tasks that need one. + * Convenience method to turn any fileProvider into a basic + * FileResource with the file's immediate parent as the basedir, + * for tasks that need one. * @param fileProvider input - * @return fileProvider if it is a FileResource instance, or a new FileResource with fileProvider's file. + * @return fileProvider if it is a FileResource instance, or a new + * FileResource with fileProvider's file. * @since Ant 1.8 */ public static FileResource asFileResource(FileProvider fileProvider) {