From 2f46a45bfd8e04d21a71ed2f296fd4600e6b402c Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 14 Feb 2022 16:00:30 +0300 Subject: [PATCH] [IR] Deserialize annotation classes as open Compiler backend relies on the fact that all annotation classes have OPEN modality. This is not the case for libraries that were compiled before 1.6.20. 948dc4f3 fixes compatibility for Lazy IR, here we do the same for IR deserializer. ^KT-51302 fixed --- .../common/serialization/IrDeclarationDeserializer.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt index 7af94c3065a..45cae8fdc82 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt @@ -12,7 +12,9 @@ import org.jetbrains.kotlin.backend.common.serialization.linkerissues.checkError import org.jetbrains.kotlin.backend.common.serialization.linkerissues.checkSymbolType import org.jetbrains.kotlin.backend.common.serialization.proto.IrDeclaration.DeclaratorCase.* import org.jetbrains.kotlin.backend.common.serialization.proto.IrType.KindCase.* +import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.InlineClassRepresentation +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* @@ -308,6 +310,12 @@ class IrDeclarationDeserializer( checkSymbolType(symbol) val flags = ClassFlags.decode(fcode) + // Similar to 948dc4f3, compatibility hack for libs that were generated before 1.6.20. + val effectiveModality = if (flags.kind == ClassKind.ANNOTATION_CLASS) { + Modality.OPEN + } else { + flags.modality + } symbolTable.declareClass(signature, { symbol }) { irFactory.createClass( startOffset, endOffset, origin, @@ -315,7 +323,7 @@ class IrDeclarationDeserializer( deserializeName(proto.name), flags.kind, flags.visibility, - flags.modality, + effectiveModality, flags.isCompanion, flags.isInner, flags.isData,