Configuration: Use soft references to keep library kind cache
#KT-24943 Fixed
This commit is contained in:
@@ -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)) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user