82255d5ee8
Add tests for fake overrides with focus on java interoperability Co-authored-by: Aleksandra Arsenteva <aleksandra.arsenteva@jetbrains.com>
224 lines
5.2 KiB
Kotlin
Vendored
224 lines
5.2 KiB
Kotlin
Vendored
class A : Java1, Java2 {
|
|
constructor() /* primary */ {
|
|
super/*Java1*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
override fun bar(): MutableList<Int> {
|
|
return mutableListOf<Int>(elements = [1])
|
|
}
|
|
|
|
override fun bar2(): MutableList<Number> {
|
|
return mutableListOf<Number>(elements = [1.1])
|
|
}
|
|
|
|
override fun bar3(): MutableList<Int> {
|
|
return mutableListOf<Int>(elements = [1])
|
|
}
|
|
|
|
}
|
|
|
|
class B : Java1, KotlinInterface {
|
|
constructor() /* primary */ {
|
|
super/*Java1*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
class C : Java1, KotlinInterface {
|
|
constructor() /* primary */ {
|
|
super/*Java1*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
override fun bar(): MutableList<out Number> {
|
|
return mutableListOf<Int>(elements = [1])
|
|
}
|
|
|
|
override fun foo(a: MutableList<out Number>) {
|
|
}
|
|
|
|
}
|
|
|
|
class D : Java1, Java2, KotlinInterface {
|
|
constructor() /* primary */ {
|
|
super/*Java1*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
override fun bar(): MutableList<Int> {
|
|
return mutableListOf<Int>(elements = [1])
|
|
}
|
|
|
|
override fun bar2(): MutableList<Number> {
|
|
return mutableListOf<Number>(elements = [1.1])
|
|
}
|
|
|
|
override fun bar3(): MutableList<Int> {
|
|
return mutableListOf<Int>(elements = [1])
|
|
}
|
|
|
|
}
|
|
|
|
class E : Java1, KotlinInterface, KotlinInterface2 {
|
|
constructor() /* primary */ {
|
|
super/*Java1*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
class F : Java1, KotlinInterface, KotlinInterface2 {
|
|
constructor() /* primary */ {
|
|
super/*Java1*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
override fun bar2(): MutableList<in Number> {
|
|
return mutableListOf<Number>(elements = [1])
|
|
}
|
|
|
|
override fun foo2(a: MutableList<in Number>) {
|
|
}
|
|
|
|
}
|
|
|
|
abstract class G : Java1, Java2, Java3 {
|
|
constructor() /* primary */ {
|
|
super/*Java1*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
override fun bar(): MutableList<Int> {
|
|
return mutableListOf<Int>(elements = [1])
|
|
}
|
|
|
|
override fun bar2(): MutableList<Number> {
|
|
return mutableListOf<Number>(elements = [1.1])
|
|
}
|
|
|
|
override fun bar3(): MutableList<Int> {
|
|
return mutableListOf<Int>(elements = [1])
|
|
}
|
|
|
|
}
|
|
|
|
class H : G {
|
|
constructor() /* primary */ {
|
|
super/*G*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
override fun foo(a: MutableList<out Number>) {
|
|
}
|
|
|
|
override fun foo2(a: MutableList<in Number>) {
|
|
}
|
|
|
|
override fun foo3(a: MutableList<*>) {
|
|
}
|
|
|
|
}
|
|
|
|
interface KotlinInterface {
|
|
abstract fun bar(): MutableList<out Number>
|
|
|
|
abstract fun bar2(): MutableList<in Number>
|
|
|
|
abstract fun bar3(): MutableList<*>
|
|
|
|
abstract fun foo(a: MutableList<out Number>)
|
|
|
|
abstract fun foo2(a: MutableList<in Number>)
|
|
|
|
abstract fun foo3(a: MutableList<*>)
|
|
|
|
}
|
|
|
|
interface KotlinInterface2 {
|
|
abstract fun bar(): List<Number>
|
|
|
|
abstract fun foo(a: List<Number>)
|
|
|
|
}
|
|
|
|
fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) {
|
|
a.foo(a = null)
|
|
a.foo(a = mutableListOf<Int>(elements = [1]))
|
|
a.foo(a = listOf<Int>(element = 1))
|
|
a.bar() /*~> Unit */
|
|
a.foo2(a = null)
|
|
a.foo2(a = mutableListOf<Number?>(elements = [null]))
|
|
a.foo2(a = mutableListOf<@FlexibleNullability Number?>(elements = [1.1]))
|
|
a.bar2() /*~> Unit */
|
|
a.foo3(a = null)
|
|
a.foo3(a = mutableListOf<Nothing?>(elements = [null]))
|
|
a.foo3(a = listOf<Nothing?>(element = null))
|
|
a.foo3(a = listOf<String>(element = ""))
|
|
a.bar3() /*~> Unit */
|
|
b.foo(a = null)
|
|
b.foo(a = mutableListOf<Int>(elements = [1]))
|
|
b.bar() /*~> Unit */
|
|
b.foo2(a = null)
|
|
b.foo2(a = mutableListOf<Number?>(elements = [null]))
|
|
b.foo2(a = mutableListOf<@FlexibleNullability Number?>(elements = [1.1]))
|
|
b.bar2() /*~> Unit */
|
|
b.foo3(a = null)
|
|
b.foo3(a = mutableListOf<Nothing?>(elements = [null]))
|
|
b.foo3(a = mutableListOf<String>(elements = [""]))
|
|
b.bar3() /*~> Unit */
|
|
c.foo(a = mutableListOf<Int>(elements = [1]))
|
|
c.bar() /*~> Unit */
|
|
d.foo(a = null)
|
|
d.foo(a = mutableListOf<Int>(elements = [1]))
|
|
d.bar() /*~> Unit */
|
|
d.foo2(a = null)
|
|
d.foo2(a = mutableListOf<Number?>(elements = [null]))
|
|
d.foo2(a = mutableListOf<@FlexibleNullability Number?>(elements = [1.1]))
|
|
d.bar2() /*~> Unit */
|
|
d.foo3(a = null)
|
|
d.foo3(a = mutableListOf<Nothing?>(elements = [null]))
|
|
d.foo3(a = mutableListOf<String>(elements = [""]))
|
|
d.bar3() /*~> Unit */
|
|
e.foo(a = null)
|
|
e.foo(a = mutableListOf<Int>(elements = [1]))
|
|
e.foo(a = listOf<Int>(element = 1))
|
|
e.bar() /*~> Unit */
|
|
e.foo2(a = null)
|
|
e.foo2(a = mutableListOf<Number?>(elements = [null]))
|
|
e.foo2(a = mutableListOf<@FlexibleNullability Number?>(elements = [1.1]))
|
|
e.bar2() /*~> Unit */
|
|
e.foo3(a = null)
|
|
e.foo3(a = mutableListOf<Nothing?>(elements = [null]))
|
|
e.foo3(a = listOf<Nothing?>(element = null))
|
|
e.foo3(a = listOf<String>(element = ""))
|
|
e.bar3() /*~> Unit */
|
|
f.foo2(a = mutableListOf<Number?>(elements = [null]))
|
|
f.bar2() /*~> Unit */
|
|
g.foo(a = null)
|
|
g.foo(a = mutableListOf<Int>(elements = [1]))
|
|
g.foo(a = listOf<Int>(element = 1))
|
|
g.bar() /*~> Unit */
|
|
g.foo2(a = null)
|
|
g.foo2(a = mutableListOf<Number?>(elements = [null]))
|
|
g.foo2(a = mutableListOf<@FlexibleNullability Number?>(elements = [1.1]))
|
|
g.bar2() /*~> Unit */
|
|
g.foo3(a = null)
|
|
g.foo3(a = mutableListOf<Nothing?>(elements = [null]))
|
|
g.foo3(a = listOf<Nothing?>(element = null))
|
|
g.foo3(a = listOf<String>(element = ""))
|
|
g.bar3() /*~> Unit */
|
|
h.foo(a = mutableListOf<Int>(elements = [1]))
|
|
h.foo2(a = mutableListOf<Number>(elements = [1]))
|
|
h.foo3(a = mutableListOf<String>(elements = [""]))
|
|
}
|