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
@@ -87,8 +87,6 @@ public class JsConfig {
@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;
}
@@ -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(
@@ -177,7 +177,8 @@ public final class K2JSTranslator {
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);
@@ -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<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 @@ 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