private void scandir()

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);
                }
            }
        }
    }