void findPaths()

in log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/PathMatcherMojo.java [60:102]


    void findPaths(final Consumer<Path> pathConsumer) {

        // Create path matchers
        final String[] effectivePathPatterns = pathPatterns != null ? pathPatterns : new String[0];
        final FileSystem fileSystem = FileSystems.getDefault();
        final Set<PathMatcher> pathMatchers = Arrays.stream(effectivePathPatterns)
                .map(pathPattern -> {
                    try {
                        return fileSystem.getPathMatcher(pathPattern);
                    } catch (final Exception error) {
                        final String message =
                                String.format("failed to create matcher using path pattern `%s`", pathPattern);
                        throw new IllegalArgumentException(message, error);
                    }
                })
                .collect(Collectors.toSet());

        // Walk the base directory
        try (final Stream<Path> paths = Files.walk(baseDirectory.toPath())) {
            paths.filter(path -> {

                        // Skip directories
                        if (Files.isDirectory(path)) {
                            return false;
                        }

                        // Skip dot files
                        final boolean dotFile = dotFilesExcluded
                                && path.getFileName().toString().startsWith(".");
                        if (dotFile) {
                            return false;
                        }

                        // Check against path matchers
                        return pathMatchers.isEmpty()
                                || pathMatchers.stream().anyMatch(pathMatcher -> pathMatcher.matches(path));
                    })
                    .forEach(pathConsumer);
        } catch (final IOException error) {
            final String message = String.format("failed walking directory: `%s`", baseDirectory);
            throw new UncheckedIOException(message, error);
        }
    }