[K/N] Drop merging forward and real declaration in deserializer
^KT-59643
This commit is contained in:
committed by
Space Team
parent
e4c2fa1080
commit
d797505f06
@@ -177,8 +177,7 @@ private class KlibMetadataDependencyContainer(
|
||||
KlibMetadataModuleDescriptorFactoryImpl(
|
||||
MetadataFactories.DefaultDescriptorFactory,
|
||||
MetadataFactories.DefaultPackageFragmentsFactory,
|
||||
MetadataFactories.flexibleTypeDeserializer,
|
||||
MetadataFactories.platformDependentTypeTransformer
|
||||
MetadataFactories.flexibleTypeDeserializer
|
||||
)
|
||||
}
|
||||
|
||||
@@ -209,6 +208,5 @@ private class KlibMetadataDependencyContainer(
|
||||
private val MetadataFactories =
|
||||
KlibMetadataFactories(
|
||||
{ DefaultBuiltIns.Instance },
|
||||
NullFlexibleTypeDeserializer,
|
||||
NativeTypeTransformer()
|
||||
NullFlexibleTypeDeserializer
|
||||
)
|
||||
|
||||
+4
-15
@@ -91,21 +91,10 @@ open class DescriptorMangleComputer(builder: StringBuilder, mode: MangleMode) :
|
||||
when (val type = wrappedType.unwrap()) {
|
||||
is SimpleType -> {
|
||||
|
||||
if (type is SupposititiousSimpleType) {
|
||||
val classId = type.overwrittenClass
|
||||
classId.packageFqName.let {
|
||||
if (!it.isRoot) {
|
||||
builder.appendSignature(it.asString())
|
||||
builder.appendSignature(MangleConstant.FQN_SEPARATOR)
|
||||
}
|
||||
builder.appendSignature(classId.relativeClassName.asString())
|
||||
}
|
||||
} else {
|
||||
when (val classifier = type.constructor.declarationDescriptor) {
|
||||
is ClassDescriptor -> with(copy(MangleMode.FQNAME)) { classifier.visit() }
|
||||
is TypeParameterDescriptor -> tBuilder.mangleTypeParameterReference(classifier)
|
||||
else -> error("Unexpected classifier: $classifier")
|
||||
}
|
||||
when (val classifier = type.constructor.declarationDescriptor) {
|
||||
is ClassDescriptor -> with(copy(MangleMode.FQNAME)) { classifier.visit() }
|
||||
is TypeParameterDescriptor -> tBuilder.mangleTypeParameterReference(classifier)
|
||||
else -> error("Unexpected classifier: $classifier")
|
||||
}
|
||||
|
||||
mangleTypeArguments(tBuilder, type, null)
|
||||
|
||||
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.library.impl.KotlinLibraryLayoutForWriter
|
||||
import org.jetbrains.kotlin.library.impl.KotlinLibraryWriterImpl
|
||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
|
||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataVersion
|
||||
import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer
|
||||
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
||||
import org.jetbrains.kotlin.library.resolveSingleFileKlib
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -114,7 +113,7 @@ object KlibTestUtil {
|
||||
strategy = ToolingSingleFileKlibResolveStrategy
|
||||
)
|
||||
|
||||
val metadataFactories = KlibMetadataFactories({ DefaultBuiltIns.Instance }, NullFlexibleTypeDeserializer, NativeTypeTransformer())
|
||||
val metadataFactories = KlibMetadataFactories({ DefaultBuiltIns.Instance }, NullFlexibleTypeDeserializer)
|
||||
|
||||
val module = metadataFactories.DefaultDeserializedDescriptorFactory.createDescriptor(
|
||||
library = library,
|
||||
|
||||
+3
-9
@@ -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(
|
||||
|
||||
-2
@@ -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,
|
||||
|
||||
-35
@@ -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()
|
||||
}
|
||||
}
|
||||
+1
-4
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
-17
@@ -1,17 +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.descriptors.deserialization
|
||||
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.types.SimpleType
|
||||
|
||||
interface PlatformDependentTypeTransformer {
|
||||
fun transformPlatformType(classId: ClassId, computedType: SimpleType): SimpleType
|
||||
|
||||
object None : PlatformDependentTypeTransformer {
|
||||
override fun transformPlatformType(classId: ClassId, computedType: SimpleType): SimpleType = computedType
|
||||
}
|
||||
}
|
||||
@@ -237,31 +237,6 @@ private class SimpleTypeImpl(
|
||||
}
|
||||
}
|
||||
|
||||
// Note: a hack to support class descriptor overwriting in case of K/N forward declaration replacement and other such cases
|
||||
class SupposititiousSimpleType(private val realType: SimpleType, val overwrittenClass: ClassId) : SimpleType() {
|
||||
|
||||
private fun maybeWrap(newType: SimpleType): SupposititiousSimpleType {
|
||||
return if (newType === realType) this
|
||||
else SupposititiousSimpleType(newType, overwrittenClass)
|
||||
}
|
||||
|
||||
override fun replaceAttributes(newAttributes: TypeAttributes): SimpleType =
|
||||
maybeWrap(realType.replaceAttributes(newAttributes))
|
||||
|
||||
override fun makeNullableAsSpecified(newNullability: Boolean): SimpleType =
|
||||
maybeWrap(realType.makeNullableAsSpecified(newNullability))
|
||||
|
||||
@TypeRefinement
|
||||
override fun refine(kotlinTypeRefiner: KotlinTypeRefiner): SimpleType =
|
||||
maybeWrap(realType.refine(kotlinTypeRefiner))
|
||||
|
||||
override val constructor: TypeConstructor = realType.constructor
|
||||
override val arguments: List<TypeProjection> = realType.arguments
|
||||
override val isMarkedNullable: Boolean = realType.isMarkedNullable
|
||||
override val memberScope: MemberScope = realType.memberScope
|
||||
override val attributes: TypeAttributes get() = realType.attributes
|
||||
}
|
||||
|
||||
abstract class DelegatingSimpleTypeImpl(override val delegate: SimpleType) : DelegatingSimpleType() {
|
||||
override fun replaceAttributes(newAttributes: TypeAttributes): SimpleType =
|
||||
if (newAttributes !== attributes)
|
||||
|
||||
-5
@@ -137,11 +137,6 @@ class TypeDeserializer(
|
||||
simpleType.withAbbreviation(simpleType(it, expandTypeAliases = false))
|
||||
} ?: simpleType
|
||||
|
||||
if (proto.hasClassName()) {
|
||||
val classId = c.nameResolver.getClassId(proto.className)
|
||||
return c.components.platformDependentTypeTransformer.transformPlatformType(classId, computedType)
|
||||
}
|
||||
|
||||
return computedType
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.deserialization.AdditionalClassPartsProvider
|
||||
import org.jetbrains.kotlin.descriptors.deserialization.ClassDescriptorFactory
|
||||
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter
|
||||
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.*
|
||||
@@ -54,7 +53,6 @@ class DeserializationComponents(
|
||||
val extensionRegistryLite: ExtensionRegistryLite,
|
||||
val kotlinTypeChecker: NewKotlinTypeChecker = NewKotlinTypeChecker.Default,
|
||||
val samConversionResolver: SamConversionResolver,
|
||||
val platformDependentTypeTransformer: PlatformDependentTypeTransformer = PlatformDependentTypeTransformer.None,
|
||||
val typeAttributeTranslators: List<TypeAttributeTranslator> = listOf(DefaultTypeAttributeTranslator),
|
||||
val enumEntriesDeserializationSupport: EnumEntriesDeserializationSupport = EnumEntriesDeserializationSupport.Default,
|
||||
) {
|
||||
|
||||
+1
-2
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
|
||||
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
|
||||
import org.jetbrains.kotlin.descriptors.isEmpty
|
||||
import org.jetbrains.kotlin.descriptors.konan.isNativeStdlib
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrConfiguration
|
||||
@@ -39,7 +38,7 @@ import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
|
||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||
import org.jetbrains.kotlin.name.*
|
||||
|
||||
internal val KlibFactories = KlibMetadataFactories(::KonanBuiltIns, DynamicTypeDeserializer, PlatformDependentTypeTransformer.None)
|
||||
internal val KlibFactories = KlibMetadataFactories(::KonanBuiltIns, DynamicTypeDeserializer)
|
||||
|
||||
internal fun PhaseContext.fir2Ir(
|
||||
input: FirOutput.Full,
|
||||
|
||||
+1
-2
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDependenciesImpl
|
||||
import org.jetbrains.kotlin.descriptors.konan.isNativeStdlib
|
||||
import org.jetbrains.kotlin.library.metadata.CurrentKlibModuleOrigin
|
||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
|
||||
import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer
|
||||
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
@@ -29,7 +28,7 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProvid
|
||||
|
||||
internal object TopDownAnalyzerFacadeForKonan {
|
||||
|
||||
private val nativeFactories = KlibMetadataFactories(::KonanBuiltIns, NullFlexibleTypeDeserializer, NativeTypeTransformer())
|
||||
private val nativeFactories = KlibMetadataFactories(::KonanBuiltIns, NullFlexibleTypeDeserializer)
|
||||
|
||||
fun analyzeFiles(files: Collection<KtFile>, context: FrontendContext): AnalysisResult {
|
||||
val config = context.config
|
||||
|
||||
+5
@@ -8,6 +8,11 @@ package sample.tensorflow
|
||||
import kotlinx.cinterop.*
|
||||
import platform.posix.size_t
|
||||
import tensorflow.*
|
||||
import cnames.structs.TF_Status
|
||||
import cnames.structs.TF_Operation
|
||||
import cnames.structs.TF_Tensor
|
||||
import cnames.structs.TF_OperationDescription
|
||||
import cnames.structs.TF_Session
|
||||
|
||||
typealias Status = CPointer<TF_Status>
|
||||
typealias Operation = CPointer<TF_Operation>
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.config.ApiVersion
|
||||
import org.jetbrains.kotlin.config.LanguageVersion
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.descriptors.konan.isNativeStdlib
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
@@ -33,7 +32,7 @@ import org.jetbrains.kotlin.util.Logger
|
||||
import org.jetbrains.kotlin.util.removeSuffixIfPresent
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
internal val KlibFactories = KlibMetadataFactories(::KonanBuiltIns, DynamicTypeDeserializer, PlatformDependentTypeTransformer.None)
|
||||
internal val KlibFactories = KlibMetadataFactories(::KonanBuiltIns, DynamicTypeDeserializer)
|
||||
|
||||
fun printUsage() {
|
||||
println("Usage: klib <command> <library> <options>")
|
||||
|
||||
Reference in New Issue
Block a user