Fix cycle avoidance in FIR implicit type resolve

This commit fixes the following case:
transformer visiting it twice before reporting cycle
fun foo() = foo()
This commit is contained in:
Simon Ogorodnik
2019-05-15 15:42:21 +03:00
committed by Mikhail Glukhikh
parent 26974788e9
commit 9398addb9d
@@ -643,6 +643,9 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Any?): CompositeTransformResult<FirDeclaration> {
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<FirDeclaration> {
@@ -887,12 +890,12 @@ private object StoreNameReference : FirTransformer<FirNamedReference>() {
}
}
internal object StoreType : FirTransformer<FirResolvedTypeRef>() {
override fun <E : FirElement> transformElement(element: E, data: FirResolvedTypeRef): CompositeTransformResult<E> {
internal object StoreType : FirTransformer<FirTypeRef>() {
override fun <E : FirElement> transformElement(element: E, data: FirTypeRef): CompositeTransformResult<E> {
return element.compose()
}
override fun transformTypeRef(typeRef: FirTypeRef, data: FirResolvedTypeRef): CompositeTransformResult<FirTypeRef> {
override fun transformTypeRef(typeRef: FirTypeRef, data: FirTypeRef): CompositeTransformResult<FirTypeRef> {
return data.compose()
}
}