Files
anzhela.sukhanova 82255d5ee8 [Test] KT-61360: add tests for the IrFakeOverrideBuilder
Add tests for fake overrides with focus on java interoperability

Co-authored-by: Aleksandra Arsenteva <aleksandra.arsenteva@jetbrains.com>
2024-03-04 16:21:02 +00:00

137 lines
2.7 KiB
Kotlin
Vendored

// TARGET_BACKEND: JVM
// WITH_STDLIB
// SEPARATE_SIGNATURE_DUMP_FOR_K2
// ^ ISSUE: KT-66048
// FILE: Java1.java
public class Java1 extends KotlinClass { }
// FILE: Java2.java
public class Java2 extends KotlinClass {
public String getA() {
return "2";
}
public String getB() {
return "2";
}
public void setC(String text) { }
public String getC() {
return "2";
}
public void overloadMethod(String first, String second, int third) { }
}
// FILE: Java3.java
interface Java3 {
String a = "2";
void foo();
String getB();
void setB(String text);
void setC(String text);
String getC();
void overloadMethod(String first, String second, int third);
}
// FILE: 1.kt
open class KotlinClass {
@JvmField
val a = "1"
companion object {
@JvmStatic
fun foo() {}
}
@JvmName("getBJava")
fun getB() : String = "b"
@get:JvmName("getText")
@set:JvmName("setText")
var c = "1"
@JvmOverloads
open fun overloadMethod(first : String, second : String = "text", third : Int = 10) { }
}
class A : Java1() //Kotlin ← Java ← Kotlin
class B : Java1() {
override fun overloadMethod(first: String, second: String, third: Int) { }
}
class C : Java2() // Kotlin ← Java (override) ← Kotlin
class D : Java2() {
override val a: String
get() = "3"
override fun overloadMethod(first: String, second: String, third: Int) { }
}
abstract class E : Java1() , Java3 // Kotlin ← Java1, Java2 ← Kotlin2
class F : Java1() , Java3 {
override fun foo() { }
override fun setB(text: String) { }
override fun setC(text: String) { }
override fun getC(): String {
return "5"
}
}
abstract class G : Java1() , KotlinInterface // Kotlin ← Java, Kotlin2 ← Kotlin3
class H(override val b: String) : Java1() , KotlinInterface {
override fun foo() { }
override fun overloadMethod(first: String) { }
}
interface KotlinInterface{
val a: String
fun foo()
val b : String
var c : String
fun overloadMethod(first : String)
}
fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) {
a.a
a.c
a.c = "2"
a.overloadMethod("")
b.a
b.c
b.c = "2"
b.overloadMethod("", "2", 3)
c.a
c.c
c.c = "2"
c.overloadMethod("")
c.overloadMethod("","",1)
d.a
d.c
d.c = "2"
d.overloadMethod("")
d.overloadMethod("","",1)
e.a
e.b
e.c
e.c = "2"
e.b = "2"
e.overloadMethod("")
f.a
f.b
f.c
f.c = "2"
f.b = "2"
f.overloadMethod("")
g.a
g.b
g.c
g.c = "2"
g.overloadMethod("")
h.a
h.b
h.c
h.overloadMethod("")
h.overloadMethod("", "", 1)
}