[JS IR] Do not copy interface method if base class inherits it
^KT-58599 Fixed
This commit is contained in:
committed by
Space Team
parent
9ca9fc9c68
commit
8066f1b7d2
@@ -0,0 +1,74 @@
|
||||
// MODULE: InterfaceModule
|
||||
// FILE: MyInterface.kt
|
||||
interface MyInterface {
|
||||
val test: Int get() = 1
|
||||
}
|
||||
|
||||
interface MyInterface2 : MyInterface
|
||||
|
||||
// MODULE: OpenClassModule(InterfaceModule)
|
||||
// FILE: MyOpenClass.kt
|
||||
open class MyOpenClass : MyInterface
|
||||
|
||||
open class MyOpenClass2 : MyInterface2
|
||||
|
||||
open class MyOpenClass3 : MyOpenClass()
|
||||
|
||||
// MODULE: OpenClassWithOverrideModule(InterfaceModule)
|
||||
// FILE: MyOpenClassWithOverrideModule.kt
|
||||
open class MyOpenClassWithOverride : MyInterface {
|
||||
override val test = super.test + 1
|
||||
}
|
||||
|
||||
open class MyOpenClassWithOverride2 : MyInterface2, MyOpenClassWithOverride()
|
||||
|
||||
open class MyOpenClassWithOverride3 : MyOpenClassWithOverride2() {
|
||||
override val test = super.test + 1
|
||||
}
|
||||
|
||||
// MODULE: main(InterfaceModule, OpenClassModule, OpenClassWithOverrideModule)
|
||||
// FILE: classes.kt
|
||||
class MyFinalClass : MyOpenClass()
|
||||
class MyFinalClass2 : MyOpenClass2()
|
||||
class MyFinalClass3 : MyOpenClass3()
|
||||
class MyFinalClassI : MyInterface, MyOpenClass()
|
||||
|
||||
class MyFinalClassWithOverride : MyOpenClassWithOverride()
|
||||
class MyFinalClassWithOverride2 : MyOpenClassWithOverride2()
|
||||
class MyFinalClassWithOverride3 : MyOpenClassWithOverride3()
|
||||
class MyFinalClassWithOverrideI : MyInterface, MyOpenClassWithOverride()
|
||||
|
||||
// FILE: main.kt
|
||||
fun asInterface(i: MyInterface): MyInterface = i
|
||||
fun asInterface2(i: MyInterface2): MyInterface2 = i
|
||||
|
||||
fun box(): String {
|
||||
if (asInterface(MyFinalClass()).test != 1) return "Fail MyOpenClass as Interface property"
|
||||
if (MyFinalClass().test != 1) return "Fail MyOpenClass property"
|
||||
|
||||
if (asInterface(MyFinalClass2()).test != 1) return "Fail MyFinalClass2 as Interface property"
|
||||
if (asInterface2(MyFinalClass2()).test != 1) return "Fail MyFinalClass2 as Interface2 property"
|
||||
if (MyFinalClass2().test != 1) return "Fail MyFinalClass2 property"
|
||||
|
||||
if (asInterface(MyFinalClass3()).test != 1) return "Fail MyFinalClass3 as Interface property"
|
||||
if (MyFinalClass3().test != 1) return "Fail MyFinalClass3 property"
|
||||
|
||||
if (asInterface(MyFinalClassI()).test != 1) return "Fail MyFinalClassI as Interface property"
|
||||
if (MyFinalClassI().test != 1) return "Fail MyFinalClassI property"
|
||||
|
||||
if (asInterface(MyFinalClassWithOverride()).test != 2) return "Fail MyFinalClassWithOverride as Interface property"
|
||||
if (MyFinalClassWithOverride().test != 2) return "Fail MyFinalClassWithOverride property"
|
||||
|
||||
if (asInterface(MyFinalClassWithOverride2()).test != 2) return "Fail MyFinalClassWithOverride2 as Interface property"
|
||||
if (asInterface2(MyFinalClassWithOverride2()).test != 2) return "Fail MyFinalClassWithOverride2 as Interface2 property"
|
||||
if (MyFinalClassWithOverride2().test != 2) return "Fail MyFinalClassWithOverride2 property"
|
||||
|
||||
if (asInterface(MyFinalClassWithOverride3()).test != 3) return "Fail MyFinalClassWithOverride3 as Interface property"
|
||||
if (asInterface2(MyFinalClassWithOverride3()).test != 3) return "Fail MyFinalClassWithOverride3 as Interface2 property"
|
||||
if (MyFinalClassWithOverride3().test != 3) return "Fail MyFinalClassWithOverride3 property"
|
||||
|
||||
if (asInterface(MyFinalClassWithOverrideI()).test != 2) return "Fail MyFinalClassWithOverrideI as Interface property"
|
||||
if (MyFinalClassWithOverrideI().test != 2) return "Fail MyFinalClassWithOverrideI property"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user