[FIR] Properly set source for inferred return type of function

This commit is contained in:
Dmitriy Novozhilov
2023-02-03 10:05:19 +02:00
committed by Space Team
parent e9204521a9
commit 76d360d793
@@ -596,24 +596,20 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve
if (result.returnTypeRef is FirImplicitTypeRef) { if (result.returnTypeRef is FirImplicitTypeRef) {
val simpleFunction = function as? FirSimpleFunction val simpleFunction = function as? FirSimpleFunction
val returnExpression = (body?.statements?.single() as? FirReturnExpression)?.result val returnExpression = (body?.statements?.single() as? FirReturnExpression)?.result
if (returnExpression?.typeRef is FirResolvedTypeRef) { val returnTypeRef = if (returnExpression?.typeRef is FirResolvedTypeRef) {
result.transformReturnTypeRef( returnExpression.resultType.approximateDeclarationType(
transformer, session,
withExpectedType( simpleFunction?.visibilityForApproximation(),
returnExpression.resultType.approximateDeclarationType( isLocal = simpleFunction?.isLocal == true,
session, isInlineFunction = simpleFunction?.isInline == true
simpleFunction?.visibilityForApproximation(), ).copyWithNewSource(result.returnTypeRef.source)
isLocal = simpleFunction?.isLocal == true,
isInlineFunction = simpleFunction?.isInline == true
)
)
)
} else { } else {
result.transformReturnTypeRef( buildErrorTypeRef {
transformer, source = result.returnTypeRef.source
withExpectedType(buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("empty body", DiagnosticKind.Other) }) diagnostic = ConeSimpleDiagnostic("empty body", DiagnosticKind.Other)
) }
} }
result.transformReturnTypeRef(transformer, withExpectedType(returnTypeRef))
} }
return result return result