JS: enable release coroutines
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 4ebc2af..ed09cf6 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 @@
@Nullable Set<String> 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 05bf219..82b5acc 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 @@
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 @@
}
}
- 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<DeclarationDescriptor>,
- fqName: FqName
+ bindingContext: BindingContext,
+ module: ModuleDescriptor,
+ scope: Collection<DeclarationDescriptor>,
+ fqName: FqName,
+ languageVersionSettings: LanguageVersionSettings
): ProtoBuf.PackageFragment {
val builder = ProtoBuf.PackageFragment.newBuilder()
@@ -203,7 +215,7 @@
}
val fileRegistry = KotlinFileRegistry()
- val extension = KotlinJavascriptSerializerExtension(fileRegistry)
+ val extension = KotlinJavascriptSerializerExtension(fileRegistry, languageVersionSettings)
val classDescriptors = scope.filterIsInstance<ClassDescriptor>().sortedBy { it.fqNameSafe.asString() }
@@ -232,8 +244,8 @@
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 42f0989..92a1d19 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.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 @@
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 cc06701..4040481 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 @@
List<DeclarationDescriptor> 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 ac9205f..4cdbc09 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.PsiUtils.getSelectorAsSimpleName;
public final class ReferenceTranslator {
- private static final Set<FqNameUnsafe> DECLARATIONS_WITHOUT_SIZE_EFFECTS = new HashSet<>(Arrays.asList(
+ private static final Set<FqNameUnsafe> 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 @@
}
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