@@ -29,6 +29,7 @@ import dotty.tools.dotc.{semanticdb => s}
2929import dotty .tools .io .{AbstractFile , JarArchive }
3030import dotty .tools .dotc .semanticdb .DiagnosticOps .*
3131import scala .util .{Using , Failure , Success }
32+ import java .nio .file .Path
3233
3334
3435/** Extract symbol references and uses to semanticdb files.
@@ -65,41 +66,49 @@ class ExtractSemanticDB private (phaseMode: ExtractSemanticDB.PhaseMode) extends
6566 val appendDiagnostics = phaseMode == ExtractSemanticDB .PhaseMode .AppendDiagnostics
6667 if (appendDiagnostics)
6768 val warnings = ctx.reporter.allWarnings.groupBy(w => w.pos.source)
68- units.flatMap { unit =>
69- warnings.get(unit.source).map { ws =>
70- val unitCtx = ctx.fresh.setCompilationUnit(unit).withRootImports
71- val outputDir =
72- ExtractSemanticDB .semanticdbPath(
73- unit.source,
74- ExtractSemanticDB .semanticdbOutDir(using unitCtx),
75- sourceRoot
76- )
77- (outputDir, ws.map(_.toSemanticDiagnostic))
69+ val buf = mutable.ListBuffer .empty[(Path , Seq [Diagnostic ])]
70+ units.foreach { unit =>
71+ val unitCtx = ctx.fresh.setCompilationUnit(unit).withRootImports
72+ monitor(phaseName) {
73+ warnings.get(unit.source).foreach { ws =>
74+ val outputDir =
75+ ExtractSemanticDB .semanticdbPath(
76+ unit.source,
77+ ExtractSemanticDB .semanticdbOutDir(using unitCtx),
78+ sourceRoot
79+ )
80+ buf += ((outputDir, ws.map(_.toSemanticDiagnostic)))
81+ }
82+ }(using unitCtx)
83+ }
84+ cancellable {
85+ buf.toList.asJava.parallelStream().forEach { case (out, warnings) =>
86+ ExtractSemanticDB .appendDiagnostics(warnings, out)
7887 }
79- }.asJava.parallelStream().forEach { case (out, warnings) =>
80- ExtractSemanticDB .appendDiagnostics(warnings, out)
8188 }
8289 else
8390 val writeSemanticdbText = ctx.settings.semanticdbText.value
8491 units.foreach { unit =>
8592 val unitCtx = ctx.fresh.setCompilationUnit(unit).withRootImports
86- val outputDir =
87- ExtractSemanticDB .semanticdbPath(
93+ monitor(phaseName) {
94+ val outputDir =
95+ ExtractSemanticDB .semanticdbPath(
96+ unit.source,
97+ ExtractSemanticDB .semanticdbOutDir(using unitCtx),
98+ sourceRoot
99+ )
100+ val extractor = ExtractSemanticDB .Extractor ()
101+ extractor.extract(unit.tpdTree)(using unitCtx)
102+ ExtractSemanticDB .write(
88103 unit.source,
89- ExtractSemanticDB .semanticdbOutDir(using unitCtx),
90- sourceRoot
104+ extractor.occurrences.toList,
105+ extractor.symbolInfos.toList,
106+ extractor.synthetics.toList,
107+ outputDir,
108+ sourceRoot,
109+ writeSemanticdbText
91110 )
92- val extractor = ExtractSemanticDB .Extractor ()
93- extractor.extract(unit.tpdTree)(using unitCtx)
94- ExtractSemanticDB .write(
95- unit.source,
96- extractor.occurrences.toList,
97- extractor.symbolInfos.toList,
98- extractor.synthetics.toList,
99- outputDir,
100- sourceRoot,
101- writeSemanticdbText
102- )
111+ }(using unitCtx)
103112 }
104113 units
105114 }
@@ -611,4 +620,4 @@ object ExtractSemanticDB:
611620 traverse(vparam.tpt)
612621 tparams.foreach(tp => traverse(tp.rhs))
613622 end Extractor
614- end ExtractSemanticDB
623+ end ExtractSemanticDB
0 commit comments