diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 214f6ce4393..d3b9d48fe3b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -1122,42 +1122,36 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT } dataFlowAnalyzer.enterDelegatedConstructorCall() - var callCompleted = true - var result = delegatedConstructorCall - try { - val lastDispatchReceiver = implicitReceiverStack.lastDispatchReceiver() - context.forDelegatedConstructorCall(containingConstructor, containingClass as? FirRegularClass, components) { - delegatedConstructorCall.transformChildren(transformer, ResolutionMode.ContextDependent) - } - val reference = delegatedConstructorCall.calleeReference - val constructorType: ConeClassLikeType? = when (reference) { - is FirThisReference -> lastDispatchReceiver?.type as? ConeClassLikeType - is FirSuperReference -> reference.superTypeRef - .coneTypeSafe() - ?.takeIf { it !is ConeErrorType } - ?.fullyExpandedType(session) - else -> null - } - - val resolvedCall = callResolver - .resolveDelegatingConstructorCall(delegatedConstructorCall, constructorType, containingClass.symbol.toLookupTag()) - - if (reference is FirThisReference && reference.boundSymbol == null) { - resolvedCall.dispatchReceiver.typeRef.coneTypeSafe()?.lookupTag?.toSymbol(session)?.let { - reference.replaceBoundSymbol(it) - } - } - - // it seems that we may leave this code as is - // without adding `context.withTowerDataContext(context.getTowerDataContextForConstructorResolution())` - val completionResult = callCompleter.completeCall(resolvedCall, noExpectedType) - result = completionResult.result - callCompleted = completionResult.callCompleted - return result - } finally { - dataFlowAnalyzer.exitDelegatedConstructorCall(result, callCompleted) + val lastDispatchReceiver = implicitReceiverStack.lastDispatchReceiver() + context.forDelegatedConstructorCall(containingConstructor, containingClass as? FirRegularClass, components) { + delegatedConstructorCall.transformChildren(transformer, ResolutionMode.ContextDependent) } + + val reference = delegatedConstructorCall.calleeReference + val constructorType: ConeClassLikeType? = when (reference) { + is FirThisReference -> lastDispatchReceiver?.type as? ConeClassLikeType + is FirSuperReference -> reference.superTypeRef + .coneTypeSafe() + ?.takeIf { it !is ConeErrorType } + ?.fullyExpandedType(session) + else -> null + } + + val resolvedCall = callResolver + .resolveDelegatingConstructorCall(delegatedConstructorCall, constructorType, containingClass.symbol.toLookupTag()) + + if (reference is FirThisReference && reference.boundSymbol == null) { + resolvedCall.dispatchReceiver.typeRef.coneTypeSafe()?.lookupTag?.toSymbol(session)?.let { + reference.replaceBoundSymbol(it) + } + } + + // it seems that we may leave this code as is + // without adding `context.withTowerDataContext(context.getTowerDataContextForConstructorResolution())` + val (result, callCompleted) = callCompleter.completeCall(resolvedCall, noExpectedType) + dataFlowAnalyzer.exitDelegatedConstructorCall(result, callCompleted) + return result } private fun extractSuperTypeDeclaration(typeRef: FirTypeRef): FirRegularClass? {