From bd2cdf2ec9891847a3614921dadaf9f9aa555a09 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 5 Mar 2021 12:40:28 +0300 Subject: [PATCH] FIR: extract BodyResolveContext.withField --- .../body/resolve/BodyResolveContext.kt | 14 ++++++++++++++ .../resolve/FirDeclarationsResolveTransformer.kt | 14 +++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt index 88829ec3862..007a905216b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt @@ -388,6 +388,20 @@ class BodyResolveContext( } } + inline fun withField( + field: FirField, + crossinline f: () -> T + ): T { + return withTowerDataMode(FirTowerDataMode.CONSTRUCTOR_HEADER) { + withContainer(field) { + withTowerDataCleanup { + getPrimaryConstructorAllParametersScope()?.let { addLocalScope(it) } + f() + } + } + } + } + inline fun withProperty( property: FirProperty, crossinline f: () -> T diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 09aa51e656d..9b363b351fb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -179,15 +179,11 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } dataFlowAnalyzer.enterField(field) return withFullBodyResolve { - context.withTowerDataMode(FirTowerDataMode.CONSTRUCTOR_HEADER) { - context.withContainer(field) { - withPrimaryConstructorParameters(includeProperties = true) { - field.transformChildren(transformer, withExpectedType(returnTypeRef)) - } - if (field.initializer != null) { - storeVariableReturnType(field) - } - } + context.withField(field) { + field.transformChildren(transformer, withExpectedType(returnTypeRef)) + } + if (field.initializer != null) { + storeVariableReturnType(field) } transformer.replaceDeclarationResolvePhaseIfNeeded(field, transformerPhase) dataFlowAnalyzer.exitField(field)