Skip to content

Commit 88fb4ea

Browse files
committed
Fix separate compilation
1 parent 4a74fb7 commit 88fb4ea

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

compiler/src/dotty/tools/backend/jvm/GenBCode.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,16 +270,15 @@ class GenBCodePipeline(val entryPoints: List[Symbol], val int: DottyBackendInter
270270

271271
for ((cls, clsFile) <- classNodes.zip(classFiles)) {
272272
if (cls != null) {
273+
val className = cls.name.replace('/', '.')
273274
if (ctx.compilerCallback != null)
274-
ctx.compilerCallback.onClassGenerated(sourceFile, convertAbstractFile(clsFile), fullClassName)
275+
ctx.compilerCallback.onClassGenerated(sourceFile, convertAbstractFile(clsFile), className)
275276
if (ctx.sbtCallback != null) {
276-
// ctx.sbtCallback.generatedClass(sourceFile.jfile.orElse(null), clsFile.file, fullClassName)
277-
// TODO: Check
278277
if (isLocal)
279278
ctx.sbtCallback.generatedLocalClass(sourceFile.jfile.orElse(null), clsFile.file)
280279
else {
281280
ctx.sbtCallback.generatedNonLocalClass(sourceFile.jfile.orElse(null), clsFile.file,
282-
cls.name, fullClassName)
281+
className, fullClassName)
283282
}
284283
}
285284
}

compiler/src/dotty/tools/dotc/sbt/ExtractDependencies.scala

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -139,23 +139,25 @@ class ExtractDependencies extends Phase {
139139
ctx.sbtCallback.binaryDependency(file, binaryClassName, fromClassName, sourceFile, context)
140140

141141
def processExternalDependency(depFile: AbstractFile) = {
142-
def binaryClassName(classSegments: List[String]) =
143-
classSegments.mkString(".").stripSuffix(".class")
142+
143+
val binaryClassName = ctx.atPhase(ctx.flattenPhase) { implicit ctx =>
144+
dep.to.fullName.toString
145+
}
144146

145147
depFile match {
146148
case ze: ZipArchive#Entry => // The dependency comes from a JAR
147149
for (zip <- ze.underlyingSource; zipFile <- Option(zip.file)) {
148-
val classSegments = io.File(ze.path).segments
149-
binaryDependency(zipFile, binaryClassName(classSegments))
150+
binaryDependency(zipFile, binaryClassName)
150151
}
151152

152153
case pf: PlainFile => // The dependency comes from a class file
153-
val packages = dep.to.ownersIterator
154-
.filter(x => x.is(PackageClass) && !x.isEffectiveRoot).length
155-
// We can recover the fully qualified name of a classfile from
156-
// its path
157-
val classSegments = pf.givenPath.segments.takeRight(packages + 1)
158-
binaryDependency(pf.file, binaryClassName(classSegments))
154+
val classFile =
155+
if (dep.to.is(ModuleClass, butNot = Scala2x))
156+
new File(pf.path.stripSuffix(".class") + "$.class")
157+
// Module Class loaded from TASTY are loaded from their companion class file.
158+
// We recover the name of the module class file.
159+
else pf.file
160+
binaryDependency(classFile, binaryClassName)
159161

160162
case _ =>
161163
ctx.warning(s"sbt-deps: Ignoring dependency $depFile of class ${depFile.getClass}}")

0 commit comments

Comments
 (0)