Skip to content

Commit 5223adb

Browse files
committed
Pre compute coverage filter patterns
1 parent 8f375fc commit 5223adb

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

Diff for: compiler/src/dotty/tools/dotc/transform/InstrumentCoverage.scala

+12-6
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import util.Spans.Span
2121
import localopt.StringInterpolatorOpt
2222
import inlines.Inlines
2323
import scala.util.matching.Regex
24+
import java.util.regex.Pattern
2425

2526
/** Implements code coverage by inserting calls to scala.runtime.coverage.Invoker
2627
* ("instruments" the source code).
@@ -43,6 +44,9 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
4344
// stores all instrumented statements
4445
private val coverage = Coverage()
4546

47+
private var coverageExcludeClasslikePatterns: List[Pattern] = Nil
48+
private var coverageExcludeFilePatterns: List[Pattern] = Nil
49+
4650
override def run(using ctx: Context): Unit =
4751
val outputPath = ctx.settings.coverageOutputDir.value
4852

@@ -56,19 +60,21 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
5660
.filter(_.nn.getName.nn.startsWith("scoverage"))
5761
.foreach(_.nn.delete())
5862
end if
63+
64+
coverageExcludeClasslikePatterns = ctx.settings.coverageExcludeClasslikes.value.map(_.r.pattern)
65+
coverageExcludeFilePatterns = ctx.settings.coverageExcludeFiles.value.map(_.r.pattern)
66+
5967
super.run
6068

6169
Serializer.serialize(coverage, outputPath, ctx.settings.sourceroot.value)
6270

6371
private def isClassIncluded(sym: Symbol)(using Context): Boolean =
64-
val excludedClassNamePatterns = ctx.settings.coverageExcludeClasslikes.value.map(_.r.pattern)
65-
excludedClassNamePatterns.isEmpty || !excludedClassNamePatterns.exists(
72+
coverageExcludeClasslikePatterns.isEmpty || !coverageExcludeClasslikePatterns.exists(
6673
_.matcher(sym.fullName.toText(ctx.printerFn(ctx)).show).nn.matches
6774
)
6875

6976
private def isFileIncluded(file: SourceFile)(using Context): Boolean =
70-
val excludedFilePatterns = ctx.settings.coverageExcludeFiles.value.map(_.r.pattern)
71-
excludedFilePatterns.isEmpty || !excludedFilePatterns.exists(
77+
coverageExcludeFilePatterns.isEmpty || !coverageExcludeFilePatterns.exists(
7278
_.matcher(file.path.replace(".scala", "")).nn.matches
7379
)
7480

@@ -283,14 +289,14 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
283289
transformDefDef(tree)
284290

285291
case tree: PackageDef =>
286-
if (isFileIncluded(tree.srcPos.sourcePos.source) && isClassIncluded(tree.symbol))
292+
if isFileIncluded(tree.srcPos.sourcePos.source) && isClassIncluded(tree.symbol) then
287293
// only transform the statements of the package
288294
cpy.PackageDef(tree)(tree.pid, transform(tree.stats))
289295
else
290296
tree
291297

292298
case tree: TypeDef =>
293-
if (isFileIncluded(tree.srcPos.sourcePos.source) && isClassIncluded(tree.symbol))
299+
if isFileIncluded(tree.srcPos.sourcePos.source) && isClassIncluded(tree.symbol) then
294300
super.transform(tree)
295301
else
296302
tree

0 commit comments

Comments
 (0)