You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2008/11/17 22:13:05 UTC

svn commit: r718387 - in /ant/core/trunk/src/main/org/apache/tools/ant: taskdefs/ taskdefs/email/ taskdefs/optional/ types/ types/resources/ types/resources/comparators/ types/selectors/ util/

Author: bodewig
Date: Mon Nov 17 13:13:04 2008
New Revision: 718387

URL: http://svn.apache.org/viewvc?rev=718387&view=rev
Log:
use adapter instead of instanceof checks

Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Echo.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Expand.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Pack.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SQLExec.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SignJar.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Touch.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Truncate.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Unpack.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveFileSet.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveScanner.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/Resource.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/ZipScanner.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java
    ant/core/trunk/src/main/org/apache/tools/ant/util/ResourceUtils.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java Mon Nov 17 13:13:04 2008
@@ -394,7 +394,8 @@
             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

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java Mon Nov 17 13:13:04 2008
@@ -469,8 +469,9 @@
 
                         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 @@
                         // 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 @@
                     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);

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java Mon Nov 17 13:13:04 2008
@@ -30,6 +30,7 @@
 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 @@
                 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;
                     }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Echo.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Echo.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Echo.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Echo.java Mon Nov 17 13:13:04 2008
@@ -99,7 +99,8 @@
             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;
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java Mon Nov 17 13:13:04 2008
@@ -426,8 +426,9 @@
 
                     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();

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Expand.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Expand.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Expand.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Expand.java Mon Nov 17 13:13:04 2008
@@ -139,8 +139,9 @@
                 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);
             }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javadoc.java Mon Nov 17 13:13:04 2008
@@ -45,6 +45,7 @@
 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 @@
             }
             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()));
             }
         }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Pack.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Pack.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Pack.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Pack.java Mon Nov 17 13:13:04 2008
@@ -75,8 +75,9 @@
         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.");
         }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SQLExec.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SQLExec.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SQLExec.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SQLExec.java Mon Nov 17 13:13:04 2008
@@ -570,9 +570,12 @@
                     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);

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SignJar.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SignJar.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SignJar.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/SignJar.java Mon Nov 17 13:13:04 2008
@@ -26,6 +26,7 @@
 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 @@
             // 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)

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java Mon Nov 17 13:13:04 2008
@@ -561,7 +561,9 @@
             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 @@
         } 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

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Touch.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Touch.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Touch.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Touch.java Mon Nov 17 13:13:04 2008
@@ -340,9 +340,10 @@
 
     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);
             }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Truncate.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Truncate.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Truncate.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Truncate.java Mon Nov 17 13:13:04 2008
@@ -26,6 +26,7 @@
 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 @@
             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);
             }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Unpack.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Unpack.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Unpack.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Unpack.java Mon Nov 17 13:13:04 2008
@@ -91,8 +91,9 @@
             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()

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java Mon Nov 17 13:13:04 2008
@@ -24,6 +24,7 @@
 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 @@
             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());
             }
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java Mon Nov 17 13:13:04 2008
@@ -592,8 +592,9 @@
             }
             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 @@
                 // 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());

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java Mon Nov 17 13:13:04 2008
@@ -244,8 +244,9 @@
               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 @@
         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 @@
      * @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 @@
         // 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);
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Zip.java Mon Nov 17 13:13:04 2008
@@ -927,8 +927,9 @@
                 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 @@
                           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 @@
             }
 
             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());
                 }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java Mon Nov 17 13:13:04 2008
@@ -28,6 +28,7 @@
 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 @@
                 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

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java Mon Nov 17 13:13:04 2008
@@ -272,9 +272,10 @@
     }
 
     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();

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveFileSet.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveFileSet.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveFileSet.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveFileSet.java Mon Nov 17 13:13:04 2008
@@ -166,8 +166,11 @@
      * @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;
     }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveScanner.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveScanner.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveScanner.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/ArchiveScanner.java Mon Nov 17 13:13:04 2008
@@ -115,8 +115,9 @@
      */
     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();
         }
     }
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/Resource.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/Resource.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/Resource.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/Resource.java Mon Nov 17 13:13:04 2008
@@ -380,7 +380,7 @@
      */
     public boolean isFilesystemOnly() {
         return (isReference() && ((Resource) getCheckedRef()).isFilesystemOnly())
-                || this instanceof FileProvider;
+            || this.as(FileProvider.class) != null;
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/ZipScanner.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/ZipScanner.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/ZipScanner.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/ZipScanner.java Mon Nov 17 13:13:04 2008
@@ -60,8 +60,9 @@
         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");
         }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java Mon Nov 17 13:13:04 2008
@@ -28,6 +28,7 @@
 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 @@
         /* 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;
             }
         }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java Mon Nov 17 13:13:04 2008
@@ -25,6 +25,7 @@
 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 @@
         /* 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;
             }
         }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java Mon Nov 17 13:13:04 2008
@@ -252,16 +252,20 @@
         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);
     }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java Mon Nov 17 13:13:04 2008
@@ -38,8 +38,8 @@
      * @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(

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java Mon Nov 17 13:13:04 2008
@@ -39,8 +39,9 @@
     }
 
     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;
     }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java Mon Nov 17 13:13:04 2008
@@ -39,8 +39,9 @@
     }
 
     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;
     }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/util/ResourceUtils.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/ResourceUtils.java?rev=718387&r1=718386&r2=718387&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/util/ResourceUtils.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/util/ResourceUtils.java Mon Nov 17 13:13:04 2008
@@ -521,10 +521,12 @@
     }
 
     /**
-     * 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) {