@@ -3,7 +3,7 @@ package dotty.tools.dotc.classpath
3
3
import scala .language .unsafeNulls
4
4
5
5
import dotty .tools .io .{ClassPath , ClassRepresentation }
6
- import dotty .tools .io .{AbstractFile , VirtualDirectory }
6
+ import dotty .tools .io .{AbstractFile , VirtualDirectory , ZipArchive }
7
7
import FileUtils ._
8
8
import java .net .{URI , URL }
9
9
@@ -41,12 +41,21 @@ case class VirtualDirectoryClassPath(dir: VirtualDirectory) extends ClassPath wi
41
41
override def findClass (className : String ): Option [ClassRepresentation ] = findClassFile(className) map ClassFileEntryImpl .apply
42
42
43
43
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 )))
46
50
}
47
51
48
52
private [dotty] def classes (inPackage : PackageName ): Seq [ClassFileEntry ] = files(inPackage)
49
53
50
54
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
52
61
}
0 commit comments