public ScanResult scan()

in doc-architect/doc-architect-core/src/main/java/com/docarchitect/core/scanner/impl/java/JavaHttpClientScanner.java [208:264]


    public ScanResult scan(ScanContext context) {
        log.info("Scanning Java HTTP client relationships in: {}", context.rootPath());

        List<Relationship> relationships = new ArrayList<>();
        Set<String> processedRelationships = new HashSet<>();
        ScanStatistics.Builder statsBuilder = new ScanStatistics.Builder();

        // Find all Java files
        List<Path> javaFiles = context.findFiles(JAVA_FILE_PATTERN).toList();
        statsBuilder.filesDiscovered(javaFiles.size());

        if (javaFiles.isEmpty()) {
            log.warn("No Java files found in project");
            return emptyResult();
        }

        int skippedFiles = 0;

        for (Path javaFile : javaFiles) {
            // Pre-filter files before attempting to parse
            if (!shouldScanFile(javaFile)) {
                skippedFiles++;
                continue;
            }

            statsBuilder.incrementFilesScanned();

            // Use three-tier parsing with fallback
            FileParseResult<Relationship> result = parseWithFallback(
                javaFile,
                cu -> extractRelationshipsFromAST(cu, processedRelationships),
                createFallbackStrategy(processedRelationships),
                statsBuilder
            );

            if (result.isSuccess()) {
                relationships.addAll(result.getData());
            }
        }

        log.debug("Pre-filtered {} files (not HTTP client code)", skippedFiles);

        ScanStatistics statistics = statsBuilder.build();
        log.info("Found {} HTTP client relationships (success rate: {:.1f}%, overall parse rate: {:.1f}%)",
            relationships.size(), statistics.getSuccessRate(), statistics.getOverallParseRate());

        return buildSuccessResult(
            List.of(), // No components
            List.of(), // No dependencies
            List.of(), // No API endpoints
            List.of(), // No message flows
            List.of(), // No data entities
            relationships,
            List.of(), // No warnings
            statistics
        );
    }