use of com.synopsys.integration.detect.workflow.nameversion.DetectorEvaluationNameVersionDecider in project synopsys-detect by blackducksoftware.
the class DetectorTool method performDetectors.
public DetectorToolResult performDetectors(File directory, DetectorRuleSet detectorRuleSet, DetectorFinderOptions detectorFinderOptions, DetectorEvaluationOptions evaluationOptions, String projectDetector, List<DetectorType> requiredDetectors, FileFinder fileFinder) {
logger.debug("Initializing detector system.");
Optional<DetectorEvaluationTree> possibleRootEvaluation;
logger.debug("Starting detector file system traversal.");
possibleRootEvaluation = detectorFinder.findDetectors(directory, detectorRuleSet, detectorFinderOptions, fileFinder);
if (!possibleRootEvaluation.isPresent()) {
logger.error("The source directory could not be searched for detectors - detector tool failed.");
logger.error("Please ensure the provided source path is a directory and detect has access.");
exitCodePublisher.publishExitCode(ExitCodeType.FAILURE_CONFIGURATION, "Detector tool failed to run on the configured source path.");
return new DetectorToolResult();
}
DetectorEvaluationTree rootEvaluation = possibleRootEvaluation.get();
List<DetectorEvaluation> detectorEvaluations = rootEvaluation.allDescendentEvaluations();
logger.trace("Setting up detector events.");
// DetectorNameVersionHandler detectorNameVersionHandler = createNameVersionHandler(projectDetector);
DetectorEvaluatorBroadcaster eventBroadcaster = new DetectorEvaluatorBroadcaster(eventSystem);
DetectorEvaluator detectorEvaluator = new DetectorEvaluator(evaluationOptions, extractionEnvironmentProvider::createExtractionEnvironment);
detectorEvaluator.setDetectorEvaluatorListener(eventBroadcaster);
detectorEvaluator.registerPostApplicableCallback(detectorAggregateEvaluationResult -> {
detectorEventPublisher.publishApplicableCompleted(detectorAggregateEvaluationResult.getApplicableDetectorTypesRecursively());
detectorEventPublisher.publishSearchCompleted(detectorAggregateEvaluationResult.getEvaluationTree());
logger.info("");
});
detectorEvaluator.registerPostExtractableCallback(detectorAggregateEvaluationResult -> {
detectorEventPublisher.publishPreparationsCompleted(detectorAggregateEvaluationResult.getEvaluationTree());
logger.debug("Counting detectors that will be evaluated.");
Integer extractionCount = detectorAggregateEvaluationResult.getExtractionCount();
detectorEventPublisher.publishExtractionCount(extractionCount);
logger.debug("Total number of detectors: {}", extractionCount);
});
detectorEvaluator.registerPostExtractionCallback(detectorAggregateEvaluationResult -> detectorEventPublisher.publishExtractionsCompleted(detectorAggregateEvaluationResult.getEvaluationTree()));
DetectorAggregateEvaluationResult evaluationResult = detectorEvaluator.evaluate(rootEvaluation);
// TODO- finished extractions?
logger.debug("Finished detectors.");
printExplanations(rootEvaluation);
Map<DetectorType, StatusType> statusMap = extractStatus(detectorEvaluations);
publishStatusEvents(statusMap);
publishFileEvents(detectorEvaluations);
detectorIssuePublisher.publishEvents(statusEventPublisher, rootEvaluation);
publishMissingDetectorEvents(requiredDetectors, evaluationResult.getApplicableDetectorTypesRecursively());
Map<CodeLocation, DetectCodeLocation> codeLocationMap = createCodeLocationMap(detectorEvaluations, directory);
DetectorEvaluationNameVersionDecider detectorEvaluationNameVersionDecider = new DetectorEvaluationNameVersionDecider(new DetectorNameVersionDecider());
Optional<NameVersion> bomToolProjectNameVersion = detectorEvaluationNameVersionDecider.decideSuggestion(detectorEvaluations, projectDetector);
logger.debug("Finished evaluating detectors for project info.");
DetectorToolResult detectorToolResult = new DetectorToolResult(bomToolProjectNameVersion.orElse(null), new ArrayList<>(codeLocationMap.values()), evaluationResult.getApplicableDetectorTypes(), new HashSet<>(), rootEvaluation, codeLocationMap);
// Completed.
logger.debug("Finished running detectors.");
detectorEventPublisher.publishDetectorsComplete(detectorToolResult);
return detectorToolResult;
}
Aggregations