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
This commit is contained in:
Simon Ogorodnik
2022-08-19 17:57:09 +02:00
committed by teamcity
parent 53069ee03f
commit 0fea8073ef
@@ -10,6 +10,7 @@ import com.intellij.mock.MockProject
import com.intellij.openapi.fileTypes.FileTypeRegistry import com.intellij.openapi.fileTypes.FileTypeRegistry
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.MessageCollector 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.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.config.JVMConfigurationKeys
@@ -99,6 +100,7 @@ class ScriptingCompilerConfigurationExtension(
// Register new file extensions // Register new file extensions
val fileTypeRegistry = FileTypeRegistry.getInstance() as CoreFileTypeRegistry val fileTypeRegistry = FileTypeRegistry.getInstance() as CoreFileTypeRegistry
KotlinCoreEnvironment.underApplicationLock {
scriptDefinitionProvider.getKnownFilenameExtensions().filter { scriptDefinitionProvider.getKnownFilenameExtensions().filter {
fileTypeRegistry.getFileTypeByExtension(it) != KotlinFileType.INSTANCE fileTypeRegistry.getFileTypeByExtension(it) != KotlinFileType.INSTANCE
}.forEach { }.forEach {
@@ -107,4 +109,5 @@ class ScriptingCompilerConfigurationExtension(
} }
} }
} }
}