From 03459eb80820f19d75f86fe7f8bfd21ab35fc327 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 14 Mar 2018 19:01:45 +0300 Subject: [PATCH] Protect resolverByModuleDescriptor collection with storageManager lock Read access from isResolverFromModuleDescriptorComputed was exposed through DelegatingPackageFragmentProvider. --- .../src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 99802bc8e97..fa905de8ae3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -140,6 +140,7 @@ class ResolverForProjectImpl( ) } + // Protected by ("projectContext.storageManager.lock") private val resolverByModuleDescriptor = mutableMapOf() override val allModules: Collection by lazy { @@ -174,7 +175,9 @@ class ResolverForProjectImpl( } internal fun isResolverForModuleDescriptorComputed(descriptor: ModuleDescriptor) = - descriptor in resolverByModuleDescriptor + projectContext.storageManager.compute { + descriptor in resolverByModuleDescriptor + } override fun descriptorForModule(moduleInfo: M): ModuleDescriptorImpl { if (!isCorrectModuleInfo(moduleInfo)) {