Configuration: Use soft references to keep library kind cache

#KT-24943 Fixed
This commit is contained in:
Alexey Sedunov
2018-06-20 16:38:04 +03:00
parent 60583e557f
commit 76ac65f723
@@ -12,11 +12,13 @@ import com.intellij.openapi.roots.ModuleRootListener
import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.impl.libraries.LibraryEx
import com.intellij.openapi.roots.libraries.PersistentLibraryKind import com.intellij.openapi.roots.libraries.PersistentLibraryKind
import java.util.* import com.intellij.util.containers.SoftFactoryMap
class LibraryEffectiveKindProviderImpl(project: Project) : LibraryEffectiveKindProvider { class LibraryEffectiveKindProviderImpl(project: Project) : LibraryEffectiveKindProvider {
companion object { companion object {
private val effectiveKindMap = HashMap<LibraryEx, PersistentLibraryKind<*>?>() private val effectiveKindMap = object : SoftFactoryMap<LibraryEx, PersistentLibraryKind<*>?>() {
override fun create(key: LibraryEx) = detectLibraryKind(key.getFiles(OrderRootType.CLASSES))
}
} }
init { init {
@@ -36,10 +38,8 @@ class LibraryEffectiveKindProviderImpl(project: Project) : LibraryEffectiveKindP
val kind = library.kind val kind = library.kind
return when (kind) { return when (kind) {
is KotlinLibraryKind -> kind is KotlinLibraryKind -> kind
else -> { else -> synchronized(effectiveKindMap) {
synchronized(effectiveKindMap) { effectiveKindMap.get(library)
effectiveKindMap.getOrPut(library) { detectLibraryKind(library.getFiles(OrderRootType.CLASSES)) }
}
} }
} }
} }