Always null detection
This commit is contained in:
@@ -7,7 +7,7 @@ fun foo() {
|
||||
val x: Int? = null
|
||||
val a = Array<Int>(3, {0})
|
||||
|
||||
if (x != null) bar(a[<!DEBUG_INFO_SMARTCAST!>x<!>]) else bar(a[<!TYPE_MISMATCH!>x<!>])
|
||||
if (x != null) bar(a[<!DEBUG_INFO_SMARTCAST!>x<!>]) else bar(a[<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>])
|
||||
bar(a[if (x == null) 0 else <!DEBUG_INFO_SMARTCAST!>x<!>])
|
||||
bar(a[<!TYPE_MISMATCH!>x<!>])
|
||||
|
||||
|
||||
+1
-1
@@ -5,6 +5,6 @@ fun foo() {
|
||||
val x: Int? = null
|
||||
|
||||
bar(1 + (if (x == null) 0 else x))
|
||||
bar(if (x == null) <!TYPE_MISMATCH!>x<!> else x)
|
||||
bar(if (x == null) <!ALWAYS_NULL, TYPE_MISMATCH!>x<!> else x)
|
||||
if (x != null) bar(x + x/(x-x*x))
|
||||
}
|
||||
|
||||
@@ -16,15 +16,15 @@ fun foo() {
|
||||
}
|
||||
if (<!SENSELESS_COMPARISON!>x == null<!>) bar(x) else bar(x)
|
||||
bar(bar(x))
|
||||
} else if (<!SENSELESS_COMPARISON!>x == null<!>) {
|
||||
bar(<!TYPE_MISMATCH!>x<!>)
|
||||
if (<!SENSELESS_COMPARISON!>x != null<!>) {
|
||||
} else if (<!ALWAYS_NULL!>x<!> == null) {
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
if (<!ALWAYS_NULL!>x<!> != null) {
|
||||
bar(x)
|
||||
if (<!SENSELESS_COMPARISON!>x == null<!>) bar(x)
|
||||
if (<!SENSELESS_COMPARISON!>x == null<!>) bar(x) else bar(x)
|
||||
bar(bar(x) + bar(x))
|
||||
} else if (<!SENSELESS_COMPARISON!>x == null<!>) {
|
||||
bar(<!TYPE_MISMATCH!>x<!>)
|
||||
} else if (<!ALWAYS_NULL!>x<!> == null) {
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,5 +12,5 @@ fun foo() {
|
||||
do {
|
||||
bar(<!TYPE_MISMATCH!>y<!>)
|
||||
} while (y != null)
|
||||
bar(<!TYPE_MISMATCH!>y<!>)
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>y<!>)
|
||||
}
|
||||
|
||||
@@ -3,19 +3,19 @@ fun bar(x: Int) = x + 1
|
||||
fun f1(x: Int?) {
|
||||
bar(<!TYPE_MISMATCH!>x<!>)
|
||||
if (x != null) bar(x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)
|
||||
if (x == null) <!UNREACHABLE_CODE!>bar(<!><!DEBUG_INFO_SMARTCAST!>x<!>!!<!UNREACHABLE_CODE!>)<!>
|
||||
if (x == null) <!UNREACHABLE_CODE!>bar(<!><!ALWAYS_NULL, DEBUG_INFO_SMARTCAST!>x<!>!!<!UNREACHABLE_CODE!>)<!>
|
||||
}
|
||||
|
||||
fun f2(x: Int?) {
|
||||
if (x != null) else <!DEBUG_INFO_SMARTCAST!>x<!>!!
|
||||
if (x != null) else <!ALWAYS_NULL, DEBUG_INFO_SMARTCAST!>x<!>!!
|
||||
}
|
||||
|
||||
fun f3(x: Int?) {
|
||||
if (x != null) bar(x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>) else <!DEBUG_INFO_SMARTCAST!>x<!>!!
|
||||
if (x != null) bar(x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>) else <!ALWAYS_NULL, DEBUG_INFO_SMARTCAST!>x<!>!!
|
||||
}
|
||||
|
||||
fun f4(x: Int?) {
|
||||
if (x == null) <!DEBUG_INFO_SMARTCAST!>x<!>!! else bar(x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)
|
||||
if (x == null) <!ALWAYS_NULL, DEBUG_INFO_SMARTCAST!>x<!>!! else bar(x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)
|
||||
}
|
||||
|
||||
fun f5(x: Int?) {
|
||||
|
||||
@@ -6,7 +6,7 @@ fun foo() {
|
||||
bar(if (x == null) 0 else <!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
|
||||
if (x == null) {
|
||||
bar(<!TYPE_MISMATCH!>x<!>)
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
return
|
||||
} else {
|
||||
bar(<!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
|
||||
+1
-1
@@ -5,6 +5,6 @@ fun foo() {
|
||||
|
||||
val <!UNUSED_VARIABLE!>a<!> = object {
|
||||
fun baz() = bar(if (x == null) 0 else <!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
fun quux(): Int = if (x == null) <!TYPE_MISMATCH!>x<!> else <!DEBUG_INFO_SMARTCAST!>x<!>
|
||||
fun quux(): Int = if (x == null) <!ALWAYS_NULL, TYPE_MISMATCH!>x<!> else <!DEBUG_INFO_SMARTCAST!>x<!>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,10 +8,10 @@ fun foo(): Int {
|
||||
if (x != null) return x
|
||||
|
||||
val y: Int? = null
|
||||
if (y == null) return if (<!SENSELESS_COMPARISON!>y != null<!>) y else <!TYPE_MISMATCH!>y<!>
|
||||
if (y == null) return if (<!ALWAYS_NULL!>y<!> != null) y else <!ALWAYS_NULL, TYPE_MISMATCH!>y<!>
|
||||
|
||||
val z: Int? = null
|
||||
if (z != null) return if (<!SENSELESS_COMPARISON!>z == null<!>) z else z
|
||||
|
||||
return <!TYPE_MISMATCH!>z<!>
|
||||
return <!ALWAYS_NULL, TYPE_MISMATCH!>z<!>
|
||||
}
|
||||
|
||||
@@ -16,6 +16,6 @@ class Derived : Base() {
|
||||
|
||||
val y: Int? = null
|
||||
if (y != null) super.bar(this.baz(<!DEBUG_INFO_SMARTCAST!>y<!>))
|
||||
else this.baz(super.bar(<!TYPE_MISMATCH!>y<!>))
|
||||
else this.baz(super.bar(<!ALWAYS_NULL, TYPE_MISMATCH!>y<!>))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ fun bar(x: Int): RuntimeException = RuntimeException(x.toString())
|
||||
fun foo() {
|
||||
val x: Int? = null
|
||||
|
||||
if (x == null) throw bar(<!TYPE_MISMATCH!>x<!>)
|
||||
if (x == null) throw bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
throw bar(<!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
<!UNREACHABLE_CODE!>throw bar(<!DEBUG_INFO_SMARTCAST!>x<!>)<!>
|
||||
}
|
||||
@@ -3,7 +3,7 @@ fun bar(x: Int): Int = x + 1
|
||||
fun foo() {
|
||||
val x: Int? = null
|
||||
while (x == null) {
|
||||
bar(<!TYPE_MISMATCH!>x<!>)
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
}
|
||||
bar(<!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
|
||||
@@ -11,11 +11,11 @@ fun foo() {
|
||||
while (y != null) {
|
||||
bar(<!DEBUG_INFO_SMARTCAST!>y<!>)
|
||||
}
|
||||
bar(<!TYPE_MISMATCH!>y<!>)
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>y<!>)
|
||||
|
||||
val z: Int? = null
|
||||
while (z == null) {
|
||||
bar(<!TYPE_MISMATCH!>z<!>)
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>z<!>)
|
||||
break
|
||||
}
|
||||
bar(<!TYPE_MISMATCH!>z<!>)
|
||||
|
||||
Reference in New Issue
Block a user