From 161fe1d2ca9fad5f2222963e5615c9848c90db3a Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Thu, 25 May 2023 11:19:43 +0200 Subject: [PATCH] [IR] Don't produce gaps for skipped IR declarations during serialization --- .../common/serialization/IrFileSerializer.kt | 7 +++---- .../kotlin/library/KotlinLibraryWriter.kt | 20 ++----------------- 2 files changed, 5 insertions(+), 22 deletions(-) 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 e15833fa52d..0f58e4d983c 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 @@ -21,8 +21,6 @@ import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.library.SerializedDeclaration import org.jetbrains.kotlin.library.SerializedIrFile -import org.jetbrains.kotlin.library.SkippedDeclaration -import org.jetbrains.kotlin.library.TopLevelDeclaration import org.jetbrains.kotlin.library.impl.IrMemoryArrayWriter import org.jetbrains.kotlin.library.impl.IrMemoryDeclarationWriter import org.jetbrains.kotlin.library.impl.IrMemoryStringWriter @@ -1425,7 +1423,8 @@ open class IrFileSerializer( file.declarations.forEach { if (skipExpects && it.descriptor.isExpectMember && !it.descriptor.isSerializableExpectClass) { - topLevelDeclarations.add(SkippedDeclaration) + // Skip the declaration unless it is `expect annotation class` marked with `OptionalExpectation` + // without the corresponding `actual` counterpart for the current leaf target. return@forEach } @@ -1437,7 +1436,7 @@ open class IrFileSerializer( // TODO: keep order similar val sigIndex = protoIdSignatureMap[idSig] ?: if (it is IrErrorDeclaration) protoIdSignature(idSig) else error("Not found ID for $idSig (${it.render()})") - topLevelDeclarations.add(TopLevelDeclaration(sigIndex, idSig.toString(), byteArray)) + topLevelDeclarations.add(SerializedDeclaration(sigIndex, idSig.toString(), byteArray)) proto.addDeclarationId(sigIndex) } diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt index 94daf7195d1..69be5f488ea 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt @@ -32,24 +32,8 @@ class SerializedMetadata( val fragmentNames: List ) -sealed class SerializedDeclaration { - abstract val id: Int - abstract val size: Int - abstract val bytes: ByteArray - - abstract val declarationName: String -} - -class TopLevelDeclaration(override val id: Int, override val declarationName: String, override val bytes: ByteArray) : - SerializedDeclaration() { - override val size = bytes.size -} - -object SkippedDeclaration : SerializedDeclaration() { - override val id = -1 - override val size = 0 - override val bytes = ByteArray(0) - override val declarationName: String = "" +class SerializedDeclaration(val id: Int, val declarationName: String, val bytes: ByteArray) { + val size = bytes.size } class SerializedIrFile(