// Adds empty coverage entries for any files covered by the original query that we // haven't discovered through tests to the overall report. // The coverage reports only contain information about files that were covered during // tests, so it's important that we identify anything with zero coverage here. // This is made trickier by attempting to reconcile coverage targets from languages like // Java that don't preserve the original file structure, which requires a slightly fuzzy match. func AddOriginalTargetsToCoverage(state *core.BuildState, includeAllFiles bool) { // First we collect all the source files from all relevant targets allFiles := map[string]bool{} doneTargets := map[*core.BuildTarget]bool{} // Track the set of packages the user ran tests from; we only show coverage metrics from them. coveragePackages := map[string]bool{} for _, label := range state.OriginalTargets { coveragePackages[label.PackageName] = true } for _, label := range state.ExpandOriginalTargets() { collectAllFiles(state, state.Graph.TargetOrDie(label), coveragePackages, allFiles, doneTargets, includeAllFiles) } // Now merge the recorded coverage so far into them recordedCoverage := state.Coverage state.Coverage = core.TestCoverage{Tests: recordedCoverage.Tests, Files: map[string][]core.LineCoverage{}} mergeCoverage(state, recordedCoverage, coveragePackages, allFiles, includeAllFiles) }