[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) {
val simpleFunction = function as? FirSimpleFunction
val returnExpression = (body?.statements?.single() as? FirReturnExpression)?.result
if (returnExpression?.typeRef is FirResolvedTypeRef) {
result.transformReturnTypeRef(
transformer,
withExpectedType(
returnExpression.resultType.approximateDeclarationType(
session,
simpleFunction?.visibilityForApproximation(),
isLocal = simpleFunction?.isLocal == true,
isInlineFunction = simpleFunction?.isInline == true
)
)
)
val returnTypeRef = if (returnExpression?.typeRef is FirResolvedTypeRef) {
returnExpression.resultType.approximateDeclarationType(
session,
simpleFunction?.visibilityForApproximation(),
isLocal = simpleFunction?.isLocal == true,
isInlineFunction = simpleFunction?.isInline == true
).copyWithNewSource(result.returnTypeRef.source)
} else {
result.transformReturnTypeRef(
transformer,
withExpectedType(buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("empty body", DiagnosticKind.Other) })
)
buildErrorTypeRef {
source = result.returnTypeRef.source
diagnostic = ConeSimpleDiagnostic("empty body", DiagnosticKind.Other)
}
}
result.transformReturnTypeRef(transformer, withExpectedType(returnTypeRef))
}
return result