Skip to content

Commit 2bfcbbf

Browse files
committed
Added coverage aggregator
1 parent 47cd43a commit 2bfcbbf

File tree

3 files changed

+34
-18
lines changed

3 files changed

+34
-18
lines changed

scalac-scoverage-plugin/src/main/scala/scoverage/IOUtils.scala

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,20 +64,7 @@ object IOUtils {
6464
search(baseDir)
6565
}
6666

67-
/**
68-
* Aggregates all subproject reports, returning the location of the aggregated file.
69-
*/
70-
val aggregator: (File, File) => Unit = (baseDir, targetDir) => {
71-
val files = IOUtils.reportFileSearch(baseDir)
72-
println(s"[info] Found ${files.size} subproject report files [${files.mkString(",")}]")
73-
if (files.size > 0) {
74-
val nodes = files.map(xml.XML.loadFile)
75-
val aggregated = ScoverageXmlMerger.merge(nodes)
76-
targetDir.mkdirs()
77-
val outFile = new File(targetDir, Constants.XMLReportFilename)
78-
writeToFile(outFile, aggregated.toString)
79-
}
80-
}
67+
8168

8269
val isMeasurementFile = (file: File) => file.getName.startsWith(Constants.MeasurementsPrefix)
8370
val isReportFile = (file: File) => file.getName == Constants.XMLReportFilename
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package scoverage.report
2+
3+
import java.io.File
4+
5+
import scoverage.{Coverage, IOUtils}
6+
7+
object CoverageAggregator {
8+
9+
def aggregate(baseDir: File, targetDir: File): Option[Coverage] = {
10+
val files = IOUtils.reportFileSearch(baseDir)
11+
println(s"[info] Found ${files.size} subproject report files [${files.mkString(",")}]")
12+
if (files.size > 0) {
13+
val coverage = aggregatedCoverage(files)
14+
Some(coverage)
15+
} else {
16+
None
17+
}
18+
}
19+
20+
private def aggregatedCoverage(files: Seq[File]): Coverage = {
21+
var id = 0
22+
val coverage = Coverage()
23+
files foreach {
24+
case file =>
25+
val subcoverage = ScoverageXmlReader.read(file)
26+
// need to ensure all the ids are unique otherwise the coverage object will have stmt collisions
27+
id = id + 1
28+
subcoverage.statements foreach { stmt => coverage add stmt.copy(id = id)}
29+
}
30+
coverage
31+
}
32+
}

scalac-scoverage-plugin/src/main/scala/scoverage/report/ScoverageXmlReader.scala

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ object ScoverageXmlReader {
1414
def read(file: File): Coverage = {
1515
val xml = XML.loadFile(file)
1616

17-
var id = 0
1817
val coverage = Coverage()
1918
(xml \\ "statement") foreach { node => {
2019

@@ -39,12 +38,10 @@ object ScoverageXmlReader {
3938
method.text,
4039
source.text)
4140

42-
id = id + 1
43-
4441
coverage add Statement(
4542
source.text,
4643
location,
47-
id,
44+
0, // ids are irrelevant in the XML form
4845
start.text.toInt,
4946
end.text.toInt,
5047
line.text.toInt,

0 commit comments

Comments
 (0)