diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IdSignature.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IdSignature.kt index 5f4bbf6277e..40bf545ec63 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IdSignature.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IdSignature.kt @@ -338,34 +338,6 @@ sealed class IdSignature { override fun hashCode(): Int = id } - class GlobalFileLocalSignature(val container: IdSignature, val id: Long, val filePath: String) : IdSignature() { - override val isPubliclyVisible: Boolean get() = true - - override fun packageFqName(): FqName = container.packageFqName() - - override fun topLevelSignature(): IdSignature { - val topLevelContainer = container.topLevelSignature() - if (topLevelContainer === container) { - if (topLevelContainer is CommonSignature && topLevelContainer.declarationFqName.isEmpty()) { - // private top level - return this - } - } - return topLevelContainer - } - - override fun nearestPublicSig(): IdSignature = container.nearestPublicSig() - - override fun render(): String = "${container.render()}:$id from ${filePath.split('/').last()}" - - override fun equals(other: Any?): Boolean = - other is GlobalFileLocalSignature && id == other.id && container == other.container && filePath == other.filePath - - private val hashCode = (container.hashCode() * 31 + id.hashCode()) * 31 + filePath.hashCode() - - override fun hashCode(): Int = hashCode - } - // Used to reference local variable and value parameters in function class GlobalScopeLocalDeclaration(val id: Int, val description: String = "", val filePath: String) : IdSignature() { override val isPubliclyVisible: Boolean get() = false diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt index 10bceceb0af..08ef2a5b53d 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt @@ -6,7 +6,10 @@ package org.jetbrains.kotlin.backend.common.serialization import org.jetbrains.kotlin.backend.common.serialization.encodings.* -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.DescriptorVisibilities +import org.jetbrains.kotlin.descriptors.InlineClassRepresentation +import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrFileEntry import org.jetbrains.kotlin.ir.declarations.* @@ -28,11 +31,11 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.backend.common.serialization.proto.AccessorIdSignature as ProtoAccessorIdSignature import org.jetbrains.kotlin.backend.common.serialization.proto.Actual as ProtoActual +import org.jetbrains.kotlin.backend.common.serialization.proto.CommonIdSignature as ProtoCommonIdSignature import org.jetbrains.kotlin.backend.common.serialization.proto.CompositeSignature as ProtoCompositeSignature import org.jetbrains.kotlin.backend.common.serialization.proto.FieldAccessCommon as ProtoFieldAccessCommon import org.jetbrains.kotlin.backend.common.serialization.proto.FileEntry as ProtoFileEntry import org.jetbrains.kotlin.backend.common.serialization.proto.FileLocalIdSignature as ProtoFileLocalIdSignature -import org.jetbrains.kotlin.backend.common.serialization.proto.ScopeLocalIdSignature as ProtoScopeLocalIdSignature import org.jetbrains.kotlin.backend.common.serialization.proto.FileSignature as ProtoFileSignature import org.jetbrains.kotlin.backend.common.serialization.proto.IdSignature as ProtoIdSignature import org.jetbrains.kotlin.backend.common.serialization.proto.IrAnonymousInit as ProtoAnonymousInit @@ -69,8 +72,6 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunction as Pro import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionBase as ProtoFunctionBase import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionExpression as ProtoFunctionExpression import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionReference as ProtoFunctionReference -import org.jetbrains.kotlin.backend.common.serialization.proto.IrRawFunctionReference as ProtoRawFunctionReference -import org.jetbrains.kotlin.backend.common.serialization.proto.IrReturnableBlock as ProtoReturnableBlock import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetClass as ProtoGetClass import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetEnumValue as ProtoGetEnumValue import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetField as ProtoGetField @@ -83,7 +84,9 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.IrLocalDelegatedP import org.jetbrains.kotlin.backend.common.serialization.proto.IrOperation as ProtoOperation import org.jetbrains.kotlin.backend.common.serialization.proto.IrProperty as ProtoProperty import org.jetbrains.kotlin.backend.common.serialization.proto.IrPropertyReference as ProtoPropertyReference +import org.jetbrains.kotlin.backend.common.serialization.proto.IrRawFunctionReference as ProtoRawFunctionReference import org.jetbrains.kotlin.backend.common.serialization.proto.IrReturn as ProtoReturn +import org.jetbrains.kotlin.backend.common.serialization.proto.IrReturnableBlock as ProtoReturnableBlock import org.jetbrains.kotlin.backend.common.serialization.proto.IrReturnableBlockReturn as ProtoReturnableBlockReturn import org.jetbrains.kotlin.backend.common.serialization.proto.IrSetField as ProtoSetField import org.jetbrains.kotlin.backend.common.serialization.proto.IrSetValue as ProtoSetValue @@ -109,10 +112,10 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.IrWhen as ProtoWh import org.jetbrains.kotlin.backend.common.serialization.proto.IrWhile as ProtoWhile import org.jetbrains.kotlin.backend.common.serialization.proto.LocalSignature as ProtoLocalSignature import org.jetbrains.kotlin.backend.common.serialization.proto.Loop as ProtoLoop +import org.jetbrains.kotlin.backend.common.serialization.proto.LoweredIdSignature as ProtoLoweredIdSignature import org.jetbrains.kotlin.backend.common.serialization.proto.MemberAccessCommon as ProtoMemberAccessCommon import org.jetbrains.kotlin.backend.common.serialization.proto.NullableIrExpression as ProtoNullableIrExpression -import org.jetbrains.kotlin.backend.common.serialization.proto.LoweredIdSignature as ProtoLoweredIdSignature -import org.jetbrains.kotlin.backend.common.serialization.proto.CommonIdSignature as ProtoCommonIdSignature +import org.jetbrains.kotlin.backend.common.serialization.proto.ScopeLocalIdSignature as ProtoScopeLocalIdSignature open class IrFileSerializer( val messageLogger: IrMessageLogger, @@ -274,16 +277,6 @@ open class IrFileSerializer( return proto.build() } - private fun serializePrivateSignature(signature: IdSignature.GlobalFileLocalSignature): ProtoFileLocalIdSignature { - val proto = ProtoFileLocalIdSignature.newBuilder() - - proto.container = protoIdSignature(signature.container) - proto.localId = signature.id - proto.file = serializeString(signature.filePath) - - return proto.build() - } - private fun serializeScopeLocalSignature(signature: IdSignature.GlobalScopeLocalDeclaration): ProtoScopeLocalIdSignature { val proto = ProtoScopeLocalIdSignature.newBuilder() @@ -315,7 +308,6 @@ open class IrFileSerializer( is IdSignature.FileSignature -> proto.fileSig = serializeFileSignature(idSignature) // IR IC part is IdSignature.LoweredDeclarationSignature -> proto.icSig = serializeLoweredDeclarationSignature(idSignature) - is IdSignature.GlobalFileLocalSignature -> proto.privateSig = serializePrivateSignature(idSignature) is IdSignature.GlobalScopeLocalDeclaration -> proto.externalScopedLocalSig = serializeScopeLocalSignature(idSignature) is IdSignature.SpecialFakeOverrideSignature -> {} } @@ -558,9 +550,10 @@ open class IrFileSerializer( proto.addStatement(serializeStatement(it)) } - returnableBlock.inlineFunctionSymbol?.let { - proto.inlineFunctionSymbol = serializeIrSymbol(it) - } + // TODO: decided how should file reference be stored in IC cache +// returnableBlock.inlineFunctionSymbol?.let { +// proto.inlineFunctionSymbol = serializeIrSymbol(it) +// } proto.build() } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrSymbolDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrSymbolDeserializer.kt index a6f7d0689da..28ff166e8b1 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrSymbolDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrSymbolDeserializer.kt @@ -160,12 +160,7 @@ class IrSymbolDeserializer( } private fun deserializeFileLocalIdSignature(proto: ProtoFileLocalIdSignature): IdSignature { - if (useGlobalSignatures) { - val fp = if (proto.hasFile()) fileReader.deserializeString(proto.file) else fileSymbol.owner.path - return IdSignature.GlobalFileLocalSignature(deserializeIdSignature(proto.container), proto.localId, fp) - } else { - return IdSignature.FileLocalSignature(deserializeIdSignature(proto.container), proto.localId) - } + return IdSignature.FileLocalSignature(deserializeIdSignature(proto.container), proto.localId) } private fun deserializeScopeLocalIdSignature(proto: Int): IdSignature { diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt index b4585a199b7..b55443d7632 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt @@ -40,7 +40,6 @@ class IcFileDeserializer( val originalEnqueue: IdSignature.(IcFileDeserializer) -> Unit, val icFileData: SerializedIcDataForFile, val mappingState: JsMappingState, - val publicSignatureToIcFileDeserializer: MutableMap, val enqueue: IdSignature.(IcFileDeserializer) -> Unit, ) { @@ -149,7 +148,7 @@ class IcFileDeserializer( icFileReader, file.symbol, emptyList(), - { idSig -> enqueueLocalTopLevelDeclaration(idSig) }, + { idSig -> idSig.enqueue(this) }, { _, s -> s }, enqueueAllDeclarations = true, useGlobalSignatures = true, @@ -194,12 +193,6 @@ class IcFileDeserializer( } } - fun init() { - reversedSignatureIndex.keys.forEach { - publicSignatureToIcFileDeserializer[it] = this - } - } - private val containerSigToOrder by lazy { mutableMapOf().also { map -> val containerIds = IrLongArrayMemoryReader(icFileData.order.containerSignatures).array @@ -236,12 +229,6 @@ class IcFileDeserializer( return actualModuleDeserializer.deserializeIrSymbol(idSig, kind) } - private fun enqueueLocalTopLevelDeclaration(idSig: IdSignature) { - // We only care about declarations from IC cache. They all are in the map. - val deser = publicSignatureToIcFileDeserializer[idSig] ?: return - idSig.enqueue(deser) - } - fun deserializeDeclaration(idSig: IdSignature): IrDeclaration? { cachedDeclaration(idSig)?.let { return it } diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt index 95a348ef073..567b9bb8665 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt @@ -124,8 +124,6 @@ class IcModuleDeserializer( it.file.path } - private val publicSignatureToIcFileDeserializer = mutableMapOf() - private fun deserializeIrFile( fileProto: ProtoFile, fileIndex: Int, @@ -152,7 +150,6 @@ class IcModuleDeserializer( { fileDeserializer -> originalEnqueue(fileDeserializer) }, icFileData, mapping.state, - publicSignatureToIcFileDeserializer, { fileDeserializer -> enqueue(fileDeserializer) }, ) @@ -167,14 +164,15 @@ class IcModuleDeserializer( moduleReversedFileIndex.putIfAbsent(it, icDeserializer) // TODO Why not simple put? } - icDeserializer.init() icDeserializer.reversedSignatureIndex.keys.forEach { - if (it in icModuleReversedFileIndex) { - val existed = icModuleReversedFileIndex[it]!! - error("Duplicate signature $it in both ${existed.originalFileDeserializer.file.path} and in ${file.path}") - } + if (it.isPubliclyVisible) { + if (it in icModuleReversedFileIndex) { + val existed = icModuleReversedFileIndex[it]!! + error("Duplicate signature $it in both ${existed.originalFileDeserializer.file.path} and in ${file.path}") + } - icModuleReversedFileIndex[it] = icDeserializer + icModuleReversedFileIndex[it] = icDeserializer + } } if (strategy.theWholeWorld) { diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcSerializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcSerializer.kt index ce71b35fb8f..a417b783d2e 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcSerializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcSerializer.kt @@ -163,10 +163,6 @@ class IdSignatureSerializerWithForIC( localIndex = localIndexOffset scopeIndex = scopeIndexOffset } - - override fun IrDeclaration.createFileLocalSignature(parentSignature: IdSignature, localIndex: Long, description: String?): IdSignature { - return IdSignature.GlobalFileLocalSignature(parentSignature, localIndex, fileOrNull?.path ?: "") - } } fun storeOrder(file: IrFile, fileDeclarations: Iterable, idSigToLong: (IrSymbol) -> Long): SerializedOrder {