@@ -12,7 +12,7 @@ import java.nio.file.Files
12
12
import java .nio .file .attribute .{BasicFileAttributes , FileTime }
13
13
14
14
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 }
16
16
import dotty .tools .dotc .core .Contexts ._
17
17
import FileUtils ._
18
18
@@ -46,21 +46,29 @@ object ZipAndJarClassPathFactory extends ZipAndJarFileLookupFactory {
46
46
47
47
override def findClassFile (className : String ): Option [AbstractFile ] = {
48
48
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))
51
51
}
52
52
53
53
// This method is performance sensitive as it is used by SBT's ExtractDependencies phase.
54
54
override def findClass (className : String ): Option [ClassRepresentation ] = {
55
55
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 " ))
58
58
}
59
59
60
60
override private [dotty] def classes (inPackage : PackageName ): Seq [ClassFileEntry ] = files(inPackage)
61
61
62
62
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
64
72
}
65
73
66
74
/**
0 commit comments