From 43775a5912c98b2064d117e9143d5de69336b663 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 9 Dec 2022 13:49:04 +0100 Subject: [PATCH] [FIR] disable lazy resolve checks on building deserialized annotation arguments During converting library annotations to FIR nodes and building required scopes inside, lazyResolveToPhase may be called. For such cases it's okay to skip the lazy resolve contract checks as those declarations are always fully resolved and lazy resolve will do nothing. --- .../fir/deserialization/AbstractAnnotationDeserializer.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt index 54da3269ee1..c1894340ecf 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator import org.jetbrains.kotlin.fir.scopes.getDeclaredConstructors import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol +import org.jetbrains.kotlin.fir.symbols.lazyDeclarationResolver import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.metadata.ProtoBuf @@ -182,7 +183,9 @@ abstract class AbstractAnnotationDeserializer( annotationTypeRef = buildResolvedTypeRef { type = ConeClassLikeLookupTagImpl(classId).constructClassType(emptyArray(), isNullable = false) } - this.argumentMapping = createArgumentMapping(proto, classId, nameResolver) + session.lazyDeclarationResolver.disableLazyResolveContractChecksInside { + this.argumentMapping = createArgumentMapping(proto, classId, nameResolver) + } useSiteTarget?.let { this.useSiteTarget = it }