Skip to content

Commit 78cf962

Browse files
committed
Only traverse directories in jar once
1 parent 0cf2f14 commit 78cf962

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ object ZipAndJarClassPathFactory extends ZipAndJarFileLookupFactory {
5050
// This method is performance sensitive as it is used by SBT's ExtractDependencies phase.
5151
override def findClass(className: String): Option[ClassFileEntryImpl] = {
5252
val (pkg, simpleClassName) = PackageNameUtils.separatePkgAndClassNames(className)
53-
file(PackageName(pkg), simpleClassName + ".tasty")
54-
.orElse(file(PackageName(pkg), simpleClassName + ".class"))
53+
val binaries = files(PackageName(pkg), simpleClassName + ".tasty", simpleClassName + ".class")
54+
binaries.find(_.file.isTasty).orElse(binaries.find(_.file.isClass))
5555
}
5656

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

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ trait ZipArchiveFileLookup[FileEntryType <: ClassRepresentation] extends Efficie
4343
}
4444
yield createFileEntry(entry)
4545

46+
protected def files(inPackage: PackageName, names: String*): Seq[FileEntryType] =
47+
for {
48+
dirEntry <- findDirEntry(inPackage).toSeq
49+
name <- names
50+
entry <- Option(dirEntry.lookupName(name, directory = false))
51+
if isRequiredFileType(entry)
52+
}
53+
yield createFileEntry(entry)
54+
4655
protected def file(inPackage: PackageName, name: String): Option[FileEntryType] =
4756
for {
4857
dirEntry <- findDirEntry(inPackage)

0 commit comments

Comments
 (0)