Smart casts for local variables not captured in a closure and not changed in a loop, see #KT-3175.
isLocalVariable added. Assignment / initialization analysis. Control whether a variable is changed in a loop at the beginning and at the end of the loop. Control whether a variable is captured in a closure. #KT-3175 Fixed. #KT-2266 Fixed. Tests for variable null safety and for variables is/as operations. Loop / closure / variable property tests are included. Old tests changed in accordance with KT-3175. In particular, all three of testSmartcastImpossible were fixed.
This commit is contained in:
@@ -10,10 +10,11 @@ fun foo1(e: PsiElement) {
|
||||
var first = true
|
||||
while (current != null) {
|
||||
if (current is JetExpression && first) {
|
||||
println(current!!.getText()) // error: smart cast not possible. But it's not needed in fact!
|
||||
// Smartcast is possible here
|
||||
println(<!DEBUG_INFO_SMARTCAST!>current<!>.getText())
|
||||
}
|
||||
|
||||
current = current?.getParent()
|
||||
current = <!DEBUG_INFO_SMARTCAST!>current<!>.getParent()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user