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 4ebc2af727d..ed09cf64b39 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 @@ -87,8 +87,6 @@ public class JsConfig { @Nullable Set librariesToSkip) { this.project = project; this.configuration = configuration.copy(); - CommonConfigurationKeysKt.setLanguageVersionSettings(this.configuration, new ReleaseCoroutinesDisabledLanguageVersionSettings( - CommonConfigurationKeysKt.getLanguageVersionSettings(this.configuration))); this.metadataCache = metadataCache; this.librariesToSkip = librariesToSkip; } 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 05bf2192b0a..82b5accd936 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 @@ -101,7 +101,7 @@ object KotlinJavascriptSerializationUtil { val module = jsDescriptor.data for (fqName in getPackagesFqNames(module).sortedBy { it.asString() }) { - val fragment = serializePackageFragment(bindingContext, module, fqName) + val fragment = serializePackageFragment(bindingContext, module, fqName, languageVersionSettings) if (!fragment.isEmpty()) { serializedFragments[fqName] = fragment @@ -178,16 +178,28 @@ object KotlinJavascriptSerializationUtil { } } - private fun serializePackageFragment(bindingContext: BindingContext, module: ModuleDescriptor, fqName: FqName): ProtoBuf.PackageFragment { + private fun serializePackageFragment( + bindingContext: BindingContext, + module: ModuleDescriptor, + fqName: FqName, + languageVersionSettings: LanguageVersionSettings + ): ProtoBuf.PackageFragment { val packageView = module.getPackage(fqName) - return serializeDescriptors(bindingContext, module, packageView.memberScope.getContributedDescriptors(), fqName) + return serializeDescriptors( + bindingContext, + module, + packageView.memberScope.getContributedDescriptors(), + fqName, + languageVersionSettings + ) } fun serializeDescriptors( - bindingContext: BindingContext, - module: ModuleDescriptor, - scope: Collection, - fqName: FqName + bindingContext: BindingContext, + module: ModuleDescriptor, + scope: Collection, + fqName: FqName, + languageVersionSettings: LanguageVersionSettings ): ProtoBuf.PackageFragment { val builder = ProtoBuf.PackageFragment.newBuilder() @@ -203,7 +215,7 @@ object KotlinJavascriptSerializationUtil { } val fileRegistry = KotlinFileRegistry() - val extension = KotlinJavascriptSerializerExtension(fileRegistry) + val extension = KotlinJavascriptSerializerExtension(fileRegistry, languageVersionSettings) val classDescriptors = scope.filterIsInstance().sortedBy { it.fqNameSafe.asString() } @@ -232,8 +244,8 @@ object KotlinJavascriptSerializationUtil { builder.`package` = DescriptorSerializer.createTopLevel(extension).packagePartProto(fqName, members).build() builder.setExtension( - JsProtoBuf.packageFragmentFiles, - serializeFiles(fileRegistry, bindingContext, AnnotationSerializer(stringTable)) + JsProtoBuf.packageFragmentFiles, + serializeFiles(fileRegistry, bindingContext, AnnotationSerializer(stringTable)) ) val (strings, qualifiedNames) = stringTable.buildProto() diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt index 42f0989c132..92a1d1922f1 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.serialization.js +import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.js.JsProtoBuf @@ -30,7 +32,8 @@ import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol import org.jetbrains.kotlin.types.FlexibleType class KotlinJavascriptSerializerExtension( - private val fileRegistry: KotlinFileRegistry + private val fileRegistry: KotlinFileRegistry, + private val languageVersionSettings: LanguageVersionSettings ) : KotlinSerializerExtensionBase(JsSerializerProtocol) { override val stringTable = JavaScriptStringTable() @@ -77,6 +80,8 @@ class KotlinJavascriptSerializerExtension( val psiFile = file.psiFile return (psiFile as? KtFile)?.let { fileRegistry.lookup(KotlinPsiFileMetadata(it)) } } + + override fun releaseCoroutines() = languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines) } object JsSerializerProtocol : SerializerExtensionProtocol( diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java index cc06701ef92..404048161be 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java @@ -177,7 +177,8 @@ public final class K2JSTranslator { List scope = translationResult.getFileMemberScopes().get(file); assert scope != null : "Could not find descriptors for file: " + file; ProtoBuf.PackageFragment packagePart = serializationUtil.serializeDescriptors( - bindingTrace.getBindingContext(), moduleDescriptor, scope, file.getPackageFqName()); + bindingTrace.getBindingContext(), moduleDescriptor, scope, file.getPackageFqName(), + CommonConfigurationKeysKt.getLanguageVersionSettings(config.getConfiguration())); File ioFile = VfsUtilCore.virtualToIoFile(file.getVirtualFile()); incrementalResults.processPackagePart(ioFile, packagePart.toByteArray(), binaryAst); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java index ac9205fc786..4cdbc09cfb3 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java @@ -49,7 +49,7 @@ import static org.jetbrains.kotlin.js.translate.utils.BindingUtils.getDescriptor import static org.jetbrains.kotlin.js.translate.utils.PsiUtils.getSelectorAsSimpleName; public final class ReferenceTranslator { - private static final Set DECLARATIONS_WITHOUT_SIZE_EFFECTS = new HashSet<>(Arrays.asList( + private static final Set DECLARATIONS_WITHOUT_SIDE_EFFECTS = new HashSet<>(Arrays.asList( new FqNameUnsafe("kotlin.coroutines.experimental.intrinsics.COROUTINE_SUSPENDED"), new FqNameUnsafe("kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED"), KotlinBuiltIns.FQ_NAMES.unit @@ -145,7 +145,7 @@ public final class ReferenceTranslator { } private static boolean isValueWithoutSideEffect(@NotNull DeclarationDescriptor descriptor) { - return DECLARATIONS_WITHOUT_SIZE_EFFECTS.contains(DescriptorUtils.getFqName(descriptor)); + return DECLARATIONS_WITHOUT_SIDE_EFFECTS.contains(DescriptorUtils.getFqName(descriptor)); } @NotNull