Skip to content

Commit f7b2aa5

Browse files
committed
Initialise Coverage object only when the option is used
1 parent d07040d commit f7b2aa5

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

compiler/src/dotty/tools/dotc/core/Contexts.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -983,11 +983,10 @@ object Contexts {
983983
/** Was best effort file used during compilation? */
984984
private[core] var usedBestEffortTasty = false
985985

986-
/** Stores all instrumented statements (for InstrumentCoverage).
987-
* We need this information to be persisted across different runs,
988-
* so it's stored here.
986+
/** If coverage option is used, it stores all instrumented statements (for InstrumentCoverage).
987+
* We need this information to be persisted across different runs, so it's stored here.
989988
*/
990-
private[dotc] var coverage: Coverage = Coverage()
989+
private[dotc] var coverage: Coverage | Null = null
991990

992991
// Types state
993992
/** A table for hash consing unique types */

compiler/src/dotty/tools/dotc/transform/InstrumentCoverage.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,17 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
5555
.foreach(_.nn.delete())
5656
end if
5757

58+
// Initialise a coverage object if it does not exist yet
59+
if ctx.base.coverage == null then
60+
ctx.base.coverage = Coverage()
61+
5862
coverageExcludeClasslikePatterns = ctx.settings.coverageExcludeClasslikes.value.map(_.r.pattern)
5963
coverageExcludeFilePatterns = ctx.settings.coverageExcludeFiles.value.map(_.r.pattern)
6064

61-
ctx.base.coverage.removeStatementsFromFile(ctx.compilationUnit.source.file.absolute.jpath)
65+
ctx.base.coverage.nn.removeStatementsFromFile(ctx.compilationUnit.source.file.absolute.jpath)
6266
super.run
6367

64-
Serializer.serialize(ctx.base.coverage, outputPath, ctx.settings.sourceroot.value)
68+
Serializer.serialize(ctx.base.coverage.nn, outputPath, ctx.settings.sourceroot.value)
6569

6670
private def isClassIncluded(sym: Symbol)(using Context): Boolean =
6771
val fqn = sym.fullName.toText(ctx.printerFn(ctx)).show
@@ -105,7 +109,7 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
105109
* @return the statement's id
106110
*/
107111
private def recordStatement(tree: Tree, pos: SourcePosition, branch: Boolean)(using ctx: Context): Int =
108-
val id = ctx.base.coverage.nextStatementId()
112+
val id = ctx.base.coverage.nn.nextStatementId()
109113

110114
val sourceFile = pos.source
111115
val statement = Statement(
@@ -121,7 +125,7 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
121125
treeName = tree.getClass.getSimpleName.nn,
122126
branch
123127
)
124-
ctx.base.coverage.addStatement(statement)
128+
ctx.base.coverage.nn.addStatement(statement)
125129
id
126130

127131
/**

0 commit comments

Comments
 (0)