Avoid using FactoryMap at FastJarHandler

It has quite a slow entrySet implementation
This commit is contained in:
Denis.Zharkov
2021-07-29 18:36:17 +03:00
committed by teamcityserver
parent 979f5e8443
commit cd51264940
@@ -6,7 +6,6 @@ package org.jetbrains.kotlin.cli.jvm.compiler.jarfs
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.containers.FactoryMap
import java.io.File import java.io.File
import java.io.FileNotFoundException import java.io.FileNotFoundException
import java.io.RandomAccessFile import java.io.RandomAccessFile
@@ -32,11 +31,10 @@ class FastJarHandler(val fileSystem: FastJarFileSystem, path: String) {
} }
} }
val childrenMap = FactoryMap.create<FastJarVirtualFile, MutableList<VirtualFile>> { ArrayList() } val childrenMap = HashMap<FastJarVirtualFile, MutableList<VirtualFile>>(ourEntryMap.size)
myRoot = FastJarVirtualFile(this, "", -1, DEFAULT_TIMESTAMP, null) myRoot = FastJarVirtualFile(this, "", -1, DEFAULT_TIMESTAMP, null)
val filesByRelativePath = mutableMapOf<String, FastJarVirtualFile>() val filesByRelativePath = HashMap<String, FastJarVirtualFile>(ourEntryMap.size)
filesByRelativePath[""] = myRoot filesByRelativePath[""] = myRoot
for (info in ourEntryMap.values) { for (info in ourEntryMap.values) {
@@ -44,7 +42,8 @@ class FastJarHandler(val fileSystem: FastJarFileSystem, path: String) {
} }
for (child in filesByRelativePath.values) { for (child in filesByRelativePath.values) {
child.parent?.let(childrenMap::get)?.add(child) val parent = child.parent as? FastJarVirtualFile ?: continue
childrenMap.getOrPut(parent) { mutableListOf() }.add(child)
} }
for ((key, childList) in childrenMap) { for ((key, childList) in childrenMap) {