[FIR] Fix false positive NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY
This commit is contained in:
+12
-3
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.resolve.dfa.*
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.types.isNothing
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.util.ListMultimap
|
||||
import org.jetbrains.kotlin.fir.util.listMultimapOf
|
||||
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
|
||||
@@ -1317,13 +1317,22 @@ class ControlFlowGraphBuilder {
|
||||
exitElvisExpressionNodes.push(it)
|
||||
}
|
||||
|
||||
val typedFir = lastNodes.topOrNull()?.fir as? FirExpression
|
||||
val type = typedFir?.typeRef?.coneTypeSafe<ConeKotlinType>()
|
||||
|
||||
val lhsExitNode = createElvisLhsExitNode(elvisExpression).also {
|
||||
popAndAddEdge(it)
|
||||
}
|
||||
|
||||
val lhsIsNotNullNode = createElvisLhsIsNotNullNode(elvisExpression).also {
|
||||
addEdge(lhsExitNode, it)
|
||||
addEdge(it, exitNode)
|
||||
val preferredKind = if (type?.isNullableNothing == true) {
|
||||
EdgeKind.DeadForward
|
||||
} else {
|
||||
EdgeKind.Forward
|
||||
}
|
||||
|
||||
addEdge(lhsExitNode, it, preferredKind = preferredKind)
|
||||
addEdge(it, exitNode, propagateDeadness = false)
|
||||
}
|
||||
|
||||
val rhsEnterNode = elvisRhsEnterNodes.pop().also {
|
||||
|
||||
Reference in New Issue
Block a user