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:
Mikhail Glukhikh
2015-03-24 17:03:01 +03:00
parent e4b1046a54
commit d5aed62410
126 changed files with 1655 additions and 71 deletions
@@ -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()
}
}