From 9c1e59c720876e74820fa5aa9fcd88672c090f9a Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 8 Oct 2019 18:19:36 +0300 Subject: [PATCH] Use ReentrantLock instead of ReadWriteLock as a more cheaper alternative more suitable to usage pattern --- .../idea/core/script/ScriptDefinitionsManager.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt index 2a204a9073f..cef322e2262 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt @@ -25,7 +25,6 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.diagnostic.ControlFlowException -import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.fileTypes.FileTypeManager @@ -48,7 +47,8 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.flattenTo import java.io.File import java.net.URLClassLoader -import java.util.concurrent.locks.ReentrantReadWriteLock +import java.util.concurrent.locks.ReentrantLock +import kotlin.concurrent.withLock import kotlin.concurrent.write import kotlin.script.dependencies.Environment import kotlin.script.dependencies.ScriptContents @@ -68,14 +68,14 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit private val failedContributorsHashes = HashSet() - private val scriptDefinitionsCacheLock = ReentrantReadWriteLock() + private val scriptDefinitionsCacheLock = ReentrantLock() private val scriptDefinitionsCache = SLRUMap(10, 10) override fun findDefinition(file: File): ScriptDefinition? { if (nonScriptFileName(file.name)) return null if (!isReady()) return null - val cached = scriptDefinitionsCacheLock.write { scriptDefinitionsCache.get(file) } + val cached = scriptDefinitionsCacheLock.withLock { scriptDefinitionsCache.get(file) } if (cached != null) return cached val virtualFile = VfsUtil.findFileByIoFile(file, true) @@ -87,7 +87,7 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit super.findDefinition(file) ?: return null } - scriptDefinitionsCacheLock.write { + scriptDefinitionsCacheLock.withLock { scriptDefinitionsCache.put(file, definition) } @@ -187,7 +187,7 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit } clearCache() - scriptDefinitionsCacheLock.write { scriptDefinitionsCache.clear() } + scriptDefinitionsCacheLock.withLock { scriptDefinitionsCache.clear() } // TODO: clear by script type/definition ScriptConfigurationManager.getInstance(project).clearConfigurationCachesAndRehighlight()