private Path walkDir()

in src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java [486:527]


    private Path walkDir(final WalkKey key, final List<Path> collectedFiles, final Set<WalkKey> visitedDirs)
            throws IOException {
        return Files.walkFileTree(key.getPath(), new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes basicFileAttributes)
                    throws IOException {
                WalkKey currentDirKey =
                        new WalkKey(path.toAbsolutePath().normalize(), key.getGlob(), key.isRecursive());
                if (isHidden(path)) {
                    LOGGER.debug("Skipping subtree (hidden): {}", path);
                    return FileVisitResult.SKIP_SUBTREE;
                } else if (!isReadable(path)) {
                    LOGGER.debug("Skipping subtree (not readable): {}", path);
                    return FileVisitResult.SKIP_SUBTREE;
                } else if (isFilteredOutSubpath(path)) {
                    LOGGER.debug("Skipping subtree (blacklisted): {}", path);
                    return FileVisitResult.SKIP_SUBTREE;
                } else if (visitedDirs.contains(currentDirKey)) {
                    LOGGER.debug("Skipping subtree (visited): {}", path);
                    return FileVisitResult.SKIP_SUBTREE;
                }

                walkDirectoryFiles(path, collectedFiles, key.getGlob(), entry -> filteredOutPaths.stream()
                        .anyMatch(it -> it.getFileName().equals(entry.getFileName())));

                if (!key.isRecursive()) {
                    LOGGER.debug("Skipping subtree (non recursive): {}", path);
                    return FileVisitResult.SKIP_SUBTREE;
                }

                LOGGER.debug("Visiting subtree: {}", path);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFileFailed(Path path, IOException exc) throws IOException {
                LOGGER.debug("Skipping subtree (exception: {}): {}", exc, path);
                return FileVisitResult.SKIP_SUBTREE;
            }
        });
    }