When checking overrides, compare methods structurally

Because they may come from different copies of the same class from different modules
This commit is contained in:
Andrey Breslav
2014-05-29 17:41:46 +04:00
parent 5a864dbc62
commit 204fa76691
27 changed files with 1158 additions and 5 deletions
@@ -0,0 +1,43 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m0
// FILE: a.kt
package p
public trait G1<T>
public trait G2<A, B>
// MODULE: m1(m0)
// FILE: a.kt
package p
public trait B {
public fun foo(a: G1<Int>, b: G2<B, String>): B?
}
// MODULE: m2(m1, m0)
// FILE: b.kt
package p
public trait C : B {
override fun foo(a: G1<Int>, b: G2<B, String>): B?
}
// MODULE: m3(m0)
// FILE: b.kt
package p
public trait B {
public fun foo(a: G1<Int>, b: G2<B, String>): B?
}
// MODULE: m4(m3, m2, m0)
// FILE: c.kt
import p.*
fun test(b: B?, a: G1<Int>, b1: G2<B, String>) {
if (b is C) {
<!DEBUG_INFO_AUTOCAST!>b<!>?.foo(a, b1)
}
}