[FIR] Add expect actual checker
This commit is contained in:
committed by
teamcityserver
parent
faadb08174
commit
c3060e861f
@@ -30,7 +30,7 @@ class MyImpl2: My {
|
||||
expect interface Outer {
|
||||
interface Inner {
|
||||
open fun bar()
|
||||
open fun bas() {}
|
||||
<!EXPECTED_DECLARATION_WITH_BODY!>open fun bas()<!> {}
|
||||
<!REDUNDANT_MODIFIER!>open<!> abstract fun bat(): Int
|
||||
fun foo()
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
expect enum class En {
|
||||
E1,
|
||||
E2 {
|
||||
fun foo() = ""
|
||||
<!EXPECTED_DECLARATION_WITH_BODY!>fun foo()<!> = ""
|
||||
},
|
||||
E3 { };
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
|
||||
}
|
||||
|
||||
+2
-2
@@ -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<!>
|
||||
|
||||
+3
-3
@@ -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("")
|
||||
}
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
Vendored
+1
-1
@@ -10,7 +10,7 @@ expect class FooBar {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
Foo()
|
||||
<!UNRESOLVED_REFERENCE!>Foo<!>()
|
||||
Bar()
|
||||
Baz()
|
||||
FooBar()
|
||||
|
||||
+2
-2
@@ -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)
|
||||
}
|
||||
|
||||
+3
-3
@@ -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<!>
|
||||
|
||||
+4
-4
@@ -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
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
Vendored
+3
-3
@@ -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)<!>
|
||||
|
||||
+1
-1
@@ -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 {}
|
||||
|
||||
+2
-2
@@ -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() {}<!>
|
||||
|
||||
Vendored
+1
-1
@@ -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()<!>
|
||||
|
||||
+1
-1
@@ -2,4 +2,4 @@
|
||||
// MODULE: m1-jvm
|
||||
// FILE: jvm.kt
|
||||
|
||||
actual fun foo() { }
|
||||
<!ACTUAL_WITHOUT_EXPECT!>actual fun foo() { }<!>
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
Vendored
+4
-4
@@ -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) {}<!>
|
||||
|
||||
Reference in New Issue
Block a user