Skip to content

Commit fb771fb

Browse files
authored
Merge pull request #5586 from dotty-staging/polish-classesFromZip
Polishing to `InteractiveDriver.classesFromZip`
2 parents 172d6a0 + f82bd76 commit fb771fb

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

compiler/src/dotty/tools/dotc/interactive/InteractiveDriver.scala

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,8 @@ class InteractiveDriver(val settings: List[String]) extends Driver {
7979
// Like in `ZipArchiveFileLookup` we assume that zips are immutable
8080
private val zipClassPathClasses: Seq[TypeName] = {
8181
val names = new mutable.ListBuffer[TypeName]
82-
zipClassPaths.foreach { zipCp =>
83-
val zipFile = new ZipFile(zipCp.zipFile)
84-
classesFromZip(zipFile, names)
85-
}
82+
for (cp <- zipClassPaths)
83+
classesFromZip(cp.zipFile, names)
8684
names
8785
}
8886

@@ -110,8 +108,7 @@ class InteractiveDriver(val settings: List[String]) extends Driver {
110108
if (output.isDirectory) {
111109
classesFromDir(output.jpath, classNames)
112110
} else {
113-
val zipFile = new ZipFile(output.file)
114-
classesFromZip(zipFile, classNames)
111+
classesFromZip(output.file, classNames)
115112
}
116113
classNames.flatMap { cls =>
117114
treesFromClassName(cls, id)
@@ -212,16 +209,22 @@ class InteractiveDriver(val settings: List[String]) extends Driver {
212209
names
213210
}
214211

215-
/** Adds the names of the classes that are defined in `zipFile` to `buffer`. */
216-
private def classesFromZip(zipFile: ZipFile, buffer: mutable.ListBuffer[TypeName]): Unit = {
212+
/** Adds the names of the classes that are defined in `file` to `buffer`. */
213+
private def classesFromZip(file: File, buffer: mutable.ListBuffer[TypeName]): Unit = {
214+
val zipFile = new ZipFile(file)
217215
try {
218-
for {
219-
entry <- zipFile.stream.toArray((size: Int) => new Array[ZipEntry](size))
220-
name = entry.getName
221-
tastySuffix <- tastySuffixes.find(name.endsWith)
222-
} buffer += name.replace("/", ".").stripSuffix(tastySuffix).toTypeName
216+
val entries = zipFile.entries()
217+
while (entries.hasMoreElements) {
218+
val entry = entries.nextElement()
219+
val name = entry.getName
220+
tastySuffixes.find(name.endsWith) match {
221+
case Some(tastySuffix) =>
222+
buffer += name.replace("/", ".").stripSuffix(tastySuffix).toTypeName
223+
case _ =>
224+
}
225+
}
223226
}
224-
finally zipFile.close()
227+
finally zipFile.close()
225228
}
226229

227230
/** Adds the names of the classes that are defined in `dir` to `buffer`. */

0 commit comments

Comments
 (0)