From 9398addb9d8de454a95629683e803766ab4aac81 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Wed, 15 May 2019 15:42:21 +0300 Subject: [PATCH] Fix cycle avoidance in FIR implicit type resolve This commit fixes the following case: transformer visiting it twice before reporting cycle fun foo() = foo() --- .../resolve/transformers/FirBodyResolveTransformer.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index 22507ae8c18..063555e61c0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -643,6 +643,9 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Any?): CompositeTransformResult { if (namedFunction.returnTypeRef !is FirImplicitTypeRef && implicitTypeOnly) return namedFunction.compose() + if (namedFunction.returnTypeRef is FirImplicitTypeRef) { + namedFunction.transformReturnTypeRef(StoreType, FirComputingImplicitTypeRef) + } val receiverTypeRef = namedFunction.receiverTypeRef fun transform(): CompositeTransformResult { @@ -887,12 +890,12 @@ private object StoreNameReference : FirTransformer() { } } -internal object StoreType : FirTransformer() { - override fun transformElement(element: E, data: FirResolvedTypeRef): CompositeTransformResult { +internal object StoreType : FirTransformer() { + override fun transformElement(element: E, data: FirTypeRef): CompositeTransformResult { return element.compose() } - override fun transformTypeRef(typeRef: FirTypeRef, data: FirResolvedTypeRef): CompositeTransformResult { + override fun transformTypeRef(typeRef: FirTypeRef, data: FirTypeRef): CompositeTransformResult { return data.compose() } }