11package dotty .tools .dotc
22package coverage
33
4- import java .nio .file .{Path , Paths , Files }
4+ import java .nio .file .{Path , Paths , Files , StandardOpenOption }
55import java .io .Writer
66import scala .language .unsafeNulls
77import scala .collection .mutable .StringBuilder
8+ import dotty .tools .dotc .core .Contexts .Context
89
910/**
1011 * Serializes scoverage data.
@@ -16,20 +17,20 @@ object Serializer:
1617 private val CoverageDataFormatVersion = " 3.0"
1718
1819 /** 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 =
2021 serialize(coverage, Paths .get(dataDir, CoverageFileName ).toAbsolutePath, Paths .get(sourceRoot).toAbsolutePath)
2122
2223 /** 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 )
2526 try
2627 serialize(coverage, writer, sourceRoot)
2728 finally
2829 writer.close()
2930
3031 /** Write out coverage data (info about each statement that can be covered) to a writer.
3132 */
32- def serialize (coverage : Coverage , writer : Writer , sourceRoot : Path ): Unit =
33+ def serialize (coverage : Coverage , writer : Writer , sourceRoot : Path )( using ctx : Context ) : Unit =
3334
3435 def getRelativePath (filePath : Path ): String =
3536 // We need to normalize the path here because the relativizing paths containing '.' or '..' differs between Java versions
@@ -81,7 +82,8 @@ object Serializer:
8182 |\f
8283 | """ .stripMargin)
8384
84- writeHeader(writer)
85+ if (! ctx.base.coverageStartedWriting) writeHeader(writer)
86+ ctx.base.coverageStartedWriting = true
8587 coverage.statements.toSeq
8688 .sortBy(_.id)
8789 .foreach(stmt => writeStatement(stmt, writer))
0 commit comments