JS: enable release coroutines

This commit is contained in:
Anton Bannykh
2018-07-08 22:40:32 +03:00
committed by Anton Bannykh
parent f77e023210
commit 4872c97929
5 changed files with 32 additions and 16 deletions
@@ -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<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 @@ object KotlinJavascriptSerializationUtil {
}
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 @@ 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()
@@ -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(