From de3df799bc9e0cebec1436b8b91f54ee2cce9ee7 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 29 Sep 2020 20:06:06 +0300 Subject: [PATCH] FIR: Fix implicit return type computation for synthetic property+intersection --- .../resolve/FirDeclarationsResolveTransformer.kt | 12 +----------- .../body/resolve/FirImplicitBodyResolve.kt | 10 ++++++++++ 2 files changed, 11 insertions(+), 11 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 135d0eb633b..87192756d6b 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 @@ -99,17 +99,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } override fun transformProperty(property: FirProperty, data: ResolutionMode): CompositeTransformResult { - if (property is FirSyntheticProperty) { - val delegate = property.getter.delegate - if (delegate.origin == FirDeclarationOrigin.IntersectionOverride) { - val unwrapped = delegate.symbol.overriddenSymbol!!.fir - transformSimpleFunction(unwrapped, data) - delegate.replaceReturnTypeRef(unwrapped.returnTypeRef) - } else { - transformSimpleFunction(delegate, data) - } - return property.compose() - } + require(property !is FirSyntheticProperty) { "Synthetic properties should not be processed by body transfromers" } if (property.isLocal) { prepareSignatureForBodyResolve(property) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt index 9a81ce1169c..8c0978b25b6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt @@ -188,6 +188,16 @@ private class ReturnTypeCalculatorWithJump( require(declaration is FirCallableMemberDeclaration<*>) { "${declaration::class}: ${declaration.render()}" } + if (declaration is FirSyntheticProperty) { + return tryCalculateReturnType(declaration.getter.delegate) + } + + if (declaration.origin == FirDeclarationOrigin.IntersectionOverride) { + val result = tryCalculateReturnType(declaration.symbol.overriddenSymbol!!.fir) + declaration.replaceReturnTypeRef(result) + return result + } + return when (val status = implicitBodyResolveComputationSession.getStatus(declaration.symbol)) { is ImplicitBodyResolveComputationStatus.Computed -> status.resolvedTypeRef is ImplicitBodyResolveComputationStatus.Computing ->