From 88af36001c79f66ec3b90ec0e4d0a9d60f9c2f56 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 11 Oct 2016 11:48:30 +0300 Subject: [PATCH] Introduce DeserializationConfiguration Will be used soon to deliver the language/API-version-related behavior to the deserialization --- .../kotlin/frontend/java/di/injection.kt | 1 + .../jetbrains/kotlin/frontend/di/injection.kt | 1 + .../CompilerDeserializationConfiguration.kt | 22 +++++++++++++++++++ .../js/KotlinJavascriptSerializerTest.kt | 6 +++-- .../DeserializationComponentsForJava.kt | 11 +++++----- .../load/kotlin/reflect/RuntimeModuleData.kt | 6 +++-- .../builtInsPackageFragmentProvider.kt | 1 + .../DeserializationConfiguration.kt | 21 ++++++++++++++++++ .../serialization/deserialization/context.kt | 1 + .../idea/caches/resolve/JsAnalyzerFacade.kt | 5 ++++- .../KotlinBuiltInDeserializerForDecompiler.kt | 2 +- .../DeserializerForClassfileDecompiler.kt | 9 +++----- ...tlinJavaScriptDeserializerForDecompiler.kt | 7 +++--- ...JavaScriptDecompiledTextConsistencyTest.kt | 8 ++++--- .../jetbrains/kotlin/js/config/JsConfig.java | 9 ++++++-- .../js/KotlinJavascriptSerializationUtil.kt | 22 +++++++++++++------ ...kotlinJavascriptPackageFragmentProvider.kt | 2 ++ 17 files changed, 100 insertions(+), 34 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt create mode 100644 core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializationConfiguration.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index d396f583263..508aa82f2ec 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -74,6 +74,7 @@ fun StorageComponentContainer.configureJavaTopDownAnalysis( useInstance(InternalFlexibleTypeTransformer) useInstance(languageVersionSettings) + useImpl() } fun createContainerForLazyResolveWithJava( diff --git a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt index fcea00c4691..800380c2b9d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt @@ -142,6 +142,7 @@ fun createContainerForLazyResolve( useInstance(languageVersionSettings) useImpl() + useImpl() targetEnvironment.configure(this) useImpl() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt new file mode 100644 index 00000000000..ff5a9315c9a --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.resolve + +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration + +class CompilerDeserializationConfiguration(private val languageVersionSettings: LanguageVersionSettings) : DeserializationConfiguration diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt index b4af4d044ab..51a3b68acb1 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.config.JSConfigurationKeys import org.jetbrains.kotlin.js.config.LibrarySourcesConfig import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME +import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.TestCaseWithTmpdir @@ -88,8 +89,9 @@ class KotlinJavascriptSerializerTest : TestCaseWithTmpdir() { val metadata = KotlinJavascriptMetadataUtils.loadMetadata(metaFile) assert(metadata.size == 1) - val provider = KotlinJavascriptSerializationUtil.readModule(metadata[0].body, LockBasedStorageManager(), module).data - .sure { "No package fragment provider was created" } + val provider = KotlinJavascriptSerializationUtil.readModule( + metadata.single().body, LockBasedStorageManager(), module, DeserializationConfiguration.Default + ).data.sure { "No package fragment provider was created" } module.initialize(provider) module.setDependencies(module, module.builtIns.builtInsModule) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt index 63b22d78239..a32acd884e7 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.storage.StorageManager class DeserializationComponentsForJava( storageManager: StorageManager, moduleDescriptor: ModuleDescriptor, + configuration: DeserializationConfiguration, classDataFinder: JavaClassDataFinder, annotationAndConstantLoader: BinaryClassAnnotationAndConstantLoaderImpl, packageFragmentProvider: LazyJavaPackageFragmentProvider, @@ -41,13 +42,11 @@ class DeserializationComponentsForJava( // currently built-ins may be not an instance of JvmBuiltIns only in case of built-ins serialization val jvmBuiltIns = moduleDescriptor.builtIns as? JvmBuiltIns components = DeserializationComponents( - storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - LocalClassifierTypeSettings.Default, - errorReporter, lookupTracker, JavaFlexibleTypeDeserializer, ClassDescriptorFactory.EMPTY, - notFoundClasses, + storageManager, moduleDescriptor, configuration, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, + LocalClassifierTypeSettings.Default, errorReporter, lookupTracker, JavaFlexibleTypeDeserializer, + ClassDescriptorFactory.EMPTY, notFoundClasses, additionalClassPartsProvider = jvmBuiltIns?.settings ?: AdditionalClassPartsProvider.None, - platformDependentDeclarationFilter = - jvmBuiltIns?.settings ?: PlatformDependentDeclarationFilter.NoPlatformDependent + platformDependentDeclarationFilter = jvmBuiltIns?.settings ?: PlatformDependentDeclarationFilter.NoPlatformDependent ) } } diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt index f51b6ed135d..c00e7d6f1e8 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents +import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.serialization.deserialization.NotFoundClasses import org.jetbrains.kotlin.storage.LockBasedStorageManager @@ -72,8 +73,9 @@ class RuntimeModuleData private constructor(val deserialization: Deserialization module, notFoundClasses, storageManager, reflectKotlinClassFinder ) val deserializationComponentsForJava = DeserializationComponentsForJava( - storageManager, module, javaClassDataFinder, binaryClassAnnotationAndConstantLoader, - lazyJavaPackageFragmentProvider, notFoundClasses, RuntimeErrorReporter, LookupTracker.DO_NOTHING + storageManager, module, DeserializationConfiguration.Default, javaClassDataFinder, + binaryClassAnnotationAndConstantLoader, lazyJavaPackageFragmentProvider, notFoundClasses, + RuntimeErrorReporter, LookupTracker.DO_NOTHING ) singleModuleClassResolver.resolver = javaDescriptorResolver diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt index 18417b0d2c4..f7d9812a690 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt @@ -44,6 +44,7 @@ fun createBuiltInPackageFragmentProvider( val components = DeserializationComponents( storageManager, module, + DeserializationConfiguration.Default, DeserializedClassDataFinder(provider), AnnotationAndConstantLoaderImpl(module, notFoundClasses, BuiltInSerializerProtocol), provider, diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializationConfiguration.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializationConfiguration.kt new file mode 100644 index 00000000000..1ecb077eb5e --- /dev/null +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializationConfiguration.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.serialization.deserialization + +interface DeserializationConfiguration { + object Default : DeserializationConfiguration +} diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt index 54bc2f9263e..5e318d0ae52 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.storage.StorageManager class DeserializationComponents( val storageManager: StorageManager, val moduleDescriptor: ModuleDescriptor, + val configuration: DeserializationConfiguration, val classDataFinder: ClassDataFinder, val annotationAndConstantLoader: AnnotationAndConstantLoader, AnnotationWithTarget>, val packageFragmentProvider: PackageFragmentProvider, 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 ec8475f25b6..7aa4dbac927 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 @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.resolve.TargetEnvironment import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService +import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils @@ -66,7 +67,9 @@ object JsAnalyzerFacade : AnalyzerFacade() { .flatMap { KotlinJavascriptMetadataUtils.loadMetadata(PathUtil.getLocalPath(it)!!) } .filter { it.isAbiVersionCompatible } .mapNotNull { - KotlinJavascriptSerializationUtil.readModule(it.body, moduleContext.storageManager, moduleDescriptor).data + KotlinJavascriptSerializationUtil.readModule( + it.body, moduleContext.storageManager, moduleDescriptor, container.get() + ).data } if (providers.isNotEmpty()) { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt index 50fff66fba9..8460058c859 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt @@ -48,7 +48,7 @@ class KotlinBuiltInDeserializerForDecompiler( val notFoundClasses = NotFoundClasses(storageManager, moduleDescriptor) deserializationComponents = DeserializationComponents( - storageManager, moduleDescriptor, BuiltInsClassDataFinder(proto, nameResolver), + storageManager, moduleDescriptor, DeserializationConfiguration.Default, BuiltInsClassDataFinder(proto, nameResolver), AnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, BuiltInSerializerProtocol), packageFragmentProvider, ResolveEverythingToKotlinAnyLocalClassifierResolver(builtIns), LoggingErrorReporter(LOG), LookupTracker.DO_NOTHING, FlexibleTypeDeserializer.ThrowException, ClassDescriptorFactory.EMPTY, diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt index 77a8ccd2560..9ddc5e483aa 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt @@ -33,10 +33,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.serialization.ClassDataWithSource -import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder -import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory -import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents -import org.jetbrains.kotlin.serialization.deserialization.NotFoundClasses +import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil @@ -65,8 +62,8 @@ class DeserializerForClassfileDecompiler( BinaryClassAnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, storageManager, classFinder) deserializationComponents = DeserializationComponents( - storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - ResolveEverythingToKotlinAnyLocalClassifierResolver(builtIns), LoggingErrorReporter(LOG), + storageManager, moduleDescriptor, DeserializationConfiguration.Default, classDataFinder, annotationAndConstantLoader, + packageFragmentProvider, ResolveEverythingToKotlinAnyLocalClassifierResolver(builtIns), LoggingErrorReporter(LOG), LookupTracker.DO_NOTHING, JavaFlexibleTypeDeserializer, ClassDescriptorFactory.EMPTY, notFoundClasses ) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt index 06e918e906c..1a0aff6a4fa 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt @@ -63,10 +63,9 @@ class KotlinJavaScriptDeserializerForDecompiler( val annotationAndConstantLoader = AnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, JsSerializerProtocol) deserializationComponents = DeserializationComponents( - storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - ResolveEverythingToKotlinAnyLocalClassifierResolver(builtIns), LoggingErrorReporter(LOG), - LookupTracker.DO_NOTHING, DynamicTypeDeserializer, ClassDescriptorFactory.EMPTY, - notFoundClasses + storageManager, moduleDescriptor, DeserializationConfiguration.Default, classDataFinder, annotationAndConstantLoader, + packageFragmentProvider, ResolveEverythingToKotlinAnyLocalClassifierResolver(builtIns), LoggingErrorReporter(LOG), + LookupTracker.DO_NOTHING, DynamicTypeDeserializer, ClassDescriptorFactory.EMPTY, notFoundClasses ) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDecompiledTextConsistencyTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDecompiledTextConsistencyTest.kt index bb163417933..86bfffab95d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDecompiledTextConsistencyTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDecompiledTextConsistencyTest.kt @@ -17,16 +17,17 @@ package org.jetbrains.kotlin.idea.decompiler.textBuilder import com.intellij.openapi.vfs.VirtualFile -import org.jetbrains.kotlin.fileClasses.OldPackageFacadeClassUtils import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.fileClasses.OldPackageFacadeClassUtils import org.jetbrains.kotlin.idea.decompiler.js.buildDecompiledTextFromJsMetadata import org.jetbrains.kotlin.idea.test.KotlinStdJSProjectDescriptor import org.jetbrains.kotlin.idea.vfilefinder.JsVirtualFileFinder import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.test.KotlinTestUtils @@ -52,8 +53,9 @@ class KotlinJavaScriptDecompiledTextConsistencyTest : TextConsistencyBaseTest() val metadata = KotlinJavascriptMetadataUtils.loadMetadata(stdlibJar) assert(metadata.size == 1) - val provider = KotlinJavascriptSerializationUtil.readModule(metadata[0].body, LockBasedStorageManager(), module).data - .sure { "No package fragment provider was created" } + val provider = KotlinJavascriptSerializationUtil.readModule( + metadata.single().body, LockBasedStorageManager(), module, DeserializationConfiguration.Default + ).data.sure { "No package fragment provider was created" } module.initialize(provider) module.setDependencies(module, module.builtIns.builtInsModule) diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java index d52bbdb640e..c2e8dddff15 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java @@ -26,11 +26,13 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.config.CommonConfigurationKeys; import org.jetbrains.kotlin.config.CompilerConfiguration; +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl; import org.jetbrains.kotlin.descriptors.PackageFragmentProvider; import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; import org.jetbrains.kotlin.js.resolve.JsPlatform; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.KtFile; +import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration; import org.jetbrains.kotlin.resolve.TargetPlatformKt; import org.jetbrains.kotlin.serialization.js.JsModuleDescriptor; import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil; @@ -135,9 +137,12 @@ public abstract class JsConfig { JsPlatform.INSTANCE, Name.special("<" + metadata.getModuleName() + ">"), storageManager, JsPlatform.INSTANCE.getBuiltIns()); - JsModuleDescriptor rawDescriptor = KotlinJavascriptSerializationUtil.readModule( - metadata.getBody(), storageManager, moduleDescriptor); + metadata.getBody(), storageManager, moduleDescriptor, new CompilerDeserializationConfiguration( + configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT) + ) + ); + PackageFragmentProvider provider = rawDescriptor.getData(); moduleDescriptor.initialize(provider != null ? provider : PackageFragmentProvider.Empty.INSTANCE); 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 6c19e69149a..87611c2a745 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 @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.serialization.DescriptorSerializer import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.StringTableImpl +import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils import java.io.ByteArrayInputStream @@ -56,18 +57,25 @@ object KotlinJavascriptSerializationUtil { stream.toByteArray() } - @JvmStatic fun readModule(metadata: ByteArray, storageManager: StorageManager, - kotlinModule: ModuleDescriptor): JsModuleDescriptor { + @JvmStatic + fun readModule( + metadata: ByteArray, storageManager: StorageManager, kotlinModule: ModuleDescriptor, configuration: DeserializationConfiguration + ): JsModuleDescriptor { val jsModule = metadata.readAsContentMap(kotlinModule.name.asString()) - return jsModule.copy(createPackageFragmentProvider(kotlinModule, jsModule.data, storageManager)) + return jsModule.copy(createPackageFragmentProvider(kotlinModule, jsModule.data, storageManager, configuration)) } - @JvmStatic private fun createPackageFragmentProvider(moduleDescriptor: ModuleDescriptor, contentMap: Map, - storageManager: StorageManager): PackageFragmentProvider? { - val packageFqNames = getPackages(contentMap).map { FqName(it) }.toSet() + @JvmStatic + private fun createPackageFragmentProvider( + moduleDescriptor: ModuleDescriptor, + contentMap: Map, + storageManager: StorageManager, + configuration: DeserializationConfiguration + ): PackageFragmentProvider? { + val packageFqNames = getPackages(contentMap).map(::FqName).toSet() if (packageFqNames.isEmpty()) return null - return createKotlinJavascriptPackageFragmentProvider(storageManager, moduleDescriptor, packageFqNames) { + return createKotlinJavascriptPackageFragmentProvider(storageManager, moduleDescriptor, packageFqNames, configuration) { path -> if (!contentMap.containsKey(path)) { when { diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt index f84d902859f..8776559f8b5 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt @@ -29,6 +29,7 @@ fun createKotlinJavascriptPackageFragmentProvider( storageManager: StorageManager, module: ModuleDescriptor, packageFqNames: Set, + configuration: DeserializationConfiguration, loadResource: (String) -> InputStream? ): PackageFragmentProvider { val packageFragments = packageFqNames.map { fqName -> @@ -41,6 +42,7 @@ fun createKotlinJavascriptPackageFragmentProvider( val components = DeserializationComponents( storageManager, module, + configuration, DeserializedClassDataFinder(provider), AnnotationAndConstantLoaderImpl(module, notFoundClasses, JsSerializerProtocol), provider,