From 0fea8073ef1b93c5f37e8f2c7c543e1cf58dac5b Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Fri, 19 Aug 2022 17:57:09 +0200 Subject: [PATCH] Scripting Plugin. Update CoreFileTypeRegistry under lock CoreFileTypeRegistry isn't thread-safe, so it should be updated under application lock, to avoid concurrently mutating underlying structure --- .../plugin/ScriptingCompilerConfigurationExtension.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationExtension.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationExtension.kt index 065445699cb..0262d3ba066 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationExtension.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationExtension.kt @@ -10,6 +10,7 @@ import com.intellij.mock.MockProject import com.intellij.openapi.fileTypes.FileTypeRegistry import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.messages.MessageCollector +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.JVMConfigurationKeys @@ -99,10 +100,12 @@ class ScriptingCompilerConfigurationExtension( // Register new file extensions val fileTypeRegistry = FileTypeRegistry.getInstance() as CoreFileTypeRegistry - scriptDefinitionProvider.getKnownFilenameExtensions().filter { - fileTypeRegistry.getFileTypeByExtension(it) != KotlinFileType.INSTANCE - }.forEach { - fileTypeRegistry.registerFileType(KotlinFileType.INSTANCE, it) + KotlinCoreEnvironment.underApplicationLock { + scriptDefinitionProvider.getKnownFilenameExtensions().filter { + fileTypeRegistry.getFileTypeByExtension(it) != KotlinFileType.INSTANCE + }.forEach { + fileTypeRegistry.registerFileType(KotlinFileType.INSTANCE, it) + } } } }