From 56c793ffc6c150fb57c8e08df48972470fbd675c Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 29 Apr 2020 11:25:08 +0300 Subject: [PATCH] FIR: Minor. Extract FirDeclarationsResolveTransformer::doTransformRegularClass It's will be useful in the following commits --- .../FirDeclarationsResolveTransformer.kt | 75 +++++++++++-------- 1 file changed, 43 insertions(+), 32 deletions(-) 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 ee96ed07f6b..5a50161ff61 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 @@ -323,43 +323,54 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor return regularClass.runAllPhasesForLocalClass(transformer, components, data).compose() } - val notAnalyzed = regularClass.resolvePhase < transformerPhase return withTypeParametersOf(regularClass) { - if (notAnalyzed) { - dataFlowAnalyzer.enterClass() - } - val oldConstructorScope = primaryConstructorParametersScope - val oldContainingClass = containingClass - primaryConstructorParametersScope = null - containingClass = regularClass - val type = regularClass.defaultType() - val result = withLabelAndReceiverType(regularClass.name, regularClass, type) { - val constructor = regularClass.declarations.firstOrNull() as? FirConstructor - if (constructor?.isPrimary == true) { - primaryConstructorParametersScope = FirLocalScope().let { - var scope = it - constructor.valueParameters.forEach { scope = scope.storeVariable(it) } - scope - } - } - transformDeclarationContent(regularClass, data).single as FirRegularClass - } - if (notAnalyzed) { - if (!implicitTypeOnly) { - val controlFlowGraph = dataFlowAnalyzer.exitRegularClass(result) - result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph) - } else { - dataFlowAnalyzer.exitClass() - } - } - containingClass = oldContainingClass - primaryConstructorParametersScope = oldConstructorScope - @Suppress("UNCHECKED_CAST") - result.compose() + doTransformRegularClass(regularClass, data) } } + private fun doTransformRegularClass( + regularClass: FirRegularClass, + data: ResolutionMode + ): CompositeTransformResult.Single { + val notAnalyzed = regularClass.resolvePhase < transformerPhase + + if (notAnalyzed) { + dataFlowAnalyzer.enterClass() + } + + val oldConstructorScope = primaryConstructorParametersScope + val oldContainingClass = containingClass + primaryConstructorParametersScope = null + containingClass = regularClass + val type = regularClass.defaultType() + val result = withLabelAndReceiverType(regularClass.name, regularClass, type) { + val constructor = regularClass.declarations.firstOrNull() as? FirConstructor + if (constructor?.isPrimary == true) { + primaryConstructorParametersScope = FirLocalScope().let { + var scope = it + constructor.valueParameters.forEach { scope = scope.storeVariable(it) } + scope + } + } + transformDeclarationContent(regularClass, data).single as FirRegularClass + } + + if (notAnalyzed) { + if (!implicitTypeOnly) { + val controlFlowGraph = dataFlowAnalyzer.exitRegularClass(result) + result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph) + } else { + dataFlowAnalyzer.exitClass() + } + } + + containingClass = oldContainingClass + primaryConstructorParametersScope = oldConstructorScope + return (@Suppress("UNCHECKED_CAST") + result.compose()) + } + override fun transformAnonymousObject( anonymousObject: FirAnonymousObject, data: ResolutionMode