protected boolean shouldScanFile()

in doc-architect/doc-architect-core/src/main/java/com/docarchitect/core/scanner/impl/java/KafkaStreamsScanner.java [165:215]


    protected boolean shouldScanFile(Path file) {
        // Priority 1: Filename convention (fastest check, no I/O)
        String fileName = file.getFileName().toString();
        if (fileName.endsWith("Topology.java") ||
            fileName.endsWith("Processor.java") ||
            fileName.contains("Stream") ||
            fileName.contains("Kafka")) {
            log.debug("Including file by naming convention: {}", fileName);
            return true;
        }

        // Skip test files unless they contain Kafka Streams patterns
        String filePath = file.toString();
        boolean isTestFile = filePath.contains("/test/") || filePath.contains("\\test\\");

        try {
            String content = readFileContent(file);

            // Priority 2-4: Check for Kafka Streams imports, classes, and methods
            boolean hasStreamsImport = content.contains("org.apache.kafka.streams");
            boolean hasStreamsClasses =
                content.contains("StreamsBuilder") ||
                content.contains("KStream") ||
                content.contains("KTable") ||
                content.contains("Topology");
            boolean hasStreamsMethods =
                content.contains(".stream(") ||
                content.contains(".table(") ||
                content.contains(".to(");

            boolean hasStreamsPatterns = hasStreamsImport || hasStreamsClasses || hasStreamsMethods;

            if (hasStreamsPatterns) {
                log.debug("Including file with Kafka Streams patterns: {} (import={}, classes={}, methods={})",
                    fileName, hasStreamsImport, hasStreamsClasses, hasStreamsMethods);
            } else {
                log.debug("Skipping file without Kafka Streams patterns: {}", fileName);
            }

            // For test files, require Kafka Streams patterns
            // For non-test files, allow if they have Kafka Streams patterns
            if (isTestFile) {
                return hasStreamsPatterns;
            }

            return hasStreamsPatterns;
        } catch (IOException e) {
            log.debug("Failed to read file for pre-filtering: {}", file);
            return false;
        }
    }