[K/N] Drop merging forward and real declaration in deserializer

^KT-59643
This commit is contained in:
Pavel Kunyavskiy
2023-07-11 14:05:34 +02:00
committed by Space Team
parent e4c2fa1080
commit d797505f06
15 changed files with 19 additions and 126 deletions
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.library.metadata
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
import org.jetbrains.kotlin.descriptors.deserialization.*
import org.jetbrains.kotlin.library.metadata.impl.KlibMetadataDeserializedPackageFragmentsFactoryImpl
import org.jetbrains.kotlin.library.metadata.impl.KlibMetadataModuleDescriptorFactoryImpl
import org.jetbrains.kotlin.library.metadata.impl.KlibModuleDescriptorFactoryImpl
@@ -19,13 +19,8 @@ import org.jetbrains.kotlin.storage.StorageManager
*/
class KlibMetadataFactories(
createBuiltIns: (StorageManager) -> KotlinBuiltIns,
val flexibleTypeDeserializer: FlexibleTypeDeserializer,
val platformDependentTypeTransformer: PlatformDependentTypeTransformer
val flexibleTypeDeserializer: FlexibleTypeDeserializer
) {
constructor(createBuiltIns:(StorageManager) -> KotlinBuiltIns, flexibleTypeDeserializer: FlexibleTypeDeserializer) :
this(createBuiltIns, flexibleTypeDeserializer, PlatformDependentTypeTransformer.None)
/**
* The default [KlibModuleDescriptorFactory] factory instance.
*/
@@ -58,8 +53,7 @@ class KlibMetadataFactories(
KlibMetadataModuleDescriptorFactoryImpl(
descriptorFactory,
packageFragmentsFactory,
flexibleTypeDeserializer,
platformDependentTypeTransformer
flexibleTypeDeserializer
)
fun createDefaultKonanResolvedModuleDescriptorsFactory(
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.library.KotlinLibrary
@@ -22,7 +21,6 @@ interface KlibMetadataModuleDescriptorFactory {
val descriptorFactory: KlibModuleDescriptorFactory
val packageFragmentsFactory: KlibMetadataDeserializedPackageFragmentsFactory
val flexibleTypeDeserializer: FlexibleTypeDeserializer
val platformDependentTypeTransformer: PlatformDependentTypeTransformer
fun createDescriptor(
library: KotlinLibrary,
@@ -1,35 +0,0 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* 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.library.metadata
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.NativeForwardDeclarationKind
import org.jetbrains.kotlin.types.SimpleType
import org.jetbrains.kotlin.types.SupposititiousSimpleType
class NativeTypeTransformer : PlatformDependentTypeTransformer {
override fun transformPlatformType(classId: ClassId, computedType: SimpleType): SimpleType {
val originalPackageFqn = classId.packageFqName
if (originalPackageFqn in forwardPackagesSet) {
// This hack is about keeping original class id written into proto which is required for correct IR linkage
val constructor = computedType.constructor
val classDescriptor = constructor.declarationDescriptor as ClassDescriptor
val realPackageFqn = (classDescriptor.containingDeclaration as PackageFragmentDescriptor).fqName
if (originalPackageFqn != realPackageFqn) {
return SupposititiousSimpleType(computedType, classId)
}
}
return computedType
}
companion object {
private val forwardPackagesSet = NativeForwardDeclarationKind.entries.map { it.packageFqName }.toSet()
}
}
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentP
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.contracts.ContractDeserializerImpl
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
@@ -33,8 +32,7 @@ private val ModuleDescriptorImpl.isStdlibModule
class KlibMetadataModuleDescriptorFactoryImpl(
override val descriptorFactory: KlibModuleDescriptorFactory,
override val packageFragmentsFactory: KlibMetadataDeserializedPackageFragmentsFactory,
override val flexibleTypeDeserializer: FlexibleTypeDeserializer,
override val platformDependentTypeTransformer: PlatformDependentTypeTransformer
override val flexibleTypeDeserializer: FlexibleTypeDeserializer
) : KlibMetadataModuleDescriptorFactory {
override fun createDescriptorOptionalBuiltIns(
@@ -173,7 +171,6 @@ class KlibMetadataModuleDescriptorFactoryImpl(
ContractDeserializerImpl(configuration, storageManager),
extensionRegistryLite = KlibMetadataSerializerProtocol.extensionRegistry,
samConversionResolver = SamConversionResolverImpl(storageManager, samWithReceiverResolvers = emptyList()),
platformDependentTypeTransformer = platformDependentTypeTransformer,
enumEntriesDeserializationSupport = enumEntriesDeserializationSupport,
)