Skip to content

Commit fa400b6

Browse files
committed
Prioritize tasty in ZipAndJarClassPathFactory
1 parent 7d7d754 commit fa400b6

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

compiler/src/dotty/tools/dotc/classpath/ZipAndJarFileLookupFactory.scala

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import java.nio.file.Files
1212
import java.nio.file.attribute.{BasicFileAttributes, FileTime}
1313

1414
import scala.annotation.tailrec
15-
import dotty.tools.io.{AbstractFile, ClassPath, ClassRepresentation, FileZipArchive, ManifestResources}
15+
import dotty.tools.io.{AbstractFile, ClassPath, ClassRepresentation, FileZipArchive, ManifestResources, ZipArchive}
1616
import dotty.tools.dotc.core.Contexts._
1717
import FileUtils._
1818

@@ -46,21 +46,29 @@ object ZipAndJarClassPathFactory extends ZipAndJarFileLookupFactory {
4646

4747
override def findClassFile(className: String): Option[AbstractFile] = {
4848
val (pkg, simpleClassName) = PackageNameUtils.separatePkgAndClassNames(className)
49-
file(PackageName(pkg), simpleClassName + ".class").map(_.file)
50-
.orElse(file(PackageName(pkg), simpleClassName + ".tasty").map(_.file))
49+
file(PackageName(pkg), simpleClassName + ".tasty").map(_.file)
50+
.orElse(file(PackageName(pkg), simpleClassName + ".class").map(_.file))
5151
}
5252

5353
// This method is performance sensitive as it is used by SBT's ExtractDependencies phase.
5454
override def findClass(className: String): Option[ClassRepresentation] = {
5555
val (pkg, simpleClassName) = PackageNameUtils.separatePkgAndClassNames(className)
56-
file(PackageName(pkg), simpleClassName + ".class")
57-
.orElse(file(PackageName(pkg), simpleClassName + ".tasty"))
56+
file(PackageName(pkg), simpleClassName + ".tasty")
57+
.orElse(file(PackageName(pkg), simpleClassName + ".class"))
5858
}
5959

6060
override private[dotty] def classes(inPackage: PackageName): Seq[ClassFileEntry] = files(inPackage)
6161

6262
override protected def createFileEntry(file: FileZipArchive#Entry): ClassFileEntryImpl = ClassFileEntryImpl(file)
63-
override protected def isRequiredFileType(file: AbstractFile): Boolean = file.isClass || file.isTasty
63+
override protected def isRequiredFileType(file: AbstractFile): Boolean =
64+
def tastyFile: AbstractFile | Null =
65+
val parent = file match // TODO: simplify when #3552 is fixed
66+
case classfile: ZipArchive#Entry => classfile.parent
67+
case _ => file.container
68+
val tastyFileName = file.name.stripSuffix(".class").stripSuffix("$") + ".tasty"
69+
parent.lookupName(tastyFileName, directory = false)
70+
def isClassWithNoTasty = file.isClass && tastyFile == null
71+
file.isTasty || isClassWithNoTasty
6472
}
6573

6674
/**

0 commit comments

Comments
 (0)