JS: enable release coroutines
This commit is contained in:
committed by
Anton Bannykh
parent
f77e023210
commit
4872c97929
@@ -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;
|
||||
}
|
||||
|
||||
+22
-10
@@ -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()
|
||||
|
||||
+6
-1
@@ -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);
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user