From 8e672222bb15a4cefced77ffa506d194f0c551ae Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 23 Jan 2020 12:50:07 +0300 Subject: [PATCH] FIR: Do not resolve implicitly typed function twice --- .../resolve/FirDeclarationsResolveTransformer.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 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 edd51c2d23c..f41d9225393 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 @@ -298,6 +298,16 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) } override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: ResolutionMode): CompositeTransformResult { + if (simpleFunction.resolvePhase == transformerPhase) return simpleFunction.compose() + if (simpleFunction.resolvePhase == FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE && transformerPhase == FirResolvePhase.BODY_RESOLVE) { + simpleFunction.replaceResolvePhase(transformerPhase) + return simpleFunction.compose() + } + val returnTypeRef = simpleFunction.returnTypeRef + if ((returnTypeRef !is FirImplicitTypeRef) && implicitTypeOnly) { + return simpleFunction.compose() + } + return withScopeCleanup(topLevelScopes) { prepareTypeParameterOwnerForBodyResolve(simpleFunction) val containingDeclaration = components.containerIfAny @@ -306,10 +316,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) prepareSignatureForBodyResolve(simpleFunction) simpleFunction.transformStatus(this, simpleFunction.resolveStatus(simpleFunction.status).mode()) } - val returnTypeRef = simpleFunction.returnTypeRef - if ((returnTypeRef !is FirImplicitTypeRef) && implicitTypeOnly) { - return@withScopeCleanup simpleFunction.compose() - } + withFullBodyResolve { if (returnTypeRef is FirImplicitTypeRef) { simpleFunction.transformReturnTypeRef(StoreType, FirComputingImplicitTypeRef)