[Wasm] Port external declaration checker to K2 (KT-56849)
Share common code with FirJsExternalChecker using FirWebCommonExternalChecker
This commit is contained in:
committed by
Space Team
parent
83aa014d81
commit
62ebb9932f
@@ -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<!>
|
||||
}
|
||||
+15
@@ -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("")<!>
|
||||
+15
@@ -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<!>
|
||||
}
|
||||
+18
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user