K2: prefer derived class sources for callable copies (e.g. fake overrides)

This commit is contained in:
Mikhail Glukhikh
2023-10-19 14:28:54 +02:00
committed by Space Team
parent 4b2a122f80
commit 3cb9396b20
27 changed files with 141 additions and 54 deletions
@@ -2,10 +2,10 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun <T> foo(t: T) {}<!>
open fun <T> foo(t: T) {}
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -2,12 +2,12 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open var red1: String = ""<!>
<!INCOMPATIBLE_MATCHING{JVM}!>open lateinit var red2: String<!>
open var red1: String = ""
open lateinit var red2: String
open lateinit var green: String
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
}<!>
// MODULE: m2-jvm()()(m1-common)
@@ -2,10 +2,10 @@
// FILE: common.kt
interface Base {
<!INCOMPATIBLE_MATCHING{JVM}!>fun foo()<!>
fun foo()
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!> : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!> : Base<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -1,9 +1,9 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
<!INCOMPATIBLE_MATCHING{JVM}!>fun foo()<!>
fun foo()
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!>() : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!>() : Base<!>
// MODULE: m2-jvm()()(m1-common)
@@ -1,9 +1,9 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
<!INCOMPATIBLE_MATCHING{JVM}!>fun foo() {}<!>
fun foo() {}
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect abstract class Foo() : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect abstract class Foo() : Base<!>
// MODULE: m2-jvm()()(m1-common)
@@ -2,10 +2,10 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun foo() {}<!>
open fun foo() {}
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -2,10 +2,10 @@
// FILE: common.kt
open class Base<T> {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun foo(t: T) {}<!>
open fun foo(t: T) {}
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<String><!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<String><!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -2,10 +2,10 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun foo(param: Int) {}<!>
open fun foo(param: Int) {}
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo1 : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo1 : Base<!>
expect open class Foo2 : Base
expect open class Foo3 {
open fun foo(param: Int)
@@ -2,11 +2,11 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open var foo: String = ""
protected set<!>
open var foo: String = ""
protected set
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -2,10 +2,10 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun foo(vararg bar: Int) {}<!>
open fun foo(vararg bar: Int) {}
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
}<!>
// MODULE: m2-jvm()()(m1-common)
@@ -2,10 +2,10 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>protected open fun foo() {}<!>
protected open fun foo() {}
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -3,10 +3,10 @@
open class Base {
open val foo: String = ""
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>open fun foo(): Any = ""<!>
open fun foo(): Any = ""
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
}<!>
// MODULE: m2-jvm()()(m1-common)
@@ -4,10 +4,10 @@
interface I
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun foo(): I = null!!<!>
open fun foo(): I = null!!
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo<T : I> : Base {
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo<T : I> : Base {
}<!>
// MODULE: m2-jvm()()(m1-common)
@@ -2,10 +2,10 @@
// FILE: common.kt
open class Base<R> {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun foo(): R = null!!<!>
open fun foo(): R = null!!
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo<R, T : R> : Base<R> {
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo<R, T : R> : Base<R> {
}<!>
// MODULE: m2-jvm()()(m1-common)
@@ -2,11 +2,11 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>open val foo: Any = ""<!>
open val foo: Any = ""
open fun foo(): String = ""
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -2,10 +2,10 @@
// FILE: common.kt
expect open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun foo(): MutableList<String><!>
open fun foo(): MutableList<String>
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
}<!>
@@ -2,10 +2,10 @@
// FILE: common.kt
open class Base {
<!INCOMPATIBLE_MATCHING{JVM}!>open val foo: Int = 1<!>
open val foo: Int = 1
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -2,13 +2,13 @@
// FILE: common.kt
open class Base() {
<!INCOMPATIBLE_MATCHING{JVM}!>open fun overrideReturnType(): Any = ""<!>
<!INCOMPATIBLE_MATCHING{JVM}!>open fun overrideModality1(): Any = ""<!>
<!INCOMPATIBLE_MATCHING{JVM}!>open fun overrideModality2(): Any = ""<!>
<!INCOMPATIBLE_MATCHING{JVM}!>protected open fun overrideVisibility(): Any = ""<!>
open fun overrideReturnType(): Any = ""
open fun overrideModality1(): Any = ""
open fun overrideModality2(): Any = ""
protected open fun overrideVisibility(): Any = ""
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
fun existingMethod()
val existingParam: Int
}<!>