in doc-architect/doc-architect-core/src/main/java/com/docarchitect/core/scanner/impl/java/JaxRsApiScanner.java [190:252]
protected boolean shouldScanFile(Path file) {
// Priority 1: Filename convention (fastest check, no I/O)
String fileName = file.getFileName().toString();
if (fileName.endsWith("Resource.java") ||
fileName.endsWith("Endpoint.java") ||
fileName.endsWith("Api.java") ||
fileName.contains("Resource") ||
fileName.contains("Endpoint")) {
log.trace("Including file by naming convention: {}", fileName);
return true;
}
// Skip test files unless they contain JAX-RS patterns
String filePath = file.toString();
boolean isTestFile = filePath.contains("/test/") || filePath.contains("\\test\\");
try {
String content = readFileContent(file);
// Priority 2: Check for JAX-RS package imports (loose pattern for wildcards)
// Matches: jakarta.ws.rs.* OR javax.ws.rs.* OR individual imports
boolean hasJaxRsImport =
(content.contains("jakarta") && content.contains("ws") && content.contains("rs")) ||
(content.contains("javax") && content.contains("ws") && content.contains("rs"));
// Priority 3: Check for direct JAX-RS annotations (catches any usage)
boolean hasJaxRsAnnotations =
content.contains("@Path") ||
content.contains("@GET") ||
content.contains("@POST") ||
content.contains("@PUT") ||
content.contains("@DELETE") ||
content.contains("@PATCH") ||
content.contains("@Produces") ||
content.contains("@Consumes");
// Priority 4: Check for common JAX-RS classes (conservative)
boolean hasJaxRsClasses =
content.contains("Response") ||
content.contains("MediaType") ||
content.contains("UriInfo");
boolean hasJaxRsPatterns = hasJaxRsImport || hasJaxRsAnnotations || hasJaxRsClasses;
if (hasJaxRsPatterns) {
log.debug("Including file with JAX-RS patterns: {} (import={}, annotations={}, classes={})",
fileName, hasJaxRsImport, hasJaxRsAnnotations, hasJaxRsClasses);
} else {
log.trace("Skipping file without JAX-RS patterns: {}", fileName);
}
// For test files, require JAX-RS patterns
// For non-test files, allow if they have JAX-RS patterns
if (isTestFile) {
return hasJaxRsPatterns;
}
return hasJaxRsPatterns;
} catch (IOException e) {
log.debug("Failed to read file for pre-filtering: {}", file);
return false;
}
}