KT-2752: remove diagnostic that reports about overridden method having several names from different sources. Generate proxies instead. Fix reporting name clash when two distinct fake overrides require same name.

This commit is contained in:
Alexey Andreev
2016-06-15 18:07:28 +03:00
parent c5087779e4
commit 1dcb037aee
12 changed files with 120 additions and 80 deletions
+59
View File
@@ -0,0 +1,59 @@
// TARGET_BACKEND: JS
package foo
interface A {
@JsName("foo") fun foo(value: Int): String
}
interface B {
@JsName("bar") fun foo(value: Int): String
}
open class C : A, B {
override fun foo(value: Int) = "C.foo($value)"
}
class CDerived : C() {
override fun foo(value: Int) = "CDerived.foo($value)"
}
open class D {
open fun foo(value: Int) = "D.foo($value)"
}
class E : D(), A, B
fun box(): String {
val a: A = C()
assertEquals("C.foo(55)", a.foo(55))
val b: B = C()
assertEquals("C.foo(23)", b.foo(23))
val a2: A = CDerived()
assertEquals("CDerived.foo(55)", a2.foo(55))
val b2: B = CDerived()
assertEquals("CDerived.foo(23)", b2.foo(23))
val d: dynamic = C()
assertEquals("C.foo(42)", d.foo(42))
assertEquals("C.foo(99)", d.bar(99))
val d2: dynamic = CDerived()
assertEquals("CDerived.foo(42)", d2.foo(42))
assertEquals("CDerived.foo(99)", d2.bar(99))
val da: A = E()
assertEquals("D.foo(55)", da.foo(55))
val db: B = E()
assertEquals("D.foo(23)", db.foo(23))
val dd: dynamic = E()
assertEquals("D.foo(42)", dd.foo(42))
assertEquals("D.foo(99)", dd.bar(99))
assertEquals("D.foo(88)", dd.`foo_za3lpa$`(88))
return "OK"
}
+16
View File
@@ -13,6 +13,12 @@ class C : A, B {
override fun foo(value: Int) = "C.foo($value)"
}
open class D {
open fun foo(value: Int) = "D.foo($value)"
}
class E : D(), A, B
fun box(): String {
val a: A = C()
assertEquals("C.foo(55)", a.foo(55))
@@ -24,5 +30,15 @@ fun box(): String {
assertEquals("C.foo(42)", d.foo(42))
assertEquals("C.foo(99)", d.`foo_za3lpa$`(99))
val da: A = E()
assertEquals("D.foo(55)", da.foo(55))
val db: B = E()
assertEquals("D.foo(23)", db.foo(23))
val dd: dynamic = E()
assertEquals("D.foo(42)", dd.foo(42))
assertEquals("D.foo(99)", dd.`foo_za3lpa$`(99))
return "OK"
}