K2: don't report RETURN_TYPE_MISMATCH on last statement returns
#KT-53198 Fixed
This commit is contained in:
+8
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
@@ -36,6 +37,13 @@ object FirFunctionReturnTypeMismatchChecker : FirReturnExpressionChecker() {
|
||||
context.session.builtinTypes.unitType.coneType
|
||||
else
|
||||
targetElement.returnTypeRef.coneType
|
||||
if (targetElement is FirAnonymousFunction &&
|
||||
expression.source?.kind is KtFakeSourceElementKind.ImplicitReturn.FromLastStatement &&
|
||||
functionReturnType.isUnit
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
val typeContext = context.session.typeContext
|
||||
val returnExpressionType = resultExpression.typeRef.coneType
|
||||
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
object FirReturnSyntaxAndLabelChecker : FirReturnExpressionChecker() {
|
||||
override fun check(expression: FirReturnExpression, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
val source = expression.source
|
||||
if (source?.kind == KtFakeSourceElementKind.ImplicitReturn) return
|
||||
if (source?.kind is KtFakeSourceElementKind.ImplicitReturn) return
|
||||
|
||||
val labeledElement = expression.target.labeledElement
|
||||
val targetSymbol = labeledElement.symbol
|
||||
|
||||
+2
-1
@@ -40,7 +40,8 @@ object UnreachableCodeChecker : FirControlFlowChecker() {
|
||||
}
|
||||
|
||||
private val sourceKindsToSkip = setOf(
|
||||
KtFakeSourceElementKind.ImplicitReturn,
|
||||
KtFakeSourceElementKind.ImplicitReturn.FromExpressionBody,
|
||||
KtFakeSourceElementKind.ImplicitReturn.FromLastStatement,
|
||||
KtFakeSourceElementKind.DesugaredForLoop
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user