I'll summarize what has happened in this mail and send a different one on issues I have myself with the changes.
I ask you to take this summary as starting points to actually review the code. (1) New data-type Resource this is an abstraction of File and ZipEntry (for now) that is used to handle <zipfileset> and <fileset> in a uniform way inside <zip>. More importantly it is needed to adapt the old SourceFileScanner logic in a way that the target is not a file, but a ZipEntry. This change is crucial to fix 10755 as we need a way to compare timestamps of the files to add with the corresponding ZipEntries in the target archive. (2) New interface ResourceFactory implemented by DirectoryScanner and ZipScanner for now. A simple way to get the Resource corresponding to a name (as returned by a FileNameMapper). (3) New interface ResourceScanner that adds getIncludedFileResources and getIncludedDirectoryResources to FileScanner. implemented by DirectoryScanner and overridden in ZipScanner. (4) New utility class SourceSelector. This is basically SourceFileScanner extended to the Resource concept, chosing some better names on the way. Contains a lot of code moved over from SourceFileScanner. (5) SourceFileScanner now delegates to SourceSelector. This is basically a boackwards compatibility step. This also means that bugs introduced via the Resource concept will affect all tasks using SourceFileScanner. (6) ZipScanner now really parses the archive instead of returning the archive itself in getIncludedFiles. It has only ever been used in <zip>, and here it is needed to get the fix right. It breaks backwards compatibility and will be marked as such in WHATSNEW. (7) Zip has more or less been completely rewritten. It breaks API backwards compatibility and will be marked as such in WHATSNEW. (8) Jar, War and Ear have been adapted to changes in Zip. It breaks API backwards compatibility and will be marked as such in WHATSNEW. Stefan