1
1
package dotty .tools .dotc
2
2
package coverage
3
3
4
- import java .nio .file .{Path , Paths , Files }
4
+ import java .nio .file .{Path , Paths , Files , StandardOpenOption }
5
5
import java .io .Writer
6
6
import scala .language .unsafeNulls
7
7
import scala .collection .mutable .StringBuilder
8
+ import dotty .tools .dotc .core .Contexts .Context
8
9
9
10
/**
10
11
* Serializes scoverage data.
@@ -16,20 +17,20 @@ object Serializer:
16
17
private val CoverageDataFormatVersion = " 3.0"
17
18
18
19
/** Write out coverage data to the given data directory, using the default coverage filename */
19
- def serialize (coverage : Coverage , dataDir : String , sourceRoot : String ): Unit =
20
+ def serialize (coverage : Coverage , dataDir : String , sourceRoot : String )( using Context ) : Unit =
20
21
serialize(coverage, Paths .get(dataDir, CoverageFileName ).toAbsolutePath, Paths .get(sourceRoot).toAbsolutePath)
21
22
22
23
/** Write out coverage data to a file. */
23
- def serialize (coverage : Coverage , file : Path , sourceRoot : Path ): Unit =
24
- val writer = Files .newBufferedWriter(file)
24
+ def serialize (coverage : Coverage , file : Path , sourceRoot : Path )( using Context ) : Unit =
25
+ val writer = Files .newBufferedWriter(file, StandardOpenOption . CREATE , StandardOpenOption . APPEND )
25
26
try
26
27
serialize(coverage, writer, sourceRoot)
27
28
finally
28
29
writer.close()
29
30
30
31
/** Write out coverage data (info about each statement that can be covered) to a writer.
31
32
*/
32
- def serialize (coverage : Coverage , writer : Writer , sourceRoot : Path ): Unit =
33
+ def serialize (coverage : Coverage , writer : Writer , sourceRoot : Path )( using ctx : Context ) : Unit =
33
34
34
35
def getRelativePath (filePath : Path ): String =
35
36
// We need to normalize the path here because the relativizing paths containing '.' or '..' differs between Java versions
@@ -81,7 +82,8 @@ object Serializer:
81
82
|\f
82
83
| """ .stripMargin)
83
84
84
- writeHeader(writer)
85
+ if (! ctx.base.coverageStartedWriting) writeHeader(writer)
86
+ ctx.base.coverageStartedWriting = true
85
87
coverage.statements.toSeq
86
88
.sortBy(_.id)
87
89
.foreach(stmt => writeStatement(stmt, writer))
0 commit comments