[IR] Don't produce gaps for skipped IR declarations during serialization

This commit is contained in:
Dmitriy Dolovov
2023-05-25 11:19:43 +02:00
committed by Space Team
parent a4c9a4f150
commit 161fe1d2ca
2 changed files with 5 additions and 22 deletions
@@ -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)
}
@@ -32,24 +32,8 @@ class SerializedMetadata(
val fragmentNames: List<String>
)
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 = "<SKIPPED>"
class SerializedDeclaration(val id: Int, val declarationName: String, val bytes: ByteArray) {
val size = bytes.size
}
class SerializedIrFile(