Skip to content

Commit d7258b4

Browse files
committed
Remove Context from relPath and so on
1 parent d5065ec commit d7258b4

File tree

1 file changed

+44
-18
lines changed

1 file changed

+44
-18
lines changed

compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala

Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,43 @@ class ExtractSemanticDB private (phaseMode: ExtractSemanticDB.PhaseMode) extends
6464
override def isCheckable: Boolean = false
6565

6666
override def runOn(units: List[CompilationUnit])(using ctx: Context): List[CompilationUnit] = {
67+
val sourceRoot = ctx.settings.sourceroot.value
6768
val appendDiagnostics = phaseMode == ExtractSemanticDB.PhaseMode.AppendDiagnostics
6869
if (appendDiagnostics)
6970
val warnings = ctx.reporter.allWarnings.groupBy(w => w.pos.source)
70-
units.asJava.parallelStream().forEach { unit =>
71-
warnings.get(unit.source).foreach { ws =>
72-
ExtractSemanticDB.appendDiagnostics(unit.source, ws.map(_.toSemanticDiagnostic))
71+
units.map { unit =>
72+
val unitCtx = ctx.fresh.setCompilationUnit(unit).withRootImports
73+
val outputDir =
74+
ExtractSemanticDB.semanticdbPath(
75+
unit.source,
76+
ExtractSemanticDB.outputDirectory(using unitCtx),
77+
sourceRoot
78+
)
79+
val source = unit.source
80+
(outputDir, source)
81+
}.asJava.parallelStream().forEach { case (out, source) =>
82+
warnings.get(source).foreach { ws =>
83+
ExtractSemanticDB.appendDiagnostics(source, ws.map(_.toSemanticDiagnostic), out)
7384
}
7485
}
7586
else
7687
units.foreach { unit =>
88+
val outputDir =
89+
ExtractSemanticDB.semanticdbPath(
90+
unit.source,
91+
ExtractSemanticDB.outputDirectory(using ctx.fresh.setCompilationUnit(unit).withRootImports),
92+
sourceRoot
93+
)
7794
val extractor = ExtractSemanticDB.Extractor()
7895
extractor.extract(unit.tpdTree)
79-
ExtractSemanticDB.write(unit.source, extractor.occurrences.toList, extractor.symbolInfos.toList, extractor.synthetics.toList)
96+
ExtractSemanticDB.write(
97+
unit.source,
98+
extractor.occurrences.toList,
99+
extractor.symbolInfos.toList,
100+
extractor.synthetics.toList,
101+
outputDir,
102+
sourceRoot
103+
)
80104
}
81105
units
82106
}
@@ -105,7 +129,8 @@ object ExtractSemanticDB:
105129
.filterNot(_.isEmpty)
106130
.map(Paths.get(_))
107131

108-
private def outputDirectory(using Context): AbstractFile = ctx.settings.outputDir.value
132+
private def outputDirectory(using Context): Path =
133+
semanticdbTarget.getOrElse(ctx.settings.outputDir.value.jpath)
109134

110135
private def absolutePath(path: Path): Path = path.toAbsolutePath.normalize
111136

@@ -114,13 +139,14 @@ object ExtractSemanticDB:
114139
occurrences: List[SymbolOccurrence],
115140
symbolInfos: List[SymbolInformation],
116141
synthetics: List[Synthetic],
117-
)(using Context): Unit =
118-
val outpath = semanticdbPath(source)
142+
outpath: Path,
143+
sourceRoot: String
144+
): Unit =
119145
Files.createDirectories(outpath.getParent())
120146
val doc: TextDocument = TextDocument(
121147
schema = Schema.SEMANTICDB4,
122148
language = Language.SCALA,
123-
uri = Tools.mkURIstring(Paths.get(relPath(source))),
149+
uri = Tools.mkURIstring(Paths.get(relPath(source, sourceRoot))),
124150
text = "",
125151
md5 = internal.MD5.compute(String(source.content)),
126152
symbols = symbolInfos,
@@ -139,15 +165,15 @@ object ExtractSemanticDB:
139165

140166
private def appendDiagnostics(
141167
source: SourceFile,
142-
diagnostics: Seq[Diagnostic]
143-
)(using Context): Unit =
144-
val path = semanticdbPath(source)
168+
diagnostics: Seq[Diagnostic],
169+
outpath: Path
170+
): Unit =
145171
Using.Manager { use =>
146-
val in = use(Files.newInputStream(path))
172+
val in = use(Files.newInputStream(outpath))
147173
val sin = internal.SemanticdbInputStream.newInstance(in)
148174
val docs = TextDocuments.parseFrom(sin)
149175

150-
val out = use(Files.newOutputStream(path))
176+
val out = use(Files.newOutputStream(outpath))
151177
val sout = internal.SemanticdbOutputStream.newInstance(out)
152178
TextDocuments(docs.documents.map(_.withDiagnostics(diagnostics))).writeTo(sout)
153179
sout.flush()
@@ -156,14 +182,14 @@ object ExtractSemanticDB:
156182
case Success(_) => // success to update semanticdb, say nothing
157183
end appendDiagnostics
158184

159-
private def relPath(source: SourceFile)(using ctx: Context) =
160-
SourceFile.relativePath(source, ctx.settings.sourceroot.value)
185+
private def relPath(source: SourceFile, sourceRoot: String) =
186+
SourceFile.relativePath(source, sourceRoot)
161187

162-
private def semanticdbPath(source: SourceFile)(using Context) =
163-
absolutePath(semanticdbTarget.getOrElse(outputDirectory.jpath))
188+
private def semanticdbPath(source: SourceFile, base: Path, sourceRoot: String): Path =
189+
absolutePath(base)
164190
.resolve("META-INF")
165191
.resolve("semanticdb")
166-
.resolve(relPath(source))
192+
.resolve(relPath(source, sourceRoot))
167193
.resolveSibling(source.name + ".semanticdb")
168194

169195
/** Extractor of symbol occurrences from trees */

0 commit comments

Comments
 (0)