[FIR] Don't report UNINITIALIZED_VARIABLE on lateinit local variable
This commit is contained in:
+2
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
|||||||
import org.jetbrains.kotlin.contracts.description.isDefinitelyVisited
|
import org.jetbrains.kotlin.contracts.description.isDefinitelyVisited
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.isLateInit
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
|
||||||
@@ -38,6 +39,7 @@ object FirPropertyInitializationAnalyzer : AbstractFirPropertyInitializationChec
|
|||||||
val reference = node.fir.calleeReference as? FirResolvedNamedReference ?: return
|
val reference = node.fir.calleeReference as? FirResolvedNamedReference ?: return
|
||||||
val symbol = reference.resolvedSymbol as? FirPropertySymbol ?: return
|
val symbol = reference.resolvedSymbol as? FirPropertySymbol ?: return
|
||||||
if (symbol !in localProperties) return
|
if (symbol !in localProperties) return
|
||||||
|
if (symbol.fir.isLateInit) return
|
||||||
val kind = data.getValue(node)[symbol] ?: EventOccurrencesRange.ZERO
|
val kind = data.getValue(node)[symbol] ?: EventOccurrencesRange.ZERO
|
||||||
if (!kind.isDefinitelyVisited()) {
|
if (!kind.isDefinitelyVisited()) {
|
||||||
node.fir.source?.let {
|
node.fir.source?.let {
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
// !LANGUAGE: +LateinitLocalVariables
|
|
||||||
|
|
||||||
fun test1() {
|
|
||||||
lateinit var s: String
|
|
||||||
<!UNINITIALIZED_VARIABLE!>s<!>.length
|
|
||||||
}
|
|
||||||
|
|
||||||
fun test2() {
|
|
||||||
lateinit var s: String
|
|
||||||
run {
|
|
||||||
s = ""
|
|
||||||
}
|
|
||||||
s.length
|
|
||||||
}
|
|
||||||
|
|
||||||
fun almostAlwaysTrue(): Boolean = true
|
|
||||||
|
|
||||||
fun test3() {
|
|
||||||
lateinit var s: String
|
|
||||||
if (almostAlwaysTrue()) {
|
|
||||||
s = ""
|
|
||||||
}
|
|
||||||
<!UNINITIALIZED_VARIABLE!>s<!>.length
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// !LANGUAGE: +LateinitLocalVariables
|
// !LANGUAGE: +LateinitLocalVariables
|
||||||
|
|
||||||
fun test1() {
|
fun test1() {
|
||||||
|
|||||||
Reference in New Issue
Block a user