82255d5ee8
Add tests for fake overrides with focus on java interoperability Co-authored-by: Aleksandra Arsenteva <aleksandra.arsenteva@jetbrains.com>
132 lines
2.5 KiB
Kotlin
Vendored
132 lines
2.5 KiB
Kotlin
Vendored
// TARGET_BACKEND: JVM
|
|
// FULL_JDK
|
|
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
|
|
|
|
// FILE: Java1.java
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
public abstract class Java1 extends A {
|
|
@NotNull
|
|
@Override
|
|
public CharSequence subSequence(int start, int end) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// FILE: Java2.java
|
|
public interface Java2 extends CharSequence { }
|
|
|
|
// FILE: 1.kt
|
|
import java.util.stream.IntStream
|
|
|
|
abstract class A : CharSequence
|
|
|
|
abstract class B : Java1() //Kotlin ← Java ← Kotlin ← Kotlin
|
|
|
|
class C(override val length: Int) : B() {
|
|
override fun get(index: Int): Char {
|
|
return '1'
|
|
}
|
|
}
|
|
|
|
abstract class D : Java1(), Java2 //Kotlin ← Java1, Java2 ← Kotlin2
|
|
|
|
class E : Java1(), Java2 {
|
|
override val length: Int
|
|
get() = 10
|
|
|
|
override fun get(index: Int): Char {
|
|
return '1'
|
|
}
|
|
}
|
|
|
|
abstract class F(override val length: Int) : java.lang.CharSequence, CharSequence, KotlinInterface { //Kotlin ← Java, Kotlin1, Kotlin2
|
|
override fun subSequence(startIndex: Int, endIndex: Int): CharSequence {
|
|
return null!!
|
|
}
|
|
|
|
override fun chars(): IntStream {
|
|
return null!!
|
|
}
|
|
|
|
override fun codePoints(): IntStream {
|
|
return null!!
|
|
}
|
|
|
|
override fun get(index: Int): Char {
|
|
return '1'
|
|
}
|
|
}
|
|
|
|
abstract class G : Java1(), KotlinInterface // Kotlin ← Java, Kotlin2 ← Kotlin3
|
|
|
|
class H : Java1(), KotlinInterface {
|
|
override val length: Int
|
|
get() = 10
|
|
override fun get(index: Int): Char {
|
|
return '1'
|
|
}
|
|
override operator fun get(index: Any): Char {
|
|
return '2'
|
|
}
|
|
}
|
|
|
|
abstract class I(override val length: Int) : java.lang.CharSequence, CharSequence {
|
|
override fun subSequence(startIndex: Int, endIndex: Int): CharSequence {
|
|
return null!!
|
|
}
|
|
|
|
override fun chars(): IntStream {
|
|
return null!!
|
|
}
|
|
|
|
override fun codePoints(): IntStream {
|
|
return null!!
|
|
}
|
|
|
|
override fun get(index: Int): Char {
|
|
return 'a'
|
|
}
|
|
}
|
|
|
|
interface KotlinInterface {
|
|
fun get(index: Any): Char
|
|
}
|
|
|
|
fun test(b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I){
|
|
b.length
|
|
b[1]
|
|
b.get(1)
|
|
b.subSequence(1,2)
|
|
|
|
c.length
|
|
c[1]
|
|
c.subSequence(1,2)
|
|
|
|
d.length
|
|
d[1]
|
|
d.chars()
|
|
|
|
e.length
|
|
e[1]
|
|
e.subSequence(1,2)
|
|
|
|
f.length
|
|
f.length()
|
|
f[1]
|
|
f.get(1.2)
|
|
|
|
g.length
|
|
g[1]
|
|
g.subSequence(1,2)
|
|
|
|
h.length
|
|
h[1]
|
|
h[1.2]
|
|
h.subSequence(1,2)
|
|
|
|
i.length
|
|
i.length()
|
|
i.subSequence(1,2)
|
|
i[1]
|
|
} |