From 3e7e9269abbb2c41b544289f327b9b7da4478060 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Wed, 20 Mar 2019 19:16:54 +0300 Subject: [PATCH] FIR: Fix 2^n transform complexity in blocks/whens --- .../resolve/transformers/FirBodyResolveTransformer.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 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 19d8a66d949..1d1c3e77bbe 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 @@ -257,8 +257,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn override fun transformBlock(block: FirBlock, data: Any?): CompositeTransformResult { - - block.transformChildren(this, data) + val block = super.transformBlock(block, data).single as FirBlock val statement = block.statements.lastOrNull() val resultExpression = when (statement) { @@ -267,7 +266,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn else -> null } resultExpression?.resultType?.let { bindingContext[block] = it } - return super.transformBlock(block, data) + return block.compose() } private fun commonSuperType(types: List): FirTypeRef? { @@ -275,12 +274,12 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn } override fun transformWhenExpression(whenExpression: FirWhenExpression, data: Any?): CompositeTransformResult { + val whenExpression = super.transformWhenExpression(whenExpression, data).single as FirWhenExpression val type = commonSuperType(whenExpression.branches.mapNotNull { - it.result.visitNoTransform(this, data) it.result.resultType }) if (type != null) bindingContext[whenExpression] = type - return super.transformWhenExpression(whenExpression, data) + return whenExpression.compose() } override fun transformConstExpression(constExpression: FirConstExpression, data: Any?): CompositeTransformResult {