From f8828abeba663e1838b3e34974b40181af3d0468 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 3 Mar 2021 20:45:31 +0100 Subject: [PATCH] FIR: fix declaration phase updating in FirContractResolveTransformer --- .../body/resolve/FirAbstractBodyResolveTransformer.kt | 2 +- .../contracts/FirContractResolveTransformer.kt | 2 +- .../testdata/lazyResolve/classMembers.txt | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt index b68a8a70e65..0fdb0648fac 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt @@ -84,7 +84,7 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb protected open fun needReplacePhase(firDeclaration: FirDeclaration) = true fun replaceDeclarationResolvePhaseIfNeeded(firDeclaration: FirDeclaration, newResolvePhase: FirResolvePhase) { - if (needReplacePhase(firDeclaration)) { + if (needReplacePhase(firDeclaration) && newResolvePhase > firDeclaration.resolvePhase) { firDeclaration.replaceResolvePhase(newResolvePhase) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt index 695041b861d..5e3b2c2debb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt @@ -280,7 +280,7 @@ open class FirContractResolveTransformer( get() = contractDescription is FirLegacyRawContractDescription || contractDescription is FirRawContractDescription private fun FirDeclaration.updatePhase() { - replaceDeclarationResolvePhaseIfNeeded(this, FirResolvePhase.CONTRACTS) + transformer.replaceDeclarationResolvePhaseIfNeeded(this, FirResolvePhase.CONTRACTS) } } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/classMembers.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/classMembers.txt index ba17a81cc45..069164f73fa 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/classMembers.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/classMembers.txt @@ -1,6 +1,6 @@ FILE: classMembers.kt - public final [CONTRACTS] class A : R|kotlin/Any| { - public [CONTRACTS] constructor(): R|A| { + public final [STATUS] class A : R|kotlin/Any| { + public [STATUS] constructor(): R|A| { super() } @@ -8,11 +8,11 @@ FILE: classMembers.kt this@R|/A|.R|/A.receive|(this@R|/A|.R|/A.functionWithLazyBody|()) } - public final [CONTRACTS] val x: R|kotlin/Int| = LAZY_EXPRESSION + public final [STATUS] val x: R|kotlin/Int| = LAZY_EXPRESSION [STATUS] public get(): R|kotlin/Int| { LAZY_BLOCK } - public final [CONTRACTS] fun receive([STATUS] value: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK } + public final [STATUS] fun receive([STATUS] value: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK } - public final [CONTRACTS] fun functionWithLazyBody(): R|kotlin/String| { LAZY_BLOCK } + public final [STATUS] fun functionWithLazyBody(): R|kotlin/String| { LAZY_BLOCK } }