[FIR, IR] Run DefaultArgumentsInExpectActualizedByFakeOverride not only in FIR but in IR as well

Review: https://jetbrains.team/p/kt/reviews/13334/timeline

Thanks to the previous commit, it's now possible to run
DefaultArgumentsInExpectActualizedByFakeOverride on both: frontend (FIR)
and backend (IR).

We aim to perform a thorough examination of checks involving
fake-overrides on both FIR and IR, given their distinct implementations
for handling fake-overrides.

The commit decreases scope of influence of hacky
`shouldCheckDefaultParams` flag.
This commit is contained in:
Nikita Bobko
2023-12-01 17:13:37 +01:00
committed by Space Team
parent 1aeefe6c33
commit 2a7403a979
12 changed files with 113 additions and 36 deletions
@@ -1,8 +1,8 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
fun foo(p: Int = 1)
}
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class Foo {
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>fun foo(p: Int = 1)<!>
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -0,0 +1,17 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
fun foo(p: Int = 1)
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
interface Base {
fun foo(p: Int)
}
object BaseImpl : Base {
override fun foo(p: Int) {}
}
actual class Foo : <!DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE!>Base by BaseImpl<!>
@@ -1,8 +1,8 @@
// MODULE: m1-common
// FILE: common.kt
expect interface Foo {
fun foo(p: Int = 1)
}
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect interface Foo {
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>fun foo(p: Int = 1)<!>
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -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_WARNING")
actual interface Foo : <!DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE!>Base1, Base2<!>
@@ -1,10 +1,10 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
class Bar() {
fun foo(p: Int = 1)
}
}
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class Foo {
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>class Bar() {
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>fun foo(p: Int = 1)<!>
}<!>
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -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,8 +1,8 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
fun foo(param: Int = 1)
}
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class Foo {
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>fun foo(param: Int = 1)<!>
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -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,7 +1,7 @@
// MODULE: m1-common
// FILE: common.kt
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class Foo {
fun foo(param: Int = 1)
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>fun foo(param: Int = 1)<!>
<!NO_ACTUAL_FOR_EXPECT{JVM}!>fun missingOnActual()<!>
}<!>
@@ -1,8 +1,8 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo() {
fun foo(p: Int = 1)
}
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class Foo() {
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>fun foo(p: Int = 1)<!>
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -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>()<!>