in src/main/java/org/apache/maven/shared/utils/io/DirectoryScanner.java [556:663]
private void scandir(@Nonnull final File dir, @Nonnull final String vpath, final boolean fast) {
String[] newfiles = dir.list();
if (newfiles == null) {
/*
* two reasons are mentioned in the API docs for File.list (1) dir is not a directory. This is impossible as
* we wouldn't get here in this case. (2) an IO error occurred (why doesn't it throw an exception then???)
*/
/*
* [jdcasey] (2) is apparently happening to me, as this is killing one of my tests... this is affecting the
* assembly plugin, fwiw. I will initialize the newfiles array as zero-length for now. NOTE: I can't find
* the problematic code, as it appears to come from a native method in UnixFileSystem...
*/
newfiles = new String[0];
}
if (!followSymlinks) {
newfiles = doNotFollowSymbolicLinks(dir, vpath, newfiles);
}
for (final String newfile : newfiles) {
final String name = vpath + newfile;
final File file = new File(dir, newfile);
if (file.isDirectory()) {
if (isIncluded(name)) {
if (!isExcluded(name)) {
if (scanConductor != null) {
scanAction = scanConductor.visitDirectory(name, file);
if (ScanConductor.ScanAction.ABORT.equals(scanAction)
|| ScanConductor.ScanAction.ABORT_DIRECTORY.equals(scanAction)) {
return;
}
}
if (!ScanConductor.ScanAction.NO_RECURSE.equals(scanAction)) {
dirsIncluded.add(name);
if (fast) {
scandir(file, name + File.separator, fast);
if (ScanConductor.ScanAction.ABORT.equals(scanAction)) {
return;
}
}
}
scanAction = null;
} else {
dirsExcluded.add(name);
if (fast && couldHoldIncluded(name)) {
scandir(file, name + File.separator, fast);
if (ScanConductor.ScanAction.ABORT.equals(scanAction)) {
return;
}
scanAction = null;
}
}
} else {
if (fast && couldHoldIncluded(name)) {
if (scanConductor != null) {
scanAction = scanConductor.visitDirectory(name, file);
if (ScanConductor.ScanAction.ABORT.equals(scanAction)
|| ScanConductor.ScanAction.ABORT_DIRECTORY.equals(scanAction)) {
return;
}
}
if (!ScanConductor.ScanAction.NO_RECURSE.equals(scanAction)) {
dirsNotIncluded.add(name);
scandir(file, name + File.separator, fast);
if (ScanConductor.ScanAction.ABORT.equals(scanAction)) {
return;
}
}
scanAction = null;
}
}
if (!fast) {
scandir(file, name + File.separator, fast);
if (ScanConductor.ScanAction.ABORT.equals(scanAction)) {
return;
}
scanAction = null;
}
} else if (file.isFile()) {
if (isIncluded(name)) {
if (!isExcluded(name)) {
if (scanConductor != null) {
scanAction = scanConductor.visitFile(name, file);
}
if (ScanConductor.ScanAction.ABORT.equals(scanAction)
|| ScanConductor.ScanAction.ABORT_DIRECTORY.equals(scanAction)) {
return;
}
filesIncluded.add(name);
} else {
filesExcluded.add(name);
}
} else {
filesNotIncluded.add(name);
}
}
}
}