From d0616ed8bde46d7cace0b7b5ddb0838dc4f1ab6b Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Mon, 20 Apr 2015 14:35:44 +0300 Subject: [PATCH] fix KT-7512 JS: project with external library lead to deadlock and IDEA freeze due to wrong storage manager configured #KT-7512 Fixed --- .../serialization/js/KotlinJavascriptSerializerTest.kt | 3 ++- .../kotlin/idea/caches/resolve/JsAnalyzerFacade.kt | 2 +- .../src/org/jetbrains/kotlin/js/config/Config.java | 3 ++- .../serialization/js/KotlinJavascriptSerializationUtil.kt | 6 +++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt index 9dfa2d41a33..405165b98b0 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS import org.jetbrains.kotlin.js.config.LibrarySourcesConfig import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil +import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.test.JetTestUtils import org.jetbrains.kotlin.test.TestCaseWithTmpdir import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator @@ -81,7 +82,7 @@ public class KotlinJavascriptSerializerTest : TestCaseWithTmpdir() { val metadata = KotlinJavascriptMetadataUtils.loadMetadata(metaFile) assert(metadata.size() == 1) - val provider = KotlinJavascriptSerializationUtil.createPackageFragmentProvider(module, metadata[0].body) + val provider = KotlinJavascriptSerializationUtil.createPackageFragmentProvider(module, metadata[0].body, LockBasedStorageManager()) .sure { "No package fragment provider was created" } module.initialize(provider) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt index 6473da7a41a..3ce3f3cb8ac 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt @@ -66,7 +66,7 @@ public object JsAnalyzerFacade : AnalyzerFacade"); PackageFragmentProvider provider = - KotlinJavascriptSerializationUtil.createPackageFragmentProvider(moduleDescriptor, metadata.getBody()); + KotlinJavascriptSerializationUtil.createPackageFragmentProvider(moduleDescriptor, metadata.getBody(), new LockBasedStorageManager()); moduleDescriptor.initialize(provider != null ? provider : PackageFragmentProvider.Empty.INSTANCE$); moduleDescriptor.addDependencyOnModule(KotlinBuiltIns.getInstance().getBuiltInsModule()); diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt index f6b9a14ceed..d29de8f57f1 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.SerializationUtil import org.jetbrains.kotlin.serialization.builtins.BuiltInsSerializerExtension import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeCapabilitiesDeserializer -import org.jetbrains.kotlin.storage.LockBasedStorageManager +import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream @@ -44,7 +44,7 @@ public object KotlinJavascriptSerializationUtil { private val PACKAGE_FILE_SUFFIX = "/.kotlin_package" platformStatic - public fun createPackageFragmentProvider(moduleDescriptor: ModuleDescriptor, metadata: ByteArray): PackageFragmentProvider? { + public fun createPackageFragmentProvider(moduleDescriptor: ModuleDescriptor, metadata: ByteArray, storageManager: StorageManager): PackageFragmentProvider? { val gzipInputStream = GZIPInputStream(ByteArrayInputStream(metadata)) val content = JsProtoBuf.Library.parseFrom(gzipInputStream) gzipInputStream.close() @@ -59,7 +59,7 @@ public object KotlinJavascriptSerializationUtil { if (packageFqNames.isEmpty()) return null return createBuiltInPackageFragmentProvider( - LockBasedStorageManager(), moduleDescriptor, packageFqNames, FlexibleTypeCapabilitiesDeserializer.Dynamic + storageManager, moduleDescriptor, packageFqNames, FlexibleTypeCapabilitiesDeserializer.Dynamic ) { path -> if (!contentMap.containsKey(path)) null else ByteArrayInputStream(contentMap.get(path))