[FIR JS] Implement FirJsExternalChecker
The JsAllowValueClassesInExternals feature is enabled explicitly, because otherwise it's enabled implicitly depending on the backend. See: org/jetbrains/kotlin/test/builders/LanguageVersionSettingsBuilder.kt:90 A property may have a fake source return kind, while its accessor has a real source kind. In this case we can't "just copy" the property return type down to the accessor.
This commit is contained in:
committed by
Space Team
parent
7b8f5f9980
commit
a20e29e8b7
-5
@@ -1,5 +0,0 @@
|
||||
external class A {
|
||||
init {
|
||||
definedExternally
|
||||
}
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
external class A {
|
||||
<!EXTERNAL_ANONYMOUS_INITIALIZER!>init {
|
||||
definedExternally
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
external fun foo(): Int = definedExternally
|
||||
|
||||
external fun bar(): Unit {
|
||||
definedExternally
|
||||
}
|
||||
|
||||
external fun baz(): Int = 23
|
||||
|
||||
external fun f(x: Int, y: String = definedExternally): Unit
|
||||
|
||||
external fun g(x: Int, y: String = ""): Unit
|
||||
|
||||
external var a: Int
|
||||
get() = definedExternally
|
||||
set(value) {
|
||||
definedExternally
|
||||
}
|
||||
|
||||
external val b: Int
|
||||
get() = 23
|
||||
|
||||
external val c: Int = definedExternally
|
||||
|
||||
external val d: Int = 23
|
||||
|
||||
external class C {
|
||||
fun foo(): Int = definedExternally
|
||||
|
||||
fun bar(): Int = 23
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
external fun foo(): Int = definedExternally
|
||||
|
||||
external fun bar(): Unit {
|
||||
@@ -27,4 +28,4 @@ external class C {
|
||||
fun foo(): Int = definedExternally
|
||||
|
||||
fun bar(): Int = <!WRONG_BODY_OF_EXTERNAL_DECLARATION!>23<!>
|
||||
}
|
||||
}
|
||||
+7
-7
@@ -1,17 +1,17 @@
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_MISSING_UNRESOLVED
|
||||
|
||||
external open class Base(x: Int) {
|
||||
constructor(x: String) : this(23)
|
||||
constructor(x: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>this<!>(23)
|
||||
|
||||
constructor(x: String, y: String) : this("")
|
||||
constructor(x: String, y: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>this<!>("")
|
||||
}
|
||||
|
||||
external open class Derived1() : Base(23) {
|
||||
constructor(x: Byte) : super(23)
|
||||
external open class Derived1() : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>Base(23)<!> {
|
||||
constructor(x: Byte) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>(23)
|
||||
|
||||
constructor(x: String) : super("")
|
||||
constructor(x: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>("")
|
||||
|
||||
constructor(x: String, y: String) : super("")
|
||||
constructor(x: String, y: String) : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>super<!>("")
|
||||
}
|
||||
|
||||
external open class Derived2() : Base("")
|
||||
external open class Derived2() : <!EXTERNAL_DELEGATED_CONSTRUCTOR_CALL!>Base("")<!>
|
||||
|
||||
@@ -9,10 +9,10 @@ class Delegate {
|
||||
operator fun setValue(thisRef: Any?, property: Any, value: String) {}
|
||||
}
|
||||
|
||||
external class A : I by O {
|
||||
val prop by Delegate()
|
||||
external class A : <!EXTERNAL_DELEGATION!>I<!> by O {
|
||||
val prop by <!EXTERNAL_DELEGATION!>Delegate()<!>
|
||||
|
||||
var mutableProp by Delegate()
|
||||
var mutableProp by <!EXTERNAL_DELEGATION!>Delegate()<!>
|
||||
}
|
||||
|
||||
external val topLevelProp by Delegate()
|
||||
external val topLevelProp by <!EXTERNAL_DELEGATION!>Delegate()<!>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
external enum class E {
|
||||
X,
|
||||
Y {
|
||||
<!EXTERNAL_ENUM_ENTRY_WITH_BODY!>Y {
|
||||
fun foo()
|
||||
},
|
||||
Z {}
|
||||
},<!>
|
||||
<!EXTERNAL_ENUM_ENTRY_WITH_BODY!>Z {}<!>
|
||||
}
|
||||
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
class A
|
||||
|
||||
external fun A.foo(): Unit = definedExternally
|
||||
|
||||
external var A.bar: String
|
||||
get() = definedExternally
|
||||
set(value) = definedExternally
|
||||
|
||||
external val A.baz: String
|
||||
get() = definedExternally
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
class A
|
||||
|
||||
<!WRONG_EXTERNAL_DECLARATION!>external fun A.foo(): Unit<!> = definedExternally
|
||||
|
||||
Vendored
-25
@@ -1,25 +0,0 @@
|
||||
external fun foo(f: Int.() -> Int)
|
||||
|
||||
external fun bar(vararg f: Int.() -> Int)
|
||||
|
||||
external fun baz(): Int.() -> Int
|
||||
|
||||
external val prop: Int.() -> Int
|
||||
|
||||
external var prop2: Int.() -> Int
|
||||
|
||||
external val propGet
|
||||
get(): Int.() -> Int = definedExternally
|
||||
|
||||
external var propSet
|
||||
get(): Int.() -> Int = definedExternally
|
||||
set(v: Int.() -> Int) = definedExternally
|
||||
|
||||
external class A(f: Int.() -> Int)
|
||||
|
||||
external data class B(
|
||||
val a: Int.() -> Int,
|
||||
var b: Int.() -> Int
|
||||
) {
|
||||
val c: Int.() -> Int
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
external fun foo(<!EXTENSION_FUNCTION_IN_EXTERNAL_DECLARATION!>f: Int.() -> Int<!>)
|
||||
|
||||
external fun bar(<!EXTENSION_FUNCTION_IN_EXTERNAL_DECLARATION!>vararg f: Int.() -> Int<!>)
|
||||
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
external fun interface I {
|
||||
fun f()
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
external fun interface <!WRONG_EXTERNAL_DECLARATION!>I<!> {
|
||||
fun f()
|
||||
}
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
external interface I {
|
||||
interface J
|
||||
|
||||
class C
|
||||
|
||||
object O
|
||||
|
||||
enum class E
|
||||
|
||||
companion object
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
external interface I {
|
||||
interface J
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
open class A
|
||||
|
||||
interface I
|
||||
|
||||
external open class B
|
||||
|
||||
external class C : A
|
||||
|
||||
external class D : B, I
|
||||
|
||||
external interface K : I
|
||||
|
||||
external enum class E {
|
||||
X
|
||||
}
|
||||
|
||||
external enum class F : I {
|
||||
X
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
open class A
|
||||
|
||||
interface I
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
// !DIAGNOSTICS: -NOTHING_TO_INLINE
|
||||
|
||||
inline external fun foo(): Unit
|
||||
|
||||
inline external val bar: Int
|
||||
get() = definedExternally
|
||||
|
||||
external val baz: Int
|
||||
inline get() = definedExternally
|
||||
|
||||
external class A {
|
||||
inline fun foo(): Unit
|
||||
|
||||
inline val bar: Int
|
||||
get() = definedExternally
|
||||
|
||||
val baz: Int
|
||||
inline get() = definedExternally
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -NOTHING_TO_INLINE
|
||||
|
||||
<!INLINE_EXTERNAL_DECLARATION!>inline external fun foo(): Unit<!>
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||
|
||||
external inline class C(val a: Int) {
|
||||
fun foo()
|
||||
}
|
||||
|
||||
<!WRONG_MODIFIER_TARGET!>inline<!> external enum class E {
|
||||
A
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||
|
||||
external inline class <!WRONG_EXTERNAL_DECLARATION!>C(<!EXTERNAL_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER!>val a: Int<!>)<!> {
|
||||
|
||||
Vendored
-64
@@ -1,64 +0,0 @@
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||
|
||||
// FILE: uint.kt
|
||||
|
||||
package kotlin
|
||||
|
||||
inline class UInt(private val i: Int)
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
inline class SomeIC(val a: Int)
|
||||
|
||||
external val l: SomeIC
|
||||
|
||||
external val ll
|
||||
get(): SomeIC = definedExternally
|
||||
|
||||
external var r: SomeIC
|
||||
|
||||
external var rr: SomeIC
|
||||
get() = definedExternally
|
||||
set(v: SomeIC) { definedExternally }
|
||||
|
||||
external fun foo(): SomeIC
|
||||
external fun foo(c: SomeIC): SomeIC
|
||||
external fun foo(a: Int, c: SomeIC): SomeIC
|
||||
|
||||
external fun foo(a: Int, <!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: SomeIC)
|
||||
external fun foo(a: Int, ui: UInt, vararg args: UInt)
|
||||
|
||||
external class CC(
|
||||
a: SomeIC,
|
||||
val b: SomeIC,
|
||||
var c: SomeIC
|
||||
) {
|
||||
val l: SomeIC
|
||||
var r: SomeIC
|
||||
|
||||
fun foo(): SomeIC
|
||||
fun foo(c: SomeIC): SomeIC
|
||||
fun foo(a: Int, c: SomeIC): SomeIC
|
||||
|
||||
class N(
|
||||
a: SomeIC,
|
||||
val b: SomeIC,
|
||||
var c: SomeIC
|
||||
) {
|
||||
val l: SomeIC
|
||||
var r: SomeIC
|
||||
|
||||
fun foo(): SomeIC
|
||||
fun foo(c: SomeIC): SomeIC
|
||||
fun foo(a: Int, c: SomeIC): SomeIC
|
||||
}
|
||||
}
|
||||
|
||||
external interface EI {
|
||||
val l: SomeIC
|
||||
var r: SomeIC
|
||||
|
||||
fun foo(): SomeIC
|
||||
fun foo(c: SomeIC): SomeIC
|
||||
fun foo(a: Int, c: SomeIC): SomeIC
|
||||
}
|
||||
Vendored
+2
-1
@@ -1,4 +1,5 @@
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses, -JsAllowValueClassesInExternals
|
||||
|
||||
// FILE: uint.kt
|
||||
|
||||
|
||||
-65
@@ -1,65 +0,0 @@
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses, +JsAllowValueClassesInExternals
|
||||
// !DIAGNOSTICS: +INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING
|
||||
|
||||
// FILE: uint.kt
|
||||
|
||||
package kotlin
|
||||
|
||||
inline class UInt(private val i: Int)
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
inline class SomeIC(val a: Int)
|
||||
|
||||
external val l: SomeIC
|
||||
|
||||
external val ll
|
||||
get(): SomeIC = definedExternally
|
||||
|
||||
external var r: SomeIC
|
||||
|
||||
external var rr: SomeIC
|
||||
get() = definedExternally
|
||||
set(v: SomeIC) { definedExternally }
|
||||
|
||||
external fun foo(): SomeIC
|
||||
external fun foo(c: SomeIC): SomeIC
|
||||
external fun foo(a: Int, c: SomeIC): SomeIC
|
||||
|
||||
external fun foo(a: Int, <!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: SomeIC)
|
||||
external fun foo(a: Int, ui: UInt, vararg args: UInt)
|
||||
|
||||
external class CC(
|
||||
a: SomeIC,
|
||||
val b: SomeIC,
|
||||
var c: SomeIC
|
||||
) {
|
||||
val l: SomeIC
|
||||
var r: SomeIC
|
||||
|
||||
fun foo(): SomeIC
|
||||
fun foo(c: SomeIC): SomeIC
|
||||
fun foo(a: Int, c: SomeIC): SomeIC
|
||||
|
||||
class N(
|
||||
a: SomeIC,
|
||||
val b: SomeIC,
|
||||
var c: SomeIC
|
||||
) {
|
||||
val l: SomeIC
|
||||
var r: SomeIC
|
||||
|
||||
fun foo(): SomeIC
|
||||
fun foo(c: SomeIC): SomeIC
|
||||
fun foo(a: Int, c: SomeIC): SomeIC
|
||||
}
|
||||
}
|
||||
|
||||
external interface EI {
|
||||
val l: SomeIC
|
||||
var r: SomeIC
|
||||
|
||||
fun foo(): SomeIC
|
||||
fun foo(c: SomeIC): SomeIC
|
||||
fun foo(a: Int, c: SomeIC): SomeIC
|
||||
}
|
||||
+2
@@ -1,4 +1,6 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses, +JsAllowValueClassesInExternals
|
||||
// !DIAGNOSTICS: +INLINE_CLASS_IN_EXTERNAL_DECLARATION_WARNING
|
||||
|
||||
// FILE: uint.kt
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
external class C {
|
||||
inner class Inner
|
||||
}
|
||||
|
||||
external enum class E {
|
||||
X;
|
||||
|
||||
inner class Inner
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
external class C {
|
||||
inner class <!WRONG_EXTERNAL_DECLARATION!>Inner<!>
|
||||
}
|
||||
@@ -6,4 +7,4 @@ external enum class E {
|
||||
X;
|
||||
|
||||
inner class <!WRONG_EXTERNAL_DECLARATION!>Inner<!>
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
object O
|
||||
|
||||
class TopLevel {
|
||||
external class A
|
||||
|
||||
class B
|
||||
|
||||
fun foo() = 23
|
||||
|
||||
external fun bar(): Int
|
||||
|
||||
val x = "a"
|
||||
|
||||
external val y: String
|
||||
|
||||
val O.u: String get() = "O.u"
|
||||
}
|
||||
|
||||
external class TopLevelNative {
|
||||
external class A
|
||||
|
||||
class B
|
||||
|
||||
fun foo(): Int = definedExternally
|
||||
|
||||
external fun bar(): Int
|
||||
|
||||
val x: String = definedExternally
|
||||
|
||||
external val y: String
|
||||
}
|
||||
|
||||
fun topLevelFun() {
|
||||
external class A
|
||||
|
||||
class B
|
||||
|
||||
fun foo() = 23
|
||||
|
||||
external fun bar(): Int
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
object O
|
||||
|
||||
class TopLevel {
|
||||
@@ -39,4 +40,3 @@ fun topLevelFun() {
|
||||
|
||||
<!NESTED_EXTERNAL_DECLARATION!>external fun bar(): Int<!>
|
||||
}
|
||||
|
||||
|
||||
Vendored
-21
@@ -1,21 +0,0 @@
|
||||
external interface I {
|
||||
fun foo(): Unit = definedExternally
|
||||
|
||||
val a: Int?
|
||||
get() = definedExternally
|
||||
|
||||
var b: String?
|
||||
get() = definedExternally
|
||||
set(value) = definedExternally
|
||||
|
||||
val c: Int
|
||||
get() = definedExternally
|
||||
|
||||
var d: String
|
||||
get() = definedExternally
|
||||
set(value) = definedExternally
|
||||
|
||||
var e: dynamic
|
||||
get() = definedExternally
|
||||
set(value) = definedExternally
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
external interface I {
|
||||
<!NON_ABSTRACT_MEMBER_OF_EXTERNAL_INTERFACE!>fun foo(): Unit<!> = definedExternally
|
||||
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
// !DIAGNOSTICS: -NOTHING_TO_INLINE
|
||||
// TODO: should we disable NOTHING_TO_INLINE in JS backend?
|
||||
// TODO: uncomment declarations in case we decide to implement KT-14031
|
||||
|
||||
external class C {
|
||||
private fun a(): Int
|
||||
|
||||
private val b: String
|
||||
|
||||
private var c: Float
|
||||
|
||||
private var d: Float
|
||||
get
|
||||
set
|
||||
|
||||
var e: Float
|
||||
get
|
||||
private set
|
||||
|
||||
/*
|
||||
private inline fun inline_a(): Int = 23
|
||||
|
||||
private inline val inline_prop: Int
|
||||
get() = 42
|
||||
*/
|
||||
}
|
||||
|
||||
external object O {
|
||||
private fun a(): Int
|
||||
|
||||
private val b: String
|
||||
|
||||
private var c: Float
|
||||
|
||||
private var d: Float
|
||||
get
|
||||
set
|
||||
|
||||
/*
|
||||
private inline fun inline_a(): Int = 23
|
||||
|
||||
private inline val inline_prop: Int
|
||||
get() = 42
|
||||
*/
|
||||
}
|
||||
|
||||
external class Outer {
|
||||
class Inner {
|
||||
private fun a(): Int
|
||||
|
||||
private val b: String
|
||||
|
||||
private var c: Float
|
||||
|
||||
private var d: Float
|
||||
get
|
||||
set
|
||||
|
||||
/*
|
||||
private inline fun inline_a(): Int = 23
|
||||
|
||||
private inline val inline_prop: Int
|
||||
get() = 42
|
||||
*/
|
||||
}
|
||||
|
||||
private class PrivateInner
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -NOTHING_TO_INLINE
|
||||
// TODO: should we disable NOTHING_TO_INLINE in JS backend?
|
||||
// TODO: uncomment declarations in case we decide to implement KT-14031
|
||||
|
||||
-1
@@ -1 +0,0 @@
|
||||
external class C(x: Int, val y: String)
|
||||
@@ -1 +1,2 @@
|
||||
// FIR_IDENTICAL
|
||||
external class C(x: Int, <!EXTERNAL_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER!>val y: String<!>)
|
||||
@@ -1,21 +0,0 @@
|
||||
external annotation class A(val x: Int)
|
||||
|
||||
val x: Int
|
||||
external get() = definedExternally
|
||||
|
||||
class B
|
||||
|
||||
val B.x: Int
|
||||
external get() = definedExternally
|
||||
|
||||
class C {
|
||||
val a: Int
|
||||
external get() = definedExternally
|
||||
}
|
||||
|
||||
external class D {
|
||||
val a: Int
|
||||
external get() = definedExternally
|
||||
}
|
||||
|
||||
external data class E(val x: Int)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
external annotation class <!WRONG_EXTERNAL_DECLARATION!>A(val x: Int)<!>
|
||||
|
||||
val x: Int
|
||||
|
||||
Reference in New Issue
Block a user