summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/io/ZipArchive.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-12-24 13:45:27 -0800
committerPaul Phillips <paulp@improving.org>2011-12-25 00:52:57 -0800
commit8834d3c191e37dfa31ae11605596ce2b641ea083 (patch)
treea6fc164365ea07ccd041791c458b33cffd628853 /src/compiler/scala/tools/nsc/io/ZipArchive.scala
parent4d5a025e42c00039aa2e26ec6a7aa5a7b13239ae (diff)
downloadscala-8834d3c191e37dfa31ae11605596ce2b641ea083.tar.gz
scala-8834d3c191e37dfa31ae11605596ce2b641ea083.tar.bz2
scala-8834d3c191e37dfa31ae11605596ce2b641ea083.zip
Optimization in ZipArchive.
Avoid creating empty array when len == 0.
Diffstat (limited to 'src/compiler/scala/tools/nsc/io/ZipArchive.scala')
-rw-r--r--src/compiler/scala/tools/nsc/io/ZipArchive.scala12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/io/ZipArchive.scala b/src/compiler/scala/tools/nsc/io/ZipArchive.scala
index 90cb827280..01f3619ba7 100644
--- a/src/compiler/scala/tools/nsc/io/ZipArchive.scala
+++ b/src/compiler/scala/tools/nsc/io/ZipArchive.scala
@@ -88,7 +88,7 @@ abstract class ZipArchive(override val file: JFile) extends AbstractFile with Eq
val entries = mutable.HashMap[String, Entry]()
override def isDirectory = true
- override def iterator = entries.valuesIterator
+ override def iterator: Iterator[Entry] = entries.valuesIterator
override def lookupName(name: String, directory: Boolean): Entry = {
if (directory) entries(name + "/")
else entries(name)
@@ -110,7 +110,7 @@ abstract class ZipArchive(override val file: JFile) extends AbstractFile with Eq
}
final class FileZipArchive(file: JFile) extends ZipArchive(file) {
- def iterator = {
+ def iterator: Iterator[Entry] = {
val zipFile = new ZipFile(file)
val root = new DirEntry("/")
val dirs = mutable.HashMap[String, DirEntry]("/" -> root)
@@ -151,13 +151,17 @@ final class FileZipArchive(file: JFile) extends ZipArchive(file) {
}
final class URLZipArchive(val url: URL) extends ZipArchive(null) {
- def iterator = {
+ def iterator: Iterator[Entry] = {
val root = new DirEntry("/")
val dirs = mutable.HashMap[String, DirEntry]("/" -> root)
val in = new ZipInputStream(new ByteArrayInputStream(Streamable.bytes(input)))
@tailrec def loop() {
val zipEntry = in.getNextEntry()
+ class EmptyFileEntry() extends Entry(zipEntry.getName) {
+ override def toByteArray: Array[Byte] = null
+ override def sizeOption = Some(0)
+ }
class FileEntry() extends Entry(zipEntry.getName) {
override val toByteArray: Array[Byte] = {
val len = zipEntry.getSize().toInt
@@ -186,7 +190,7 @@ final class URLZipArchive(val url: URL) extends ZipArchive(null) {
if (zipEntry.isDirectory)
dir
else {
- val f = new FileEntry()
+ val f = if (zipEntry.getSize() == 0) new EmptyFileEntry() else new FileEntry()
dir.entries(f.name) = f
}
in.closeEntry()