[FIR] Add expect actual checker

This commit is contained in:
Dmitriy Novozhilov
2021-05-24 16:44:23 +03:00
committed by teamcityserver
parent faadb08174
commit c3060e861f
45 changed files with 1687 additions and 80 deletions
@@ -5,7 +5,7 @@
expect enum class En {
E1,
E2 {
fun foo() = ""
<!EXPECTED_DECLARATION_WITH_BODY!>fun foo()<!> = ""
},
E3 { };
}
@@ -16,10 +16,10 @@ expect interface My {
// FILE: jvm.kt
actual interface My {
actual fun openFunPositive() = Unit
actual fun openFunNegative()
<!ACTUAL_WITHOUT_EXPECT!>actual fun openFunNegative()<!>
actual fun abstractFun()
actual val openValPositive: Int get() = 0
actual val openValNegative: Int
<!ACTUAL_WITHOUT_EXPECT!>actual val openValNegative: Int<!>
actual val abstractVal: Int
}
@@ -10,7 +10,7 @@ expect annotation class Foo5()
expect annotation class Foo6()
expect annotation class Foo7()
@Foo1
@<!UNRESOLVED_REFERENCE!>Foo1<!>
fun foo() {}
@Foo5
@@ -45,4 +45,4 @@ actual annotation class Foo5
actual annotation class Foo6(val s: String = "value")
actual typealias Foo7 = Bar2
<!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>actual typealias Foo7 = Bar2<!>
@@ -34,9 +34,9 @@ actual class Foo1(val s: String)
actual class Foo2(val p: String = "value", i: Int)
actual typealias Foo3 = JavaFoo
actual class Bar1(val s: String)
actual class Bar2(val p: String = "value", i: Int)
actual typealias Bar3 = JavaBar
<!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>actual class Bar1(val s: String)<!>
<!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>actual class Bar2(val p: String = "value", i: Int)<!>
<!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>actual typealias Bar3 = JavaBar<!>
actual class Bar4(val s: String) {
constructor() : this("")
}
@@ -4,7 +4,7 @@
expect open class A
expect class B : A
open class C : <!SUPERTYPE_NOT_INITIALIZED!>A<!>
<!UNRESOLVED_REFERENCE!>open class C : <!SUPERTYPE_NOT_INITIALIZED!>A<!><!>
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
@@ -10,7 +10,7 @@ expect class FooBar {
}
fun test() {
Foo()
<!UNRESOLVED_REFERENCE!>Foo<!>()
Bar()
Baz()
FooBar()
@@ -23,11 +23,11 @@ fun foo1(x: String) {}
fun foo2(x: Int, y: Int) {}
fun foo2(x: String) {}
actual fun foo3(): String = ""
<!ACTUAL_WITHOUT_EXPECT!>actual fun foo3(): String = ""<!>
fun foo4(x: Int): String = ""
actual class NoArgConstructor {
actual constructor()
actual constructor(x: Int)
<!ACTUAL_WITHOUT_EXPECT!>actual constructor(x: Int)<!>
constructor(x: String)
}
@@ -17,12 +17,12 @@ expect open class Foo3
// FILE: jvm.kt
interface Foo1
actual interface Foo2
<!ACTUAL_WITHOUT_EXPECT!>actual interface Foo2<!>
actual var s: String = "value"
<!ACTUAL_WITHOUT_EXPECT!>actual var s: String = "value"<!>
fun foo2(): Int = 0
<!REDECLARATION!>actual class Foo3<!>
<!ACTUAL_WITHOUT_EXPECT, REDECLARATION!>actual class Foo3<!>
<!REDECLARATION!>class Foo3<!>
@@ -31,9 +31,9 @@ actual open class Container {
actual fun protectedFun1() {} // OK: protected -> public
actual protected fun protectedFun2() {} // OK: protected -> protected
actual internal fun protectedFun3() {} // BAD: protected -> internal
actual protected fun internalFun3() {} // BAD: internal -> protected
<!ACTUAL_WITHOUT_EXPECT!>actual internal fun protectedFun3() {}<!> // BAD: protected -> internal
<!ACTUAL_WITHOUT_EXPECT!>actual protected fun internalFun3() {}<!> // BAD: internal -> protected
actual open fun openInternalFun() {} // BAD: internal+open -> public
actual internal fun openPublicFun() {} // BAD: open+public -> internal
<!ACTUAL_WITHOUT_EXPECT!>actual open fun openInternalFun() {}<!> // BAD: internal+open -> public
<!ACTUAL_WITHOUT_EXPECT!>actual internal fun openPublicFun() {}<!> // BAD: open+public -> internal
}
@@ -4,7 +4,7 @@
expect class B {
class N {
fun body() {}
<!EXPECTED_DECLARATION_WITH_BODY!>fun body()<!> {}
expect fun extraHeader()
}
}
@@ -39,7 +39,7 @@ actual class C {
actual inner class I
}
actual class D
<!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>actual class D<!>
actual class E {
class N
@@ -8,13 +8,13 @@ interface J
expect class Foo : I, C, J
expect class Bar : C()
<!SUPERTYPE_INITIALIZED_WITHOUT_PRIMARY_CONSTRUCTOR!>expect class Bar : C()<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : I, C(), J
actual class Bar
<!ACTUAL_WITHOUT_EXPECT!>actual class Bar<!>
// MODULE: m3-js()()(m1-common)
// FILE: js.kt
@@ -13,10 +13,10 @@ expect sealed class SealedWithPlatformActuals : SealedWithSharedActual
package foo
actual sealed class SealedWithSharedActual
class SimpleShared : SealedWithPlatformActuals()
class SimpleShared : <!UNRESOLVED_REFERENCE!>SealedWithPlatformActuals<!>()
// MODULE: main()()(intermediate)
// TARGET_PLATFORM: JVM
package foo
actual sealed class SealedWithPlatformActuals <!NON_PRIVATE_OR_PROTECTED_CONSTRUCTOR_IN_SEALED!>actual constructor()<!>: SealedWithSharedActual()
actual sealed class SealedWithPlatformActuals <!ACTUAL_WITHOUT_EXPECT, NON_PRIVATE_OR_PROTECTED_CONSTRUCTOR_IN_SEALED!>actual constructor()<!>: SealedWithSharedActual()
@@ -0,0 +1,29 @@
// !LANGUAGE: +MultiPlatformProjects
// !DIAGNOSTICS: -UNSUPPORTED
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
constructor(p: Any)
fun f1(s: String): Int
fun f2(s: List<String>?): MutableMap<Boolean?, Foo>
fun <T : Set<Number>> f3(t: T): T?
}
// MODULE: m2-js()()(m1-common)
// FILE: js.kt
// TODO: do not suppress UNSUPPORTED once JS files in multi-platform tests are analyzed with JS analyzer facade
<!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>actual class Foo {
<!ACTUAL_WITHOUT_EXPECT!>actual constructor(p: dynamic) {}<!>
<!ACTUAL_WITHOUT_EXPECT!>actual fun f1(s: dynamic): dynamic = null!!<!>
<!ACTUAL_WITHOUT_EXPECT!>actual fun f2(s: dynamic): MutableMap<Boolean?, Foo> = null!!<!>
<!ACTUAL_WITHOUT_EXPECT!>actual fun <T : Set<Number>> f3(t: T): dynamic = null!!<!>
}<!>
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// !LANGUAGE: +MultiPlatformProjects
// !DIAGNOSTICS: -UNSUPPORTED
// MODULE: m1-common
@@ -20,9 +20,9 @@ expect inline class NonInlineActual(val x: Int)
actual inline class Foo1(val x: Int) {
actual fun bar(): String = "Hello"
}
actual inline class Foo2(val x: String)
<!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>actual inline class Foo2(val x: String)<!>
actual <!ABSENCE_OF_PRIMARY_CONSTRUCTOR_FOR_INLINE_CLASS!>inline<!> class Foo3
actual inline class NonInlineExpect(val x: Int)
<!ACTUAL_WITHOUT_EXPECT!>actual inline class NonInlineExpect(val x: Int)<!>
actual class NonInlineActual actual constructor(actual val x: Int)
<!ACTUAL_WITHOUT_EXPECT!>actual class NonInlineActual actual constructor(actual val x: Int)<!>
@@ -22,7 +22,7 @@ fun foo() {
// MODULE: m2-jvm
// FILE: jvm.kt
class Outer actual constructor() {
class Outer <!ACTUAL_WITHOUT_EXPECT!>actual constructor()<!> {
actual class Nested
actual init {}
@@ -9,10 +9,10 @@ expect fun foo()
// FILE: jvm.kt
package jvm
actual fun foo() {}
<!ACTUAL_WITHOUT_EXPECT!>actual fun foo() {}<!>
// MODULE: m3-js()()(m1-common)
// FILE: js.kt
package js
actual fun foo() {}
<!ACTUAL_WITHOUT_EXPECT!>actual fun foo() {}<!>
@@ -9,4 +9,4 @@ expect fun foo()
<!NON_MEMBER_FUNCTION_NO_BODY!>actual fun foo()<!>
<!NON_MEMBER_FUNCTION_NO_BODY!>actual fun bar()<!>
<!ACTUAL_WITHOUT_EXPECT, NON_MEMBER_FUNCTION_NO_BODY!>actual fun bar()<!>
@@ -2,4 +2,4 @@
// MODULE: m1-jvm
// FILE: jvm.kt
actual fun foo() { }
<!ACTUAL_WITHOUT_EXPECT!>actual fun foo() { }<!>
@@ -8,7 +8,7 @@ expect fun nonInlineFun()
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual fun inlineFun() { }
<!ACTUAL_WITHOUT_EXPECT!>actual fun inlineFun() { }<!>
actual fun nonInlineFun() { }
// MODULE: m3-js()()(m1-common)
@@ -18,10 +18,10 @@ expect fun f8(vararg x: Any)
// FILE: jvm.kt
actual inline fun f1(noinline s: () -> String) {}
actual inline fun f2(noinline s: () -> String) {}
<!ACTUAL_WITHOUT_EXPECT!>actual inline fun f2(noinline s: () -> String) {}<!>
actual inline fun f3(s: () -> String) {}
actual inline fun f4(crossinline s: () -> String) {}
actual inline fun f5(crossinline s: () -> String) {}
<!ACTUAL_WITHOUT_EXPECT!>actual inline fun f5(crossinline s: () -> String) {}<!>
actual inline fun f6(s: () -> String) {}
actual fun f7(vararg x: Any) {}
actual fun f8(x: Any) {}
<!ACTUAL_WITHOUT_EXPECT!>actual fun f7(vararg x: Any) {}<!>
<!ACTUAL_WITHOUT_EXPECT!>actual fun f8(x: Any) {}<!>