diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/DynamicTypeDeserializer.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/DynamicTypeDeserializer.kt index 629abbded10..8df594e253e 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/DynamicTypeDeserializer.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/DynamicTypeDeserializer.kt @@ -26,16 +26,17 @@ import org.jetbrains.kotlin.types.createDynamicType import org.jetbrains.kotlin.types.typeUtil.builtIns object DynamicTypeDeserializer : FlexibleTypeDeserializer { - val id = "kotlin.DynamicType" + const val id = "kotlin.DynamicType" override fun create(proto: ProtoBuf.Type, flexibleId: String, lowerBound: SimpleType, upperBound: SimpleType): KotlinType { if (flexibleId != id) return ErrorUtils.createErrorType("Unexpected id: $flexibleId. ($lowerBound..$upperBound)") + return if (StrictEqualityTypeChecker.strictEqualTypes(lowerBound, lowerBound.builtIns.nothingType) && - StrictEqualityTypeChecker.strictEqualTypes(upperBound, upperBound.builtIns.nullableAnyType)) { + StrictEqualityTypeChecker.strictEqualTypes(upperBound, upperBound.builtIns.nullableAnyType) + ) { createDynamicType(lowerBound.builtIns) - } - else { + } else { ErrorUtils.createErrorType("Illegal type range for dynamic type: $lowerBound..$upperBound") } } -} \ No newline at end of file +} diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JavaScriptStringTable.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JavaScriptStringTable.kt index 1da58474ec9..0fd4bb635ad 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JavaScriptStringTable.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JavaScriptStringTable.kt @@ -29,18 +29,16 @@ class JavaScriptStringTable : StringTableImpl() { override fun getLocalClassIdReplacement(descriptor: ClassifierDescriptorWithTypeParameters): ClassId? { return if (descriptor.containingDeclaration is CallableMemberDescriptor) { val superClassifiers = descriptor.getAllSuperClassifiers() - .mapNotNull { it as ClassifierDescriptorWithTypeParameters } - .filter { it != descriptor } - .toList() + .mapNotNull { it as ClassifierDescriptorWithTypeParameters } + .filter { it != descriptor } + .toList() if (superClassifiers.size == 1) { superClassifiers[0].classId - } - else { + } else { val superClass = superClassifiers.find { !DescriptorUtils.isInterface(it) } superClass?.classId ?: ClassId.topLevel(KotlinBuiltIns.FQ_NAMES.any.toSafe()) } - } - else { + } else { super.getLocalClassIdReplacement(descriptor) } } diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsModuleDescriptor.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsModuleDescriptor.kt index c0e05a2d74b..ee7cde33b8d 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsModuleDescriptor.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsModuleDescriptor.kt @@ -17,5 +17,5 @@ package org.jetbrains.kotlin.serialization.js class JsModuleDescriptor(val name: String, val kind: ModuleKind, val imported: List, val data: T) { - fun copy(newData: S) = JsModuleDescriptor(name, kind, imported, newData) -} \ No newline at end of file + fun copy(newData: S) = JsModuleDescriptor(name, kind, imported, newData) +} diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsSerializerProtocol.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsSerializerProtocol.kt new file mode 100644 index 00000000000..edf9295b68f --- /dev/null +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsSerializerProtocol.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.serialization.js + +import org.jetbrains.kotlin.metadata.js.JsProtoBuf +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.protobuf.ExtensionRegistryLite +import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol + +object JsSerializerProtocol : SerializerExtensionProtocol( + ExtensionRegistryLite.newInstance().apply { + JsProtoBuf.registerAllExtensions( + this + ) + }, + JsProtoBuf.packageFqName, + JsProtoBuf.constructorAnnotation, + JsProtoBuf.classAnnotation, + JsProtoBuf.functionAnnotation, + JsProtoBuf.propertyAnnotation, + JsProtoBuf.enumEntryAnnotation, + JsProtoBuf.compileTimeValue, + JsProtoBuf.parameterAnnotation, + JsProtoBuf.typeAnnotation, + JsProtoBuf.typeParameterAnnotation +) { + fun getKjsmFilePath(packageFqName: FqName): String { + val shortName = if (packageFqName.isRoot) Name.identifier("root-package") else packageFqName.shortName() + + return packageFqName.child(shortName).asString().replace('.', '/') + + "." + + KotlinJavascriptSerializationUtil.CLASS_METADATA_FILE_EXTENSION + } +} \ No newline at end of file diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinFileMetadata.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinFileMetadata.kt index 160860048b0..5bc2d6fadea 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinFileMetadata.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinFileMetadata.kt @@ -23,6 +23,6 @@ sealed class KotlinFileMetadata data class KotlinPsiFileMetadata(val ktFile: KtFile) : KotlinFileMetadata() data class KotlinDeserializedFileMetadata( - val packageFragment: KotlinJavascriptPackageFragment, - val fileId: Int -) : KotlinFileMetadata() \ No newline at end of file + val packageFragment: KotlinJavascriptPackageFragment, + val fileId: Int +) : KotlinFileMetadata() diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt index 098078018e4..a56c03eda3d 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt @@ -33,12 +33,12 @@ import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.getValue class KotlinJavascriptPackageFragment( - fqName: FqName, - storageManager: StorageManager, - module: ModuleDescriptor, - proto: ProtoBuf.PackageFragment, - header: JsProtoBuf.Header, - configuration: DeserializationConfiguration + fqName: FqName, + storageManager: StorageManager, + module: ModuleDescriptor, + proto: ProtoBuf.PackageFragment, + header: JsProtoBuf.Header, + configuration: DeserializationConfiguration ) : DeserializedPackageFragmentImpl(fqName, storageManager, module, proto, JsContainerSource(fqName, header, configuration)) { val fileMap: Map = proto.getExtension(JsProtoBuf.packageFragmentFiles).fileList.withIndex().associate { (index, file) -> @@ -68,9 +68,9 @@ class KotlinJavascriptPackageFragment( } class JsContainerSource( - private val fqName: FqName, - header: JsProtoBuf.Header, - configuration: DeserializationConfiguration + private val fqName: FqName, + header: JsProtoBuf.Header, + configuration: DeserializationConfiguration ) : DeserializedContainerSource { val annotations: List = if (header.annotationCount == 0) emptyList() @@ -88,7 +88,7 @@ class KotlinJavascriptPackageFragment( get() = null override val isPreReleaseInvisible: Boolean = - configuration.reportErrorsOnPreReleaseDependencies && (header.flags and 1) != 0 + configuration.reportErrorsOnPreReleaseDependencies && (header.flags and 1) != 0 override val presentableString: String get() = "Package '$fqName'" 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 82b5accd936..b39b036fcb5 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 @@ -49,41 +49,42 @@ import java.util.zip.GZIPInputStream import java.util.zip.GZIPOutputStream object KotlinJavascriptSerializationUtil { - val CLASS_METADATA_FILE_EXTENSION: String = "kjsm" + const val CLASS_METADATA_FILE_EXTENSION: String = "kjsm" @JvmStatic fun readModule( - metadata: ByteArray, - storageManager: StorageManager, - module: ModuleDescriptor, - configuration: DeserializationConfiguration, - lookupTracker: LookupTracker + metadata: ByteArray, + storageManager: StorageManager, + module: ModuleDescriptor, + configuration: DeserializationConfiguration, + lookupTracker: LookupTracker ): JsModuleDescriptor = readModuleFromProto(readModuleAsProto(metadata, module.name.asString()), storageManager, module, configuration, lookupTracker) - @JvmStatic fun readModuleAsProto(metadata: ByteArray, name: String): JsModuleDescriptor = metadata.deserializeToLibraryParts(name) @JvmStatic fun readModuleFromProto( - jsModule: JsModuleDescriptor, - storageManager: StorageManager, module: ModuleDescriptor, - configuration: DeserializationConfiguration, - lookupTracker: LookupTracker + jsModule: JsModuleDescriptor, + storageManager: StorageManager, module: ModuleDescriptor, + configuration: DeserializationConfiguration, + lookupTracker: LookupTracker ): JsModuleDescriptor { val (header, packageFragmentProtos) = jsModule.data - return jsModule.copy(createKotlinJavascriptPackageFragmentProvider( + return jsModule.copy( + createKotlinJavascriptPackageFragmentProvider( storageManager, module, header, packageFragmentProtos, configuration, lookupTracker - )) + ) + ) } fun readDescriptors( - metadata: PackagesWithHeaderMetadata, - storageManager: StorageManager, - module: ModuleDescriptor, - configuration: DeserializationConfiguration, - lookupTracker: LookupTracker + metadata: PackagesWithHeaderMetadata, + storageManager: StorageManager, + module: ModuleDescriptor, + configuration: DeserializationConfiguration, + lookupTracker: LookupTracker ): PackageFragmentProvider { val scopeProto = metadata.packages.map { ProtoBuf.PackageFragment.parseFrom(it, JsSerializerProtocol.extensionRegistry) @@ -256,9 +257,9 @@ object KotlinJavascriptSerializationUtil { } private fun serializeFiles( - fileRegistry: KotlinFileRegistry, - bindingContext: BindingContext, - serializer: AnnotationSerializer + fileRegistry: KotlinFileRegistry, + bindingContext: BindingContext, + serializer: AnnotationSerializer ): JsProtoBuf.Files { val filesProto = JsProtoBuf.Files.newBuilder() for ((file, id) in fileRegistry.fileIds.entries.sortedBy { it.value }) { @@ -279,7 +280,7 @@ object KotlinJavascriptSerializationUtil { } private fun ProtoBuf.PackageFragment.isEmpty(): Boolean = - class_Count == 0 && `package`.let { it.functionCount == 0 && it.propertyCount == 0 && it.typeAliasCount == 0 } + class_Count == 0 && `package`.let { it.functionCount == 0 && it.propertyCount == 0 && it.typeAliasCount == 0 } fun serializeHeader( module: ModuleDescriptor, packageFqName: FqName?, languageVersionSettings: LanguageVersionSettings @@ -336,19 +337,19 @@ object KotlinJavascriptSerializationUtil { private fun ByteArray.deserializeToLibraryParts(name: String): JsModuleDescriptor { val (header, content) = GZIPInputStream(ByteArrayInputStream(this)).use { stream -> JsProtoBuf.Header.parseDelimitedFrom(stream, JsSerializerProtocol.extensionRegistry) to - JsProtoBuf.Library.parseFrom(stream, JsSerializerProtocol.extensionRegistry) + JsProtoBuf.Library.parseFrom(stream, JsSerializerProtocol.extensionRegistry) } return JsModuleDescriptor( - name = name, - data = KotlinJavaScriptLibraryParts(header, content.packageFragmentList), - kind = when (content.kind) { - null, JsProtoBuf.Library.Kind.PLAIN -> ModuleKind.PLAIN - JsProtoBuf.Library.Kind.AMD -> ModuleKind.AMD - JsProtoBuf.Library.Kind.COMMON_JS -> ModuleKind.COMMON_JS - JsProtoBuf.Library.Kind.UMD -> ModuleKind.UMD - }, - imported = content.importedModuleList + name = name, + data = KotlinJavaScriptLibraryParts(header, content.packageFragmentList), + kind = when (content.kind) { + null, JsProtoBuf.Library.Kind.PLAIN -> ModuleKind.PLAIN + JsProtoBuf.Library.Kind.AMD -> ModuleKind.AMD + JsProtoBuf.Library.Kind.COMMON_JS -> ModuleKind.COMMON_JS + JsProtoBuf.Library.Kind.UMD -> ModuleKind.UMD + }, + imported = content.importedModuleList ) } } @@ -360,4 +361,4 @@ internal fun DeclarationDescriptor.extractFileId(): Int? = when (this) { is DeserializedSimpleFunctionDescriptor -> proto.getExtension(JsProtoBuf.functionContainingFileId) is DeserializedPropertyDescriptor -> proto.getExtension(JsProtoBuf.propertyContainingFileId) else -> null -} \ No newline at end of file +} 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 295ffe90a1f..9c866d73a44 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 @@ -22,19 +22,15 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.js.JsProtoBuf import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.protobuf.ExtensionRegistryLite import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.source.PsiSourceFile import org.jetbrains.kotlin.serialization.KotlinSerializerExtensionBase -import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol import org.jetbrains.kotlin.types.FlexibleType class KotlinJavascriptSerializerExtension( - private val fileRegistry: KotlinFileRegistry, - private val languageVersionSettings: LanguageVersionSettings + private val fileRegistry: KotlinFileRegistry, + private val languageVersionSettings: LanguageVersionSettings ) : KotlinSerializerExtensionBase(JsSerializerProtocol) { override val stringTable = JavaScriptStringTable() @@ -92,19 +88,3 @@ class KotlinJavascriptSerializerExtension( override fun releaseCoroutines() = languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines) } - -object JsSerializerProtocol : SerializerExtensionProtocol( - ExtensionRegistryLite.newInstance().apply { JsProtoBuf.registerAllExtensions(this) }, - JsProtoBuf.packageFqName, - JsProtoBuf.constructorAnnotation, JsProtoBuf.classAnnotation, JsProtoBuf.functionAnnotation, JsProtoBuf.propertyAnnotation, - JsProtoBuf.enumEntryAnnotation, JsProtoBuf.compileTimeValue, JsProtoBuf.parameterAnnotation, JsProtoBuf.typeAnnotation, - JsProtoBuf.typeParameterAnnotation -) { - fun getKjsmFilePath(packageFqName: FqName): String { - val shortName = if (packageFqName.isRoot) Name.identifier("root-package") else packageFqName.shortName() - - return packageFqName.child(shortName).asString().replace('.', '/') + - "." + - KotlinJavascriptSerializationUtil.CLASS_METADATA_FILE_EXTENSION - } -} diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt index 49da1c6afa7..436553388b8 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt @@ -30,12 +30,12 @@ import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.storage.StorageManager fun createKotlinJavascriptPackageFragmentProvider( - storageManager: StorageManager, - module: ModuleDescriptor, - header: JsProtoBuf.Header, - packageFragmentProtos: List, - configuration: DeserializationConfiguration, - lookupTracker: LookupTracker + storageManager: StorageManager, + module: ModuleDescriptor, + header: JsProtoBuf.Header, + packageFragmentProtos: List, + configuration: DeserializationConfiguration, + lookupTracker: LookupTracker ): PackageFragmentProvider { val packageFragments: MutableList = packageFragmentProtos.mapNotNullTo(mutableListOf()) { proto -> proto.fqName?.let { fqName -> @@ -62,21 +62,21 @@ fun createKotlinJavascriptPackageFragmentProvider( val notFoundClasses = NotFoundClasses(storageManager, module) val components = DeserializationComponents( - storageManager, - module, - configuration, - DeserializedClassDataFinder(provider), - AnnotationAndConstantLoaderImpl(module, notFoundClasses, JsSerializerProtocol), - provider, - LocalClassifierTypeSettings.Default, - ErrorReporter.DO_NOTHING, - lookupTracker, - DynamicTypeDeserializer, - emptyList(), - notFoundClasses, - ContractDeserializerImpl(configuration), - platformDependentDeclarationFilter = PlatformDependentDeclarationFilter.NoPlatformDependent, - extensionRegistryLite = JsSerializerProtocol.extensionRegistry + storageManager, + module, + configuration, + DeserializedClassDataFinder(provider), + AnnotationAndConstantLoaderImpl(module, notFoundClasses, JsSerializerProtocol), + provider, + LocalClassifierTypeSettings.Default, + ErrorReporter.DO_NOTHING, + lookupTracker, + DynamicTypeDeserializer, + emptyList(), + notFoundClasses, + ContractDeserializerImpl(configuration), + platformDependentDeclarationFilter = PlatformDependentDeclarationFilter.NoPlatformDependent, + extensionRegistryLite = JsSerializerProtocol.extensionRegistry ) for (packageFragment in packageFragments.filterIsInstance()) {