[Wasm] Port external declaration checker to K2 (KT-56849)

Share common code with FirJsExternalChecker using
FirWebCommonExternalChecker
This commit is contained in:
Svyatoslav Kuzmich
2023-10-26 11:46:22 +02:00
committed by Space Team
parent 83aa014d81
commit 62ebb9932f
35 changed files with 948 additions and 547 deletions
@@ -0,0 +1,6 @@
// FIR_IDENTICAL
external class A {
<!EXTERNAL_ANONYMOUS_INITIALIZER!>init {
definedExternally
}<!>
}
@@ -0,0 +1,31 @@
// FIR_IDENTICAL
external fun foo(): Int = definedExternally
external fun bar(): Unit {
definedExternally
}
external fun baz(): Int = <!WRONG_BODY_OF_EXTERNAL_DECLARATION!>23<!>
external fun f(x: Int, y: String = definedExternally): Unit
external fun g(x: Int, y: String = <!WRONG_DEFAULT_VALUE_FOR_EXTERNAL_FUN_PARAMETER!>""<!>): Unit
external var a: Int
get() = definedExternally
set(value) {
definedExternally
}
external val b: Int
get() = <!WRONG_BODY_OF_EXTERNAL_DECLARATION!>23<!>
external val c: Int = definedExternally
external val d: Int = <!WRONG_INITIALIZER_OF_EXTERNAL_DECLARATION!>23<!>
external class C {
fun foo(): Int = definedExternally
fun bar(): Int = <!WRONG_BODY_OF_EXTERNAL_DECLARATION!>23<!>
}
@@ -0,0 +1,15 @@
external open class Base(x: Int) {
constructor(x: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>this<!>(23)
constructor(x: String, y: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>this<!>("")
}
external open class Derived1() : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>Base(23)<!> {
constructor(x: Byte) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>(23)
constructor(x: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>("")
constructor(x: String, y: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>("")
}
external open class Derived2() : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>Base("")<!>
@@ -0,0 +1,15 @@
external open class Base(x: Int) {
constructor(x: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>this<!>(23)
constructor(x: String, y: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>this<!>("")
}
external open class Derived1() : Base<!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>(23)<!> {
constructor(x: Byte) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>(23)
constructor(x: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>("")
constructor(x: String, y: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>("")
}
external open class Derived2() : Base<!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>("")<!>
@@ -0,0 +1,18 @@
external interface I
external object O : I
class Delegate {
operator fun getValue(thisRef: Any?, property: Any): String = ""
operator fun setValue(thisRef: Any?, property: Any, value: String) {}
}
external class A : <!EXTERNAL_DELEGATION!>I<!> by O {
val prop by <!EXTERNAL_DELEGATION!>Delegate()<!>
var mutableProp by <!EXTERNAL_DELEGATION!>Delegate()<!>
}
external val topLevelProp by <!EXTERNAL_DELEGATION!>Delegate()<!>
@@ -0,0 +1,18 @@
external interface I
external object O : I
class Delegate {
operator fun getValue(thisRef: Any?, property: Any): String = ""
operator fun setValue(thisRef: Any?, property: Any, value: String) {}
}
external class A : <!EXTERNAL_DELEGATION!>I by O<!> {
val prop <!EXTERNAL_DELEGATION!>by Delegate()<!>
var mutableProp <!EXTERNAL_DELEGATION!>by Delegate()<!>
}
external val topLevelProp <!EXTERNAL_DELEGATION!>by Delegate()<!>
@@ -1,51 +0,0 @@
// Classes
external class C1
external enum class C2
external annotation class C3
external data class C4(val x: String)
external class C5 {
class C6
inner class C7
}
external inline class C8(val x: Int)
external value class C9(val x: Int)
// Interfaces
external interface I1
external fun interface I2 {
fun foo(): Int
}
// Functions
external fun foo1(): Int
external <!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo2(): Int
external inline fun foo3(f: () -> Int): Int
external suspend fun foo4(): Int
external fun Int.foo5(): Int
// Properties
external lateinit var v1: String
external val Int.v2: String
get() = definedExternally
@@ -1,3 +1,5 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -INLINE_CLASS_DEPRECATED -NO_TAIL_CALLS_FOUND
// Classes
@@ -16,7 +18,7 @@ external class C5 {
inner class <!WRONG_EXTERNAL_DECLARATION!>C7<!>
}
external <!INLINE_CLASS_DEPRECATED!>inline<!> class <!WRONG_EXTERNAL_DECLARATION!>C8(<!EXTERNAL_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER!>val x: Int<!>)<!>
external inline class <!WRONG_EXTERNAL_DECLARATION!>C8(<!EXTERNAL_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER!>val x: Int<!>)<!>
external value class <!WRONG_EXTERNAL_DECLARATION!>C9(<!EXTERNAL_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER!>val x: Int<!>)<!>
@@ -48,4 +50,8 @@ external fun foo1(): Int
<!WRONG_EXTERNAL_DECLARATION!>external lateinit var v1: String<!>
<!WRONG_EXTERNAL_DECLARATION!>external val Int.v2: String<!>
get() = definedExternally
get() = definedExternally
// Property parameters
external class C(x: Int, <!EXTERNAL_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER!>val y: String<!>)
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
external interface I {
interface J
class <!NESTED_CLASS_IN_EXTERNAL_INTERFACE!>C<!>
<!NESTED_CLASS_IN_EXTERNAL_INTERFACE!>object O<!>
enum class <!NESTED_CLASS_IN_EXTERNAL_INTERFACE, WRONG_EXTERNAL_DECLARATION!>E<!>
companion <!NESTED_CLASS_IN_EXTERNAL_INTERFACE!>object<!>
}
@@ -0,0 +1,42 @@
// FIR_IDENTICAL
object O
class TopLevel {
external class <!NESTED_EXTERNAL_DECLARATION!>A<!>
class B
fun foo() = 23
<!NESTED_EXTERNAL_DECLARATION!>external fun bar(): Int<!>
val x = "a"
<!NESTED_EXTERNAL_DECLARATION!>external val y: String<!>
val O.u: String get() = "O.u"
}
external class TopLevelNative {
external class <!NESTED_EXTERNAL_DECLARATION!>A<!>
class B
fun foo(): Int = definedExternally
<!NESTED_EXTERNAL_DECLARATION!>external fun bar(): Int<!>
val x: String = definedExternally
<!NESTED_EXTERNAL_DECLARATION!>external val y: String<!>
}
fun topLevelFun() {
external class <!NESTED_EXTERNAL_DECLARATION!>A<!>
class B
fun foo() = 23
<!NESTED_EXTERNAL_DECLARATION!>external fun bar(): Int<!>
}
@@ -0,0 +1,18 @@
// FIR_IDENTICAL
external interface I {
<!NON_ABSTRACT_MEMBER_OF_EXTERNAL_INTERFACE!>fun foo(): Unit<!> = definedExternally
val a: Int?
get() = definedExternally
var b: String?
get() = definedExternally
set(value) = definedExternally
<!NON_ABSTRACT_MEMBER_OF_EXTERNAL_INTERFACE!>val c: Int<!>
get() = definedExternally
<!NON_ABSTRACT_MEMBER_OF_EXTERNAL_INTERFACE!>var d: String<!>
get() = definedExternally
set(value) = definedExternally
}