@@ -139,23 +139,25 @@ class ExtractDependencies extends Phase {
139
139
ctx.sbtCallback.binaryDependency(file, binaryClassName, fromClassName, sourceFile, context)
140
140
141
141
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
+ }
144
146
145
147
depFile match {
146
148
case ze : ZipArchive # Entry => // The dependency comes from a JAR
147
149
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)
150
151
}
151
152
152
153
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)
159
161
160
162
case _ =>
161
163
ctx.warning(s " sbt-deps: Ignoring dependency $depFile of class ${depFile.getClass}} " )
0 commit comments