[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,25 +596,21 @@ 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(
transformer,
withExpectedType(
returnExpression.resultType.approximateDeclarationType( returnExpression.resultType.approximateDeclarationType(
session, session,
simpleFunction?.visibilityForApproximation(), simpleFunction?.visibilityForApproximation(),
isLocal = simpleFunction?.isLocal == true, isLocal = simpleFunction?.isLocal == true,
isInlineFunction = simpleFunction?.isInline == true isInlineFunction = simpleFunction?.isInline == true
) ).copyWithNewSource(result.returnTypeRef.source)
)
)
} 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
} }