[FIR] Switch FirExpectActualDeclarationChecker to Platform checker

^KT-66028 Fixed
This commit is contained in:
Nikita Bobko
2024-02-15 18:56:45 +01:00
committed by Space Team
parent 4c602585b0
commit c31a72a4af
18 changed files with 377 additions and 1 deletions
@@ -0,0 +1,21 @@
// MODULE: common
// TARGET_PLATFORM: Common
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class A() : B<!>
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class C() : B<!>
expect open class B()
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
actual class A : B() {
// "Nothing to override" in metadata compilation. Unfortunately we don't check metadata compilation in diagnostic tests
override fun foo() {}
}
actual class C : B() {
// Nothing to override in platform compilation.
fun <!VIRTUAL_MEMBER_HIDDEN!>foo<!>() {}
}
// MODULE: main()()(intermediate)
actual open class B {
open fun foo() {}
}
@@ -0,0 +1,21 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE{COMMON}!>class A<!>() : B
expect <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE{COMMON}!>class C<!>() : B
expect open class B()
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
actual <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE!>class A<!> : B() {
// "Nothing to override" in metadata compilation. Unfortunately we don't check metadata compilation in diagnostic tests
<!NOTHING_TO_OVERRIDE!>override<!> fun foo() {}
}
actual <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE!>class C<!> : B() {
// Nothing to override in platform compilation.
fun <!VIRTUAL_MEMBER_HIDDEN{JVM}!>foo<!>() {}
}
// MODULE: main()()(intermediate)
actual open class B {
open fun foo() {}
}
@@ -0,0 +1,21 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect class A() : B
expect class C() : B
expect open class B()
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
actual class A : B() {
// "Nothing to override" in metadata compilation. Unfortunately we don't check metadata compilation in diagnostic tests
<!NOTHING_TO_OVERRIDE!>override<!> fun foo() {}
}
actual class C : B() {
// Nothing to override in platform compilation.
fun foo() {}
}
// MODULE: main()()(intermediate)
actual open class B {
open fun foo() {}
}
@@ -0,0 +1,17 @@
// MODULE: common
// TARGET_PLATFORM: Common
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class Foo() {
<!NO_ACTUAL_FOR_EXPECT{JVM}!>fun foo()<!>
}<!>
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
expect open class Base() {}
actual class Foo : Base() {
}
// MODULE: main()()(intermediate)
actual open class Base {
fun foo() {}
}
@@ -0,0 +1,17 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE{COMMON}!>class Foo<!>() {
fun foo()
}
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
expect open class Base() {}
actual <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE!>class Foo<!> : Base() {
}
// MODULE: main()()(intermediate)
actual open class Base {
fun foo() {}
}
@@ -0,0 +1,17 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect class Foo() {
fun foo()
}
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
expect open class Base() {}
actual class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>Foo<!> : Base() {
}
// MODULE: main()()(intermediate)
actual open class Base {
fun foo() {}
}
@@ -0,0 +1,30 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect abstract class Foo() {
abstract fun foo()
}
class Impl : Foo() {}
fun common() {
Impl().foo()
}
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
interface I {
fun foo()
}
expect open class Base() {}
actual abstract class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>Foo<!> : Base(), I {
// In non-KMP world, these two f/o would squash into a single f/o final fun foo()
// f/o abstract fun foo(): Unit in intermediate
// f/o final fun foo(): Unit in platform
}
// MODULE: main()()(intermediate)
actual open class Base {
fun foo() {}
}
@@ -0,0 +1,30 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect abstract <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE{COMMON}!>class Foo<!>() {
abstract fun foo()
}
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED, ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED{COMMON}!>class Impl<!> : Foo() {}
fun common() {
Impl().foo()
}
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
interface I {
fun foo()
}
expect open class Base() {}
actual abstract <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE!>class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS{JVM}!>Foo<!><!> : Base(), I {
// In non-KMP world, these two f/o would squash into a single f/o final fun foo()
// f/o abstract fun foo(): Unit in intermediate
// f/o final fun foo(): Unit in platform
}
// MODULE: main()()(intermediate)
actual open class Base {
fun foo() {}
}
@@ -0,0 +1,30 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect abstract class Foo() {
abstract fun foo()
}
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class Impl<!> : Foo() {}
fun common() {
Impl().foo()
}
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
interface I {
fun foo()
}
expect open class Base() {}
actual abstract class Foo : Base(), I {
// In non-KMP world, these two f/o would squash into a single f/o final fun foo()
// f/o abstract fun foo(): Unit in intermediate
// f/o final fun foo(): Unit in platform
}
// MODULE: main()()(intermediate)
actual open class Base {
fun foo() {}
}
@@ -0,0 +1,17 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect class A {
fun foo(x: String): String
}
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
expect class B
// K1 EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE false positive
actual class A {
actual fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(x: B) = "a"
}
// MODULE: main()()(intermediate)
actual typealias B = String
@@ -0,0 +1,17 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE{COMMON}!>class A<!> {
fun foo(x: String): String
}
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
expect class B
// K1 EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE false positive
actual <!EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE!>class A<!> {
actual fun foo(x: B) = "a"
}
// MODULE: main()()(intermediate)
actual typealias B = String
@@ -0,0 +1,17 @@
// MODULE: common
// TARGET_PLATFORM: Common
expect class A {
fun foo(x: String): String
}
// MODULE: intermediate()()(common)
// TARGET_PLATFORM: Common
expect class B
// K1 EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE false positive
actual class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>A<!> {
actual fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(x: B) = "a"
}
// MODULE: main()()(intermediate)
actual typealias B = String