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