KT-2422 Invalid warning "Condition is always true"

#KT-2422 fixed
This commit is contained in:
Svetlana Isakova
2013-05-22 16:40:29 +04:00
parent 213e8c11c9
commit f05f616230
6 changed files with 280 additions and 33 deletions
@@ -0,0 +1,23 @@
package bar
class Test {
val foo: Int? = null
fun foo(o: Test) = foo == null && o.foo == null // ERROR warning: o.test == null is always true
fun bar(a: Test, b: Test) {
if (a.foo != null) {
useInt(<!TYPE_MISMATCH!>b.foo<!>)
}
if (a.foo != null) {
useInt(<!TYPE_MISMATCH!>foo<!>)
}
if (this.foo != null) {
useInt(foo)
}
if (foo != null) {
useInt(this.foo)
}
}
fun useInt(i: Int) = i
}
@@ -0,0 +1,25 @@
//FILE: bar.kt
package bar
val i: Int? = 2
//FILE: foo.kt
package foo
val i: Int? = 1
class A(val i: Int?) {
fun testUseFromClass() {
if (foo.i != null) {
useInt(<!TYPE_MISMATCH!>i<!>)
}
}
}
fun testUseFromOtherPackage() {
if (bar.i != null) {
useInt(<!TYPE_MISMATCH!>i<!>)
}
}
fun useInt(i: Int) = i
@@ -0,0 +1,36 @@
package foo
class A(val i: Int?) {
fun test1() {
if (this@A.i != null) {
useInt(this.i)
useInt(i)
}
}
inner class B {
fun test2() {
if (i != null) {
useInt(this@A.i)
}
}
}
}
fun A.foo() {
if (this@foo.i != null) {
useInt(this.i)
useInt(i)
}
}
fun test3() {
useFunction {
if(i != null) {
useInt(this.i)
}
}
}
fun useInt(i: Int) = i
fun useFunction(f: A.() -> Unit) = f
@@ -0,0 +1,39 @@
package foo
class C(val i: Int?) {}
class A(val c: C) {
fun test1() {
if (this@A.c.i != null) {
useInt(this.c.i)
useInt(c.i)
}
}
inner class B {
fun test2() {
if (c.i != null) {
useInt(this@A.c.i)
}
}
}
}
fun A.foo() {
if (this@foo.c.i != null) {
useInt(this.c.i)
useInt(c.i)
}
}
fun test3() {
useFunction {
if(c.i != null) {
useInt(this.c.i)
}
}
}
fun useInt(i: Int) = i
fun useFunction(f: A.() -> Unit) = f