Reformat module 'js.serializer'
This commit is contained in:
+6
-5
@@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,5 +17,5 @@
|
||||
package org.jetbrains.kotlin.serialization.js
|
||||
|
||||
class JsModuleDescriptor<out T>(val name: String, val kind: ModuleKind, val imported: List<String>, val data: T) {
|
||||
fun<S> copy(newData: S) = JsModuleDescriptor(name, kind, imported, newData)
|
||||
}
|
||||
fun <S> copy(newData: S) = JsModuleDescriptor(name, kind, imported, newData)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,6 @@ sealed class KotlinFileMetadata
|
||||
data class KotlinPsiFileMetadata(val ktFile: KtFile) : KotlinFileMetadata()
|
||||
|
||||
data class KotlinDeserializedFileMetadata(
|
||||
val packageFragment: KotlinJavascriptPackageFragment,
|
||||
val fileId: Int
|
||||
) : KotlinFileMetadata()
|
||||
val packageFragment: KotlinJavascriptPackageFragment,
|
||||
val fileId: Int
|
||||
) : KotlinFileMetadata()
|
||||
|
||||
+10
-10
@@ -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<Int, FileHolder> =
|
||||
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<ClassId> =
|
||||
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'"
|
||||
|
||||
+34
-33
@@ -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<PackageFragmentProvider?> =
|
||||
readModuleFromProto(readModuleAsProto(metadata, module.name.asString()), storageManager, module, configuration, lookupTracker)
|
||||
|
||||
@JvmStatic
|
||||
fun readModuleAsProto(metadata: ByteArray, name: String): JsModuleDescriptor<KotlinJavaScriptLibraryParts> =
|
||||
metadata.deserializeToLibraryParts(name)
|
||||
|
||||
@JvmStatic
|
||||
fun readModuleFromProto(
|
||||
jsModule: JsModuleDescriptor<KotlinJavaScriptLibraryParts>,
|
||||
storageManager: StorageManager, module: ModuleDescriptor,
|
||||
configuration: DeserializationConfiguration,
|
||||
lookupTracker: LookupTracker
|
||||
jsModule: JsModuleDescriptor<KotlinJavaScriptLibraryParts>,
|
||||
storageManager: StorageManager, module: ModuleDescriptor,
|
||||
configuration: DeserializationConfiguration,
|
||||
lookupTracker: LookupTracker
|
||||
): JsModuleDescriptor<PackageFragmentProvider?> {
|
||||
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<KotlinJavaScriptLibraryParts> {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
+2
-22
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+21
-21
@@ -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<ProtoBuf.PackageFragment>,
|
||||
configuration: DeserializationConfiguration,
|
||||
lookupTracker: LookupTracker
|
||||
storageManager: StorageManager,
|
||||
module: ModuleDescriptor,
|
||||
header: JsProtoBuf.Header,
|
||||
packageFragmentProtos: List<ProtoBuf.PackageFragment>,
|
||||
configuration: DeserializationConfiguration,
|
||||
lookupTracker: LookupTracker
|
||||
): PackageFragmentProvider {
|
||||
val packageFragments: MutableList<PackageFragmentDescriptor> = 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<KotlinJavascriptPackageFragment>()) {
|
||||
|
||||
Reference in New Issue
Block a user