Files
kotlin-fork/compiler/testData/ir/irText/fakeOverrides/annotations/nullabilityAnnotationOverrideOnComplexHierarchy.kt
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

111 lines
2.1 KiB
Kotlin
Vendored

// TARGET_BACKEND: JVM
// FILE: Java1.java
import org.jetbrains.annotations.Nullable;
public class Java1 {
@Nullable
public String nullableString = "3";
@Nullable
public String bar() {
return nullableString;
}
public void foo(@Nullable String s) {}
}
// FILE: Java2.java
public class Java2 extends Java1 { }
// FILE: Java3.java
public class Java3 extends Java1 {
@Override
public String bar() {
return "2";
}
@Override
public void foo(String s){}
public String nullableString = "5";
}
// FILE: Java4.java
public interface Java4 {
public Object bar();
public void foo(Object s);
public Object nullableString = "6";
}
// FILE: Java5.java
public class Java5 extends A { }
// FILE: 1.kt
open class A : Java2() // Kotlin ← Java1 ← Java2
class B : Java2() {
override fun bar(): String {
return "2"
}
override fun foo(s: String?) { }
}
class C : Java3() // Kotlin ← Java1(override) ← Java2
class D : Java3() {
override fun foo(s: String?) { }
override fun bar(): String {
return "3"
}
}
abstract class E : Java2(), Java4 // Kotlin ← Java1, Java2 ← Java3
class F : Java2(), Java4 {
override fun foo(s: Any?) { }
}
abstract class G : Java2() , KotlinInterface //Kotlin ← Java, Kotlin2 ← Java2
class H(override val nullableString: Any) : Java2() , KotlinInterface {
override fun foo(s: Any) { }
}
class I : Java5() //Kotlin ← Java ← Kotlin ← Java
interface KotlinInterface {
fun bar(): Any?
fun foo(s: Any)
val nullableString: Any
}
fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I) {
a.nullableString
a.foo("")
a.bar()
b.nullableString
b.foo("")
b.bar()
c.nullableString
c.foo("")
c.bar()
d.nullableString
d.foo("")
d.bar()
e.nullableString
e.foo("")
e.foo(1)
e.bar()
f.nullableString
f.foo("")
f.foo(1)
f.bar()
g.nullableString
g.foo(1)
g.bar()
h.nullableString
h.foo(1)
h.bar()
i.nullableString
i.foo("")
i.bar()
}