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