Skip to content

Commit d3f476e

Browse files
committed
Prioritize tasty in VirtualDirectoryClassPath
1 parent fa400b6 commit d3f476e

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package dotty.tools.dotc.classpath
33
import scala.language.unsafeNulls
44

55
import dotty.tools.io.{ClassPath, ClassRepresentation}
6-
import dotty.tools.io.{AbstractFile, VirtualDirectory}
6+
import dotty.tools.io.{AbstractFile, VirtualDirectory, ZipArchive}
77
import FileUtils._
88
import java.net.{URI, URL}
99

@@ -41,12 +41,21 @@ case class VirtualDirectoryClassPath(dir: VirtualDirectory) extends ClassPath wi
4141
override def findClass(className: String): Option[ClassRepresentation] = findClassFile(className) map ClassFileEntryImpl.apply
4242

4343
def findClassFile(className: String): Option[AbstractFile] = {
44-
val relativePath = FileUtils.dirPath(className) + ".class"
45-
Option(lookupPath(dir)(relativePath.split(java.io.File.separator).toIndexedSeq, directory = false))
44+
val pathSeq = FileUtils.dirPath(className).split(java.io.File.separator).toVector
45+
val parentSeq = pathSeq.init
46+
val tastyPath = parentSeq :+ (pathSeq.last + ".tasty")
47+
val classPath = parentSeq :+ (pathSeq.last + ".class")
48+
Option(lookupPath(dir)(tastyPath, directory = false))
49+
.orElse(Option(lookupPath(dir)(classPath, directory = false)))
4650
}
4751

4852
private[dotty] def classes(inPackage: PackageName): Seq[ClassFileEntry] = files(inPackage)
4953

5054
protected def createFileEntry(file: AbstractFile): ClassFileEntryImpl = ClassFileEntryImpl(file)
51-
protected def isMatchingFile(f: AbstractFile): Boolean = f.isClass
55+
protected def isMatchingFile(f: AbstractFile): Boolean =
56+
def tastyFile: AbstractFile | Null =
57+
val tastyFileName = f.name.stripSuffix(".class").stripSuffix("$") + ".tasty"
58+
f.container.lookupName(tastyFileName, directory = false)
59+
def isClassWithNoTasty = f.isClass && tastyFile == null
60+
f.isTasty || isClassWithNoTasty
5261
}

0 commit comments

Comments
 (0)