[FIR] Prohibit expect class members with default values actualized

...by fake-override.
It is error without deprecation cycle because `expect` and `actual`
classes are still in Beta and expected impact of change is negligible.

^KT-62036 Fixed
This commit is contained in:
Roman Efremov
2023-09-22 16:33:13 +02:00
committed by Space Team
parent 02680442a0
commit 81fd9a679d
24 changed files with 227 additions and 6 deletions
@@ -14,4 +14,4 @@ object BaseImpl : Base {
override fun foo(p: Int) {}
}
actual class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>Foo<!> : Base by BaseImpl
actual class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>Foo<!> : <!DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE!>Base by BaseImpl<!>
@@ -0,0 +1,15 @@
// FIR_IDENTICAL
// LANGUAGE: -ProhibitDefaultDefaultArgumentsInExpectActualizedByFakeOverride
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
fun foo(param: Int = 1)
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
open class Base {
fun foo(param: Int) {}
}
actual class Foo : Base()
@@ -0,0 +1,18 @@
// MODULE: m1-common
// FILE: common.kt
expect interface Foo {
fun foo(p: Int = 1)
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
interface Base1 {
fun foo(p: Int)
}
interface Base2 {
fun foo(p: Int)
}
@Suppress("ACTUAL_CLASSIFIER_MUST_HAVE_THE_SAME_SUPERTYPES_AS_NON_FINAL_EXPECT_CLASSIFIER")
actual interface Foo : <!DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE!>Base1, Base2<!>
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// MODULE: m1-common
// FILE: common.kt
expect interface Foo {
@@ -0,0 +1,17 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
class Bar() {
fun foo(p: Int = 1)
}
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
open class Base {
fun foo(p: Int) {}
}
actual class Foo {
actual class Bar : <!DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE!>Base()<!>
}
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
@@ -0,0 +1,13 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
fun foo(param: Int = 1)
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
open class Base {
fun foo(param: Int) {}
}
actual class Foo : <!DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE!>Base()<!>
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
@@ -11,4 +11,4 @@ open class Base {
fun foo(param: Int) {}
}
actual class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>Foo<!> : Base()
actual class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>Foo<!> : <!DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE!>Base()<!>
@@ -0,0 +1,13 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo() {
fun foo(p: Int = 1)
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
open class Base<T> {
fun foo(p: T) {}
}
actual class Foo : <!DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE!>Base<Int>()<!>
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// MODULE: m1-common
// FILE: common.kt
expect class Foo() {