Generate bridges for fake overrides when needed
#KT-3985 Fixed #KT-4145 Fixed
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
// KT-4145
|
||||
|
||||
trait A {
|
||||
fun foo(): Any
|
||||
}
|
||||
|
||||
open class B {
|
||||
fun foo(): String = "A"
|
||||
}
|
||||
|
||||
open class C: B(), A
|
||||
|
||||
fun box(): String {
|
||||
val a: A = C()
|
||||
if (a.foo() != "A") return "Fail 1"
|
||||
if ((a as B).foo() != "A") return "Fail 2"
|
||||
if ((a as C).foo() != "A") return "Fail 3"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
// KT-3985
|
||||
|
||||
trait Trait<T> {
|
||||
fun f(): T
|
||||
}
|
||||
|
||||
open class Class {
|
||||
fun f(): String = throw UnsupportedOperationException()
|
||||
}
|
||||
|
||||
class Foo: Class(), Trait<String> {
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
try {
|
||||
(Foo() : Trait<String>).f()
|
||||
} catch (e: UnsupportedOperationException) {
|
||||
return "OK"
|
||||
}
|
||||
return "Fail"
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
var result = ""
|
||||
|
||||
trait D1 {
|
||||
fun foo(): D1 {
|
||||
result += "D1"
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
trait F2 : D1
|
||||
|
||||
trait D3 : F2 {
|
||||
override fun foo(): D3 {
|
||||
result += "D3"
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
class D4 : D3
|
||||
|
||||
fun box(): String {
|
||||
val x = D4()
|
||||
x.foo()
|
||||
(x : D3).foo()
|
||||
(x : F2).foo()
|
||||
(x : D1).foo()
|
||||
return if (result == "D3D3D3D3") "OK" else "Fail: $result"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
trait D1 {
|
||||
fun foo(): Any
|
||||
}
|
||||
|
||||
trait D2 {
|
||||
fun foo(): Number
|
||||
}
|
||||
|
||||
trait F3 : D1, D2
|
||||
|
||||
open class D4 {
|
||||
fun foo(): Int = 42
|
||||
}
|
||||
|
||||
class F5 : F3, D4()
|
||||
|
||||
fun box(): String {
|
||||
val z = F5()
|
||||
var result = z.foo()
|
||||
result += (z : D4).foo()
|
||||
result += (z : F3).foo() as Int
|
||||
result += (z : D2).foo() as Int
|
||||
result += (z : D1).foo() as Int
|
||||
return if (result == 5 * 42) "OK" else "Fail: $result"
|
||||
}
|
||||
Reference in New Issue
Block a user