[FIR JS] Prepare the test data for FIR
This commit is contained in:
committed by
Space Team
parent
0e38d0ebd2
commit
73c89a5d9d
+9
@@ -0,0 +1,9 @@
|
||||
// !LANGUAGE: +BareArrayClassLiteral +ProhibitGenericArrayClassLiteral
|
||||
|
||||
val a01 = Array::class
|
||||
val a02 = Array<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Array<!>>::class
|
||||
val a03 = Array<Any?>::class
|
||||
val a04 = Array<Array<Any?>?>::class
|
||||
val a05 = Array<IntArray?>::class
|
||||
val a06 = kotlin.Array::class
|
||||
val a07 = kotlin.Array<IntArray?>::class
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// !LANGUAGE: -BareArrayClassLiteral -ProhibitGenericArrayClassLiteral
|
||||
|
||||
val a01 = Array::class
|
||||
val a02 = Array<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Array<!>>::class
|
||||
val a03 = Array<Any?>::class
|
||||
val a04 = Array<Array<Any?>?>::class
|
||||
val a05 = Array<IntArray?>::class
|
||||
val a06 = kotlin.Array::class
|
||||
val a07 = kotlin.Array<IntArray?>::class
|
||||
Vendored
+17
@@ -0,0 +1,17 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun withDynamicReceiver(d: dynamic.() -> Unit) {}
|
||||
|
||||
fun test() = withDynamicReceiver {
|
||||
foo
|
||||
bar = 1
|
||||
}
|
||||
|
||||
fun test2() = withDynamicReceiver(fun dynamic.() {})
|
||||
|
||||
val dynamicProperty: dynamic.() -> Unit = TODO()
|
||||
|
||||
fun test(d: dynamic, dynamicParameter: dynamic.() -> Unit) {
|
||||
d.dynamicProperty()
|
||||
d.dynamicParameter()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
// !CHECK_TYPE
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun test() {
|
||||
dynamic {
|
||||
foo()
|
||||
bar.baz(0)
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> dynamic(body: dynamic.() -> T): T {
|
||||
val topLevel = null
|
||||
return topLevel.body()
|
||||
}
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION
|
||||
|
||||
fun test() {
|
||||
@@ -6,4 +7,4 @@ fun test() {
|
||||
|
||||
class dynamic {
|
||||
fun foo() {}
|
||||
}
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// SKIP_TXT
|
||||
|
||||
fun case_1(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: dynamic) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf(null) + args<!>).toTypedArray()
|
||||
}
|
||||
|
||||
fun case_2(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: dynamic) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf<Nothing>() + args<!>).toTypedArray()
|
||||
}
|
||||
|
||||
fun case_3(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: dynamic) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf(1) + args<!>).toTypedArray()
|
||||
}
|
||||
|
||||
fun case_4(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: dynamic) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf<Any?>() + args<!>).toTypedArray()
|
||||
}
|
||||
|
||||
fun case_5(x: Any?) {
|
||||
fun foo(x: List<dynamic>) = x
|
||||
|
||||
foo(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf(null) + x as MutableList<out dynamic><!>)
|
||||
}
|
||||
|
||||
fun case_6(x: Any?) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Any?>")!>listOf(null) + x as MutableList<in dynamic><!>).toTypedArray()
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// SKIP_TXT
|
||||
|
||||
fun case_1(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: dynamic) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf(null) + args<!>).toTypedArray()
|
||||
}
|
||||
|
||||
fun case_2(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: dynamic) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf<Nothing>() + args<!>).toTypedArray()
|
||||
}
|
||||
|
||||
fun case_3(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: dynamic) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf(1) + args<!>).toTypedArray()
|
||||
}
|
||||
|
||||
fun case_4(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> args: dynamic) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf<Any?>() + args<!>).toTypedArray()
|
||||
}
|
||||
|
||||
fun case_5(x: Any?) {
|
||||
fun foo(x: List<dynamic>) = x
|
||||
|
||||
foo(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Nothing..kotlin.Any?!>")!>listOf(null) + x as MutableList<out dynamic><!>)
|
||||
}
|
||||
|
||||
fun case_6(x: Any?) {
|
||||
(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.List<kotlin.Any?>")!>listOf(null) + x as MutableList<in dynamic><!>).toTypedArray()
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
val x: dynamic = 23
|
||||
|
||||
interface I {
|
||||
fun foo(): String
|
||||
}
|
||||
|
||||
class C : I by x
|
||||
|
||||
object O : I by x
|
||||
|
||||
fun box(): String {
|
||||
return object : I by x {}.foo()
|
||||
}
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
fun test(d: dynamic) {
|
||||
@@ -7,4 +8,4 @@ fun test(d: dynamic) {
|
||||
d["foo"] != null
|
||||
d.foo == null
|
||||
d.foo != null
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
fun test(d: dynamic, b: Boolean?) {
|
||||
if (d) {}
|
||||
while (d) {}
|
||||
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
// !DIAGNOSTICS: -NON_TOPLEVEL_CLASS_DECLARATION
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun test(d: dynamic) {
|
||||
+d
|
||||
-d
|
||||
! d
|
||||
|
||||
|
||||
d + d
|
||||
d + 1
|
||||
"" + d
|
||||
|
||||
d - d
|
||||
d * d
|
||||
d / d
|
||||
d % d
|
||||
|
||||
d and d
|
||||
|
||||
d[1]
|
||||
|
||||
d[1] = 2
|
||||
|
||||
d[1]++
|
||||
++d[1]
|
||||
|
||||
d[1]--
|
||||
--d[1]
|
||||
|
||||
d()
|
||||
d(1)
|
||||
d(name = 1)
|
||||
d <!VARARG_OUTSIDE_PARENTHESES!>{}<!>
|
||||
|
||||
class C {
|
||||
val plus: dynamic = null
|
||||
}
|
||||
|
||||
C() <!PROPERTY_AS_OPERATOR!>+<!> 5 // todo should be marked as DEBUG_INFO_DYNAMIC
|
||||
C().plus(5)
|
||||
|
||||
d == d
|
||||
d != d
|
||||
|
||||
d === d
|
||||
d !== d
|
||||
|
||||
d < d
|
||||
d <= d
|
||||
d >= d
|
||||
d > d
|
||||
|
||||
for (i in d) {
|
||||
i.foo()
|
||||
}
|
||||
|
||||
var dVar = d
|
||||
dVar++
|
||||
++dVar
|
||||
|
||||
dVar--
|
||||
--dVar
|
||||
|
||||
dVar += 1
|
||||
dVar -= 1
|
||||
dVar *= 1
|
||||
dVar /= 1
|
||||
dVar %= 1
|
||||
|
||||
d += 1
|
||||
d -= 1
|
||||
d *= 1
|
||||
d /= 1
|
||||
d %= 1
|
||||
|
||||
d[1] += 1
|
||||
d[1] -= 1
|
||||
d[1] *= 1
|
||||
d[1] /= 1
|
||||
d[1] %= 1
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo() {
|
||||
for ((x, y) in A()) {
|
||||
println(x + y)
|
||||
}
|
||||
|
||||
bar { (x, y) ->
|
||||
println(x + y)
|
||||
}
|
||||
|
||||
val x: dynamic = Any()
|
||||
|
||||
val (y, z) = x
|
||||
println(y + z)
|
||||
}
|
||||
|
||||
class A {
|
||||
operator fun iterator(): Iterator<dynamic> = TODO("")
|
||||
}
|
||||
|
||||
fun bar(f: (dynamic) -> Unit): Unit = TODO("")
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
fun test(d: dynamic) {
|
||||
val v1 = d.foo()
|
||||
v1.isDynamic() // to check that anything is resolvable
|
||||
@@ -15,4 +16,4 @@ fun test(d: dynamic) {
|
||||
v5.isDynamic() // to check that anything is resolvable
|
||||
|
||||
d.foo = 1
|
||||
}
|
||||
}
|
||||
Vendored
+34
@@ -0,0 +1,34 @@
|
||||
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||
// !CHECK_TYPE
|
||||
|
||||
fun test(d: dynamic) {
|
||||
d.foo <!VARARG_OUTSIDE_PARENTHESES!>{}<!>
|
||||
|
||||
d.foo <!VARARG_OUTSIDE_PARENTHESES!>{ <!UNRESOLVED_REFERENCE!>it<!> }<!>
|
||||
|
||||
d.foo <!VARARG_OUTSIDE_PARENTHESES!>{ x -> }<!>
|
||||
|
||||
d.foo <!VARARG_OUTSIDE_PARENTHESES!>{ x: Int -> "" }<!>
|
||||
|
||||
d.foo <!VARARG_OUTSIDE_PARENTHESES!>{ x, y -> "" }<!>
|
||||
|
||||
d.foo <!VARARG_OUTSIDE_PARENTHESES!>{ x: String, y: Int -> "" }<!>
|
||||
|
||||
d.foo <!VARARG_OUTSIDE_PARENTHESES!>{ x, y: Int -> "" }<!>
|
||||
|
||||
d.foo({})
|
||||
|
||||
d.foo({ x -> })
|
||||
|
||||
d.foo(<!UNRESOLVED_REFERENCE!>checkSubtype<!><(Int) -> Unit>({ x -> }))
|
||||
|
||||
d.foo(label@ { x -> })
|
||||
|
||||
d.foo(label@ ({ x, y -> }))
|
||||
|
||||
d.foo((label@ ({ x, y: Int -> })))
|
||||
|
||||
d.foo(({ x -> }))
|
||||
|
||||
d.foo((({ x -> })))
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !DIAGNOSTICS: -REDUNDANT_NULLABLE
|
||||
|
||||
fun test(d: Any, dl: Collection<dynamic>) {
|
||||
d as dynamic
|
||||
d as dynamic?
|
||||
|
||||
d as? dynamic
|
||||
d as? dynamic?
|
||||
|
||||
d is dynamic
|
||||
d is dynamic?
|
||||
|
||||
d !is dynamic
|
||||
d !is dynamic?
|
||||
|
||||
when (d) {
|
||||
is dynamic -> {}
|
||||
is dynamic? -> {}
|
||||
!is dynamic -> {}
|
||||
!is dynamic? -> {}
|
||||
}
|
||||
|
||||
dl as List<dynamic>
|
||||
dl is List<dynamic>
|
||||
|
||||
when (dl) {
|
||||
is List<dynamic> -> {}
|
||||
}
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
||||
@kotlin.internal.DynamicExtension
|
||||
fun dynamic.onDynamicFun() = 1
|
||||
|
||||
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
||||
@kotlin.internal.DynamicExtension
|
||||
var dynamic.onDynamicProperty
|
||||
get() = ""
|
||||
set(value) {}
|
||||
|
||||
|
||||
fun test(d: dynamic, a: Any?) {
|
||||
eatT<Int>(d.onDynamicFun())
|
||||
eatT<String>(d.onDynamicProperty)
|
||||
d.onDynamicProperty = ""
|
||||
eatT<Iterator<*>>(d.iterator())
|
||||
|
||||
for (item in d) {
|
||||
println(item)
|
||||
}
|
||||
|
||||
a.<!UNRESOLVED_REFERENCE!>onDynamicFun<!>()
|
||||
a.<!UNRESOLVED_REFERENCE!>onDynamicProperty<!>
|
||||
}
|
||||
|
||||
fun <T> eatT(t: T) {}
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
// FIR_IDENTICAL
|
||||
fun test(d: dynamic) {
|
||||
val v1 = d?.foo()
|
||||
v1.isDynamic() // to check that anything is resolvable
|
||||
|
||||
val v2 = d!!.foo(1)
|
||||
v2.isDynamic() // to check that anything is resolvable
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
object X1
|
||||
object X2
|
||||
|
||||
class Inv<T>
|
||||
|
||||
fun dynamic.foo() = X1
|
||||
fun <T> Inv<T>.foo() = X2
|
||||
|
||||
fun test(): X2 = Inv<Any>().foo()
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
// !DIAGNOSTICS:-USELESS_CAST
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun test(d: dynamic) {
|
||||
d.onAnyVal
|
||||
d.onAnyVal = 1
|
||||
|
||||
d?.onAnyVal
|
||||
d?.onAnyVal = 1
|
||||
|
||||
run {
|
||||
d!!.onAnyVal
|
||||
}
|
||||
run {
|
||||
d!!.<!UNRESOLVED_REFERENCE!>onAnyVal<!> = 1
|
||||
}
|
||||
|
||||
d.onNullableAnyVal = 1
|
||||
|
||||
d.onStringVal = 1
|
||||
|
||||
d.onDynamicVal = 1
|
||||
|
||||
(d as String).onStringVal
|
||||
(d as Any).onAnyVal
|
||||
(d as Any?).onNullableAnyVal
|
||||
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVal<!>
|
||||
}
|
||||
|
||||
fun testReassignmentWithSafeCall(d: dynamic) {
|
||||
d?.onDynamicVal = 1
|
||||
}
|
||||
|
||||
fun testReassignmentWithStaticCalls(d: dynamic) {
|
||||
(d as String).<!VAL_REASSIGNMENT!>onStringVal<!> = 1
|
||||
(d as Any).<!VAL_REASSIGNMENT!>onAnyVal<!> = 1
|
||||
(d as Any?).<!VAL_REASSIGNMENT!>onNullableAnyVal<!> = 1
|
||||
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVal<!> = 1
|
||||
}
|
||||
|
||||
val Any.onAnyVal: Int get() = 1
|
||||
val Any?.onNullableAnyVal: Int get() = 1
|
||||
val String.onStringVal: Int get() = 1
|
||||
val dynamic.onDynamicVal: Int get() = 1
|
||||
|
||||
class C {
|
||||
fun test(d: dynamic) {
|
||||
d.memberVal
|
||||
d.memberVal = 1
|
||||
|
||||
d.memberExtensionVal
|
||||
d.memberExtensionVal = 1
|
||||
}
|
||||
|
||||
val memberVal = 1
|
||||
val Any.memberExtensionVal: Int
|
||||
get() = 1
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
// !DIAGNOSTICS:-USELESS_CAST
|
||||
|
||||
fun test(d: dynamic) {
|
||||
d.onAnyVar
|
||||
d.onAnyVar = 1
|
||||
|
||||
d?.onAnyVar
|
||||
d?.onAnyVar = 1
|
||||
|
||||
run {
|
||||
d!!.onAnyVar
|
||||
|
||||
}
|
||||
run {
|
||||
d!!.<!UNRESOLVED_REFERENCE!>onAnyVar<!> = 1
|
||||
}
|
||||
|
||||
d.onNullableAnyVar = 1
|
||||
|
||||
d.onStringVar = 1
|
||||
|
||||
d.onDynamicVar = 1
|
||||
|
||||
d?.<!UNRESOLVED_REFERENCE!>onDynamicVar<!> = 1
|
||||
|
||||
(d as String).onStringVar
|
||||
(d as Any).onAnyVar
|
||||
(d as Any?).onNullableAnyVar
|
||||
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVar<!>
|
||||
|
||||
(d as String).onStringVar = 1
|
||||
(d as Any).onAnyVar = 1
|
||||
(d as Any?).onNullableAnyVar = 1
|
||||
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamicVar<!> = 1
|
||||
}
|
||||
|
||||
var Any.onAnyVar: Int
|
||||
get() = 1
|
||||
set(v) {}
|
||||
|
||||
var Any?.onNullableAnyVar: Int
|
||||
get() = 1
|
||||
set(v) {}
|
||||
|
||||
var String.onStringVar: Int
|
||||
get() = 1
|
||||
set(v) {}
|
||||
|
||||
var dynamic.onDynamicVar: Int
|
||||
get() = 1
|
||||
set(v) {}
|
||||
|
||||
class C {
|
||||
fun test(d: dynamic) {
|
||||
d.memberVar
|
||||
d.memberExtensionVar
|
||||
|
||||
d.memberVar = 1
|
||||
d.memberExtensionVar = 1
|
||||
}
|
||||
|
||||
var memberVar = 1
|
||||
var Any.memberExtensionVar: Int
|
||||
get() = 1
|
||||
set(v) {}
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
// !DIAGNOSTICS:-USELESS_CAST
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun test(d: dynamic) {
|
||||
d.onAny()
|
||||
d?.onAny()
|
||||
run {
|
||||
d!!.onAny()
|
||||
}
|
||||
|
||||
d.onAny(1)
|
||||
|
||||
d.onNullableAny()
|
||||
d.onString()
|
||||
|
||||
d.onDynamic()
|
||||
d?.<!UNRESOLVED_REFERENCE!>onDynamic<!>()
|
||||
|
||||
(d as String).onString()
|
||||
(d as Any).onAny()
|
||||
(d as Any?).onNullableAny()
|
||||
(d as Any).<!UNRESOLVED_REFERENCE!>onDynamic<!>()
|
||||
}
|
||||
|
||||
fun Any.onAny() {}
|
||||
fun Any?.onNullableAny() {}
|
||||
fun String.onString() {}
|
||||
fun dynamic.onDynamic() {}
|
||||
|
||||
class C {
|
||||
fun test(d: dynamic) {
|
||||
d.member()
|
||||
d.memberExtension()
|
||||
}
|
||||
|
||||
fun member() {}
|
||||
fun Any.memberExtension() {}
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun test(d: dynamic) {
|
||||
d.onDynamic()
|
||||
d.onNullableDynamic()
|
||||
|
||||
d.valOnDynamic
|
||||
d.valOnDynamic = 1
|
||||
|
||||
d.varOnDynamic
|
||||
d.varOnDynamic = 1
|
||||
}
|
||||
|
||||
fun dynamic.extTest() {
|
||||
onDynamic()
|
||||
onNullableDynamic()
|
||||
|
||||
valOnDynamic
|
||||
valOnDynamic = 1
|
||||
|
||||
varOnDynamic
|
||||
varOnDynamic = 1
|
||||
|
||||
this.onDynamic()
|
||||
this.onNullableDynamic()
|
||||
|
||||
this.valOnDynamic
|
||||
this.valOnDynamic = 1
|
||||
|
||||
this.varOnDynamic
|
||||
this.varOnDynamic = 1
|
||||
|
||||
}
|
||||
|
||||
fun dynamic.onDynamic() {}
|
||||
fun dynamic?.onNullableDynamic() {}
|
||||
|
||||
val dynamic.valOnDynamic: Int get() = 1
|
||||
|
||||
var dynamic.varOnDynamic: Int
|
||||
get() = 1
|
||||
set(v) {}
|
||||
|
||||
|
||||
class ForMemberExtensions {
|
||||
fun test(d: dynamic) {
|
||||
d.memberExtensionVar
|
||||
d.memberExtensionVar = 1
|
||||
|
||||
d.memberExtensionVal
|
||||
d.memberExtensionVal = 1
|
||||
}
|
||||
|
||||
val dynamic.memberExtensionVal: Int get() = 1
|
||||
var dynamic.memberExtensionVar: Int
|
||||
get() = 1
|
||||
set(v) {}
|
||||
}
|
||||
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
fun dynamic.test() {
|
||||
val v1 = foo()
|
||||
v1.isDynamic() // to check that anything is resolvable
|
||||
|
||||
val v2 = foo(1)
|
||||
v2.isDynamic() // to check that anything is resolvable
|
||||
|
||||
val v3 = foo(1, "")
|
||||
v3.isDynamic() // to check that anything is resolvable
|
||||
|
||||
val v4 = foo<String>()
|
||||
v4.isDynamic() // to check that anything is resolvable
|
||||
|
||||
val v5 = foo
|
||||
v5.isDynamic() // to check that anything is resolvable
|
||||
|
||||
foo = 1
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
fun foo() {
|
||||
val a: dynamic = Any()
|
||||
println(a in setOf(1, 2))
|
||||
println(1 in a)
|
||||
println(1 !in a)
|
||||
when (2) {
|
||||
in a -> println("ok")
|
||||
}
|
||||
when (3) {
|
||||
!in a -> println("ok")
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
fun foo() {
|
||||
val a: dynamic = Any()
|
||||
println(a[0])
|
||||
println(a[0, 1])
|
||||
|
||||
a[0] = 23
|
||||
a[0, 1] = 42
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun <T> foo(t1: T, t2: T): T = t1
|
||||
|
||||
interface Tr
|
||||
class C: Tr
|
||||
fun <T: Tr> foo1(t1: T, t2: T): T = t1
|
||||
|
||||
fun test(d: dynamic, b: Boolean, n: String?) {
|
||||
foo(d, "").foo()
|
||||
foo1(d, C()).foo()
|
||||
|
||||
val fromIf = if (b) d else ""
|
||||
fromIf.doo()
|
||||
|
||||
val fromElvis = n ?: d
|
||||
fromElvis.doo()
|
||||
}
|
||||
|
||||
class In<in T>(t: T)
|
||||
fun <T> contra(a: In<T>, b: In<T>): T = null!!
|
||||
|
||||
fun testContra(d: dynamic) {
|
||||
contra(In(d), In("")).get(0) // not a dynamic call
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun test(d: dynamic) {
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fun test(d: dynamic) {
|
||||
d.foo(name = "name")
|
||||
|
||||
d.foo(1, name = "name")
|
||||
|
||||
d.foo(1, duplicate = "", duplicate = "")
|
||||
}
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -NON_TOPLEVEL_CLASS_DECLARATION
|
||||
|
||||
val foo: dynamic = 1
|
||||
@@ -6,4 +7,4 @@ fun bar() {
|
||||
class C {
|
||||
val foo: dynamic = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo(dn: dynamic?, d: dynamic, dnn: dynamic??) {
|
||||
val a1 = dn.foo()
|
||||
a1.isDynamic()
|
||||
|
||||
val a2 = dn?.foo()
|
||||
a2.isDynamic()
|
||||
|
||||
val a3 = dn!!.foo()
|
||||
a3.isDynamic()
|
||||
|
||||
d.foo()
|
||||
d?.foo()
|
||||
d!!.foo()
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// !CHECK_TYPE
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun dyn(d: dynamic) {}
|
||||
|
||||
fun foo(d: dynamic): String = ""
|
||||
fun foo(d: Int): Int = 1
|
||||
|
||||
fun nothing(d: dynamic): Int = 1
|
||||
fun nothing(d: Nothing): String = ""
|
||||
|
||||
fun test(d: dynamic) {
|
||||
dyn(1)
|
||||
dyn("")
|
||||
|
||||
foo(1).<!UNRESOLVED_REFERENCE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><Int>() }
|
||||
foo("").<!UNRESOLVED_REFERENCE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><String>() }
|
||||
|
||||
// Checking specificity of `dynamic` vs `Nothing`
|
||||
nothing(d).<!UNRESOLVED_REFERENCE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><String>() }
|
||||
nothing("").<!UNRESOLVED_REFERENCE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><Int>() }
|
||||
@Suppress("UNREACHABLE_CODE") nothing(null!!).<!UNRESOLVED_REFERENCE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><String>() }
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun dynamic.foo(s: String, a: Any) {}
|
||||
fun dynamic.foo(s: Any, a: String) {}
|
||||
|
||||
fun test(d: dynamic) {
|
||||
d.foo(1, "")
|
||||
d.foo("", "")
|
||||
d.foo(1, 1)
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface P
|
||||
interface R
|
||||
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
external val x: dynamic
|
||||
|
||||
var y: Any? by x
|
||||
|
||||
fun foo() {
|
||||
val a: Any by x
|
||||
}
|
||||
|
||||
class C {
|
||||
val a: dynamic by x
|
||||
}
|
||||
|
||||
class A {
|
||||
operator fun provideDelegate(host: Any?, p: Any): dynamic = TODO("")
|
||||
}
|
||||
|
||||
val z: Any? by A()
|
||||
|
||||
class DynamicHandler {
|
||||
operator fun getValue(thisRef: Any?, property: kotlin.reflect.KProperty<*>): dynamic = 23
|
||||
}
|
||||
|
||||
class B {
|
||||
val x: dynamic by DynamicHandler()
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
// FIR_IDENTICAL
|
||||
open class Foo {
|
||||
open protected fun bar(a: dynamic){
|
||||
a.something
|
||||
}
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo() {
|
||||
val a: dynamic = Any()
|
||||
val b: dynamic = Any()
|
||||
val c = C()
|
||||
println(a..b)
|
||||
println(c..a)
|
||||
println(a.rangeTo(b))
|
||||
}
|
||||
|
||||
class C {
|
||||
operator fun rangeTo(other: dynamic): ClosedRange<dynamic> = TODO("not implemented")
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !LANGUAGE: +RangeUntilOperator
|
||||
|
||||
fun foo() {
|
||||
val a: dynamic = Any()
|
||||
val b: dynamic = Any()
|
||||
val c = C()
|
||||
println(a..<b)
|
||||
println(c..<a)
|
||||
println(a.rangeUntil(b))
|
||||
}
|
||||
|
||||
class C {
|
||||
operator fun rangeUntil(other: dynamic): ClosedRange<dynamic> = TODO("not implemented")
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -REIFIED_TYPE_PARAMETER_NO_INLINE
|
||||
|
||||
fun <reified T> foo(t: T) {}
|
||||
class C<reified T>(t: T)
|
||||
|
||||
fun test(d: dynamic) {
|
||||
foo<dynamic>(d)
|
||||
foo(d)
|
||||
|
||||
C<dynamic>(d)
|
||||
C(d)
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun foo(d: dynamic) {
|
||||
if (d is Foo) {
|
||||
d.bar() // resolved statically
|
||||
d.baz()
|
||||
}
|
||||
}
|
||||
|
||||
class Foo {
|
||||
fun bar() {}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
fun test(d: dynamic) {
|
||||
val a = arrayOf(1, 2, 3)
|
||||
|
||||
d.foo(*d)
|
||||
d.foo(*<!ARGUMENT_TYPE_MISMATCH!>a<!>)
|
||||
d.foo(1, "2", *<!ARGUMENT_TYPE_MISMATCH!>a<!>)
|
||||
d.foo(1, *<!ARGUMENT_TYPE_MISMATCH!>a<!>) <!VARARG_OUTSIDE_PARENTHESES!>{ }<!>
|
||||
d.foo(*<!ARGUMENT_TYPE_MISMATCH!>a<!>) <!VARARG_OUTSIDE_PARENTHESES!>{ "" }<!>
|
||||
d.foo(*<!ARGUMENT_TYPE_MISMATCH!>a<!>, *<!ARGUMENT_TYPE_MISMATCH!>a<!>)
|
||||
d.foo(*<!ARGUMENT_TYPE_MISMATCH!>a<!>, *<!ARGUMENT_TYPE_MISMATCH!>a<!>) <!VARARG_OUTSIDE_PARENTHESES!>{ "" }<!>
|
||||
d.foo(*<!ARGUMENT_TYPE_MISMATCH!>a<!>, 1, { "" }, *<!ARGUMENT_TYPE_MISMATCH!>a<!>)
|
||||
d.foo(*<!ARGUMENT_TYPE_MISMATCH!>a<!>, 1)
|
||||
d.foo(*<!ARGUMENT_TYPE_MISMATCH!>a<!>, *<!ARGUMENT_TYPE_MISMATCH!>a<!>, { "" })
|
||||
|
||||
bar(d)
|
||||
bar(d, d)
|
||||
bar(*d)
|
||||
bar(*d, *d)
|
||||
bar(*d, 23, *d)
|
||||
}
|
||||
|
||||
fun bar(vararg x: Int): Unit = TODO("$x")
|
||||
Vendored
+74
@@ -0,0 +1,74 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun dynamic.test() {
|
||||
foo()
|
||||
ext()
|
||||
|
||||
bar()
|
||||
this.bar()
|
||||
|
||||
baz = 2
|
||||
this.baz = 2
|
||||
|
||||
"".ext()
|
||||
ext()
|
||||
|
||||
"".extValFun()
|
||||
extValFun()
|
||||
|
||||
"".extVal
|
||||
extVal
|
||||
|
||||
baz.extExtVal()
|
||||
extExtVal()
|
||||
|
||||
""()
|
||||
this()
|
||||
|
||||
C() + C()
|
||||
<!UNRESOLVED_REFERENCE!>+<!>C()
|
||||
|
||||
this + C()
|
||||
|
||||
0.<!UNRESOLVED_REFERENCE!>missing<!>()
|
||||
}
|
||||
|
||||
fun bar() {}
|
||||
var baz = 1
|
||||
|
||||
fun Any.ext() {}
|
||||
|
||||
val Any.extValFun: () -> Unit get() = null!!
|
||||
val Any.extVal: () -> Unit get() = null!!
|
||||
|
||||
val Any.extExtVal: Any.() -> Unit get() = null!!
|
||||
|
||||
operator fun Any.invoke() {}
|
||||
|
||||
operator fun Any.plus(a: Any) {}
|
||||
|
||||
class C {
|
||||
|
||||
operator fun String.invoke() {}
|
||||
val foo: String.() -> Unit = null!!
|
||||
|
||||
val s: String = ""
|
||||
|
||||
val withInvoke = WithInvoke()
|
||||
|
||||
fun dynamic.test() {
|
||||
s()
|
||||
this()
|
||||
|
||||
s.foo()
|
||||
this.foo()
|
||||
|
||||
withInvoke()
|
||||
this@C.withInvoke()
|
||||
}
|
||||
}
|
||||
|
||||
class WithInvoke {
|
||||
operator fun invoke() {}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
|
||||
fun Any?.staticExtension() = 1
|
||||
|
||||
val Any?.staticProperty get() = 2
|
||||
|
||||
fun test(d: dynamic, staticParameter: Any?.() -> Unit) {
|
||||
d.staticExtension()
|
||||
d.staticProperty
|
||||
d.staticParameter
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun foo(d: dynamic) {
|
||||
Foo(d).p.bar()
|
||||
|
||||
}
|
||||
|
||||
class Foo<T>(val p: T)
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
interface Tr : dynamic
|
||||
|
||||
fun <T: dynamic> foo() {}
|
||||
|
||||
class C<T> where T : dynamic
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
typealias Dyn = <!TYPEALIAS_SHOULD_EXPAND_TO_CLASS!>dynamic<!>
|
||||
typealias Dyn2 = Dyn
|
||||
typealias Dyn3 = Dyn2
|
||||
|
||||
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class Ann1
|
||||
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class Ann2
|
||||
|
||||
typealias AnnGenList<T> = List<@Ann1 T>
|
||||
typealias TestAnnGen1 = AnnGenList<dynamic>
|
||||
typealias TestAnnGen2 = AnnGenList<@Ann2 dynamic>
|
||||
typealias TestAnnGen3 = AnnGenList<@Ann1 dynamic>
|
||||
|
||||
fun useAnnGen1(x: TestAnnGen1) = x
|
||||
fun useAnnGen2(x: TestAnnGen2) = x
|
||||
|
||||
fun testUseAnnGen1(x: List<dynamic>) = useAnnGen1(x)
|
||||
fun testUseAnnGen2(x: List<dynamic>) = useAnnGen2(x)
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
typealias Test1 = List<dynamic>
|
||||
|
||||
typealias Test2 = (dynamic) -> dynamic
|
||||
@@ -10,4 +11,4 @@ fun useGen1(x: TestGen1) = x
|
||||
fun useGen2(x: TestGen2) = x
|
||||
|
||||
fun testUseGen1(x: List<dynamic>) = useGen1(x)
|
||||
fun testUseGen2(x: List<List<dynamic>>) = useGen2(x)
|
||||
fun testUseGen2(x: List<List<dynamic>>) = useGen2(x)
|
||||
@@ -0,0 +1,13 @@
|
||||
// !MARK_DYNAMIC_CALLS
|
||||
|
||||
fun test() {
|
||||
v()
|
||||
v(1)
|
||||
v(1, "")
|
||||
}
|
||||
|
||||
fun v(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> d: dynamic) {
|
||||
for (dd in d) {
|
||||
dd.foo()
|
||||
}
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
|
||||
package foo
|
||||
|
||||
class C1 {
|
||||
@JsExport
|
||||
fun f1() {}
|
||||
|
||||
@JsExport
|
||||
val p: Int = 10
|
||||
|
||||
@JsExport
|
||||
object O
|
||||
}
|
||||
|
||||
fun f2() {
|
||||
@JsExport
|
||||
fun f3() {}
|
||||
|
||||
@JsExport
|
||||
class C2
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
|
||||
package foo
|
||||
|
||||
@JsExport
|
||||
fun delete() {}
|
||||
|
||||
@JsExport
|
||||
val instanceof = 4
|
||||
|
||||
@JsExport
|
||||
class eval
|
||||
|
||||
@JsExport
|
||||
@JsName("await")
|
||||
fun foo() {}
|
||||
|
||||
@JsExport
|
||||
@JsName("this")
|
||||
val bar = 4
|
||||
|
||||
@JsExport
|
||||
@JsName("super")
|
||||
class Baz
|
||||
|
||||
@JsExport
|
||||
@JsName("default")
|
||||
class DefDef
|
||||
|
||||
@JsExport
|
||||
class Test {
|
||||
fun instanceof() {}
|
||||
|
||||
@JsName("eval")
|
||||
fun test() {}
|
||||
}
|
||||
|
||||
@JsExport
|
||||
object NaN
|
||||
|
||||
@JsExport
|
||||
enum class Nums {
|
||||
Infinity,
|
||||
undefined
|
||||
}
|
||||
compiler/testData/diagnostics/testsWithJsStdLib/export/nonConsumableIdentifiersInExportedFile.fir.kt
Vendored
+34
@@ -0,0 +1,34 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
@file:JsExport
|
||||
|
||||
package foo
|
||||
|
||||
fun delete() {}
|
||||
|
||||
val instanceof = 4
|
||||
|
||||
class eval
|
||||
|
||||
@JsName("await")
|
||||
fun foo() {}
|
||||
|
||||
@JsName("this")
|
||||
val bar = 4
|
||||
|
||||
@JsName("super")
|
||||
class Baz
|
||||
|
||||
class Test {
|
||||
fun instanceof() {}
|
||||
|
||||
@JsName("eval")
|
||||
fun test() {}
|
||||
}
|
||||
|
||||
object NaN
|
||||
|
||||
enum class Nums {
|
||||
Infinity,
|
||||
undefined
|
||||
}
|
||||
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
|
||||
package foo
|
||||
|
||||
@JsExport
|
||||
class C(val x: String) {
|
||||
constructor(x: Int): this(x.toString())
|
||||
}
|
||||
|
||||
@JsExport
|
||||
class C2(val x: String) {
|
||||
@JsName("JsNameProvided")
|
||||
constructor(x: Int): this(x.toString())
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
@file:JsExport
|
||||
|
||||
package foo
|
||||
|
||||
class C(val x: String) {
|
||||
constructor(x: Int): this(x.toString())
|
||||
}
|
||||
|
||||
class C2(val x: String) {
|
||||
@JsName("JsNameProvided")
|
||||
constructor(x: Int): this(x.toString())
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
|
||||
package foo
|
||||
|
||||
class C
|
||||
|
||||
@JsExport
|
||||
fun foo(x: C) {
|
||||
}
|
||||
|
||||
@JsExport
|
||||
fun bar() = C()
|
||||
|
||||
@JsExport
|
||||
val x: C = C()
|
||||
|
||||
@JsExport
|
||||
var x2: C
|
||||
get() = C()
|
||||
set(value) { }
|
||||
|
||||
@JsExport
|
||||
class A(
|
||||
val x: C,
|
||||
y: C
|
||||
) {
|
||||
fun foo(x: C) = x
|
||||
|
||||
val x2: C = C()
|
||||
|
||||
var x3: C
|
||||
get() = C()
|
||||
set(value) { }
|
||||
}
|
||||
|
||||
@JsExport
|
||||
fun foo2() {
|
||||
}
|
||||
|
||||
@JsExport
|
||||
fun foo3(x: Unit) {
|
||||
}
|
||||
|
||||
@JsExport
|
||||
fun foo4(x: () -> Unit) {
|
||||
}
|
||||
|
||||
@JsExport
|
||||
fun foo5(x: (Unit) -> Unit) {
|
||||
}
|
||||
|
||||
@JsExport
|
||||
fun foo6(x: (A) -> A) {
|
||||
}
|
||||
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
|
||||
package foo
|
||||
|
||||
abstract class C
|
||||
interface I
|
||||
|
||||
@JsExport
|
||||
fun <T : C>foo() { }
|
||||
|
||||
@JsExport
|
||||
class A<T : C, S: I>
|
||||
|
||||
@JsExport
|
||||
interface I2<T> where T : C, T : I
|
||||
|
||||
@JsExport
|
||||
class B<T>(val a: T, val b: Comparable<T>) {
|
||||
val c: Comparable<T> = b
|
||||
}
|
||||
|
||||
@JsExport
|
||||
class D<T>(val a: T, val b: Array<T>)
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
// !DIAGNOSTICS: -INLINE_CLASS_DEPRECATED
|
||||
|
||||
package foo
|
||||
|
||||
@JsExport
|
||||
inline fun <reified T> inlineReifiedFun(x: Any) = x is T
|
||||
|
||||
@JsExport
|
||||
suspend fun suspendFun() { }
|
||||
|
||||
@JsExport
|
||||
val String.extensionProperty
|
||||
get() = this.length
|
||||
|
||||
@JsExport
|
||||
annotation class AnnotationClass
|
||||
|
||||
@JsExport
|
||||
interface SomeInterface
|
||||
|
||||
@JsExport
|
||||
external interface GoodInterface
|
||||
|
||||
@JsExport
|
||||
interface InterfaceWithCompanion {
|
||||
companion object {
|
||||
fun foo() = 42
|
||||
}
|
||||
}
|
||||
|
||||
@JsExport
|
||||
interface OuterInterface {
|
||||
class Nested
|
||||
}
|
||||
|
||||
@JsExport
|
||||
value class A(val a: Int)
|
||||
|
||||
@JsExport
|
||||
inline class B(val b: Int)
|
||||
|
||||
@JsExport
|
||||
inline value class C(val c: Int)
|
||||
|
||||
@JsExport
|
||||
value inline class D(val d: Int)
|
||||
compiler/testData/diagnostics/testsWithJsStdLib/export/wrongExportedDeclarationInExportedFile.fir.kt
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
// !OPT_IN: kotlin.js.ExperimentalJsExport
|
||||
// !RENDER_DIAGNOSTICS_MESSAGES
|
||||
|
||||
@file:JsExport
|
||||
|
||||
package foo
|
||||
|
||||
inline fun <reified T> inlineReifiedFun(x: Any) = x is T
|
||||
|
||||
suspend fun suspendFun() { }
|
||||
|
||||
val String.extensionProperty
|
||||
get() = this.length
|
||||
|
||||
annotation class AnnotationClass
|
||||
@@ -0,0 +1,10 @@
|
||||
fun interface Foo<T> {
|
||||
fun invoke(): T
|
||||
}
|
||||
|
||||
fun test() {
|
||||
Foo { }
|
||||
Foo<Unit> { }
|
||||
Foo<String> <!ARGUMENT_TYPE_MISMATCH!>{ }<!>
|
||||
Foo<String> { "" }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
abstract class A : () -> Unit
|
||||
|
||||
object B : (String, Int) -> Long {
|
||||
override fun invoke(a: String, B: Int) = 23L
|
||||
}
|
||||
|
||||
abstract class C : kotlin.Function1<Any, Int>
|
||||
|
||||
abstract class D : C()
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
class C<<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T>
|
||||
|
||||
val <<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T> T.v: T
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
val a = "1"
|
||||
|
||||
fun nonConst(): String = "1"
|
||||
|
||||
fun test() {
|
||||
val b = "b"
|
||||
|
||||
js(a)
|
||||
js((b))
|
||||
js(("c"))
|
||||
js(<!ARGUMENT_TYPE_MISMATCH!>3<!>)
|
||||
js(<!ARGUMENT_TYPE_MISMATCH!>3 + 2<!>)
|
||||
js(<!ARGUMENT_TYPE_MISMATCH!>1.0f<!>)
|
||||
js(<!ARGUMENT_TYPE_MISMATCH!>true<!>)
|
||||
js("$a")
|
||||
js("${1}")
|
||||
js("$b;")
|
||||
js("${b}bb")
|
||||
js(a + a)
|
||||
js("a" + "a")
|
||||
js("ccc")
|
||||
|
||||
js(nonConst())
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
fun Int.foo(x: Int) {
|
||||
js("this = x;")
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo(x: Any) {
|
||||
js("delete x.foo;")
|
||||
js("delete x['bar'];")
|
||||
js("delete x.baz();")
|
||||
js("delete this;")
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
val code = """
|
||||
var s = "hello"
|
||||
+ );
|
||||
"""
|
||||
|
||||
fun main(): Unit {
|
||||
js("var = 10;")
|
||||
|
||||
js("""var = 10;""")
|
||||
|
||||
js("""var
|
||||
= 777;
|
||||
""")
|
||||
|
||||
js("""
|
||||
var = 777;
|
||||
""")
|
||||
|
||||
js("var " + " = " + "10;")
|
||||
|
||||
val n = 10
|
||||
js("var = $n;")
|
||||
|
||||
js(code)
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
fun test() {
|
||||
js("")
|
||||
js(" ")
|
||||
js("""
|
||||
""")
|
||||
|
||||
val empty = ""
|
||||
js(empty)
|
||||
|
||||
val whitespace = " "
|
||||
js(whitespace)
|
||||
|
||||
val multiline = """
|
||||
"""
|
||||
js(multiline)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fun main(): Unit {
|
||||
js("var a = 08;")
|
||||
|
||||
js("""var a =
|
||||
|
||||
08;""")
|
||||
|
||||
val code = "var a = 08;"
|
||||
js(code)
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
import kotlin.Cloneable
|
||||
|
||||
fun cloneable(): Cloneable = intArrayOf(42)
|
||||
@@ -0,0 +1,80 @@
|
||||
// MODULE: lib
|
||||
// FILE: lib.kt
|
||||
|
||||
interface I {
|
||||
fun foo(): String
|
||||
}
|
||||
|
||||
abstract class A {
|
||||
abstract fun bar(): String
|
||||
}
|
||||
|
||||
abstract class G<T> {
|
||||
abstract fun baz(): T
|
||||
}
|
||||
|
||||
class C {
|
||||
private val propA = object : A() {
|
||||
override fun bar() = "propA.bar"
|
||||
|
||||
fun x() = "OK"
|
||||
}
|
||||
|
||||
private val propI = object : I {
|
||||
override fun foo() = "propI.foo"
|
||||
|
||||
fun x() = "OK"
|
||||
}
|
||||
|
||||
private val propAI = object : A(), I {
|
||||
override fun foo() = "propAI.foo"
|
||||
|
||||
override fun bar() = "propAI.bar"
|
||||
|
||||
fun x() = "OK"
|
||||
}
|
||||
|
||||
private val propG = object : G<String>() {
|
||||
override fun baz() = "propG.baz"
|
||||
|
||||
fun x() = "OK"
|
||||
}
|
||||
|
||||
private val propOI = object {
|
||||
inner class D {
|
||||
fun df() {}
|
||||
}
|
||||
fun d(): D = D()
|
||||
}.d()
|
||||
|
||||
private val propL = run {
|
||||
class L {
|
||||
fun l() = "propL.l"
|
||||
}
|
||||
L()
|
||||
}
|
||||
|
||||
private val propL2 = run {
|
||||
class L {
|
||||
inner class L1 {
|
||||
inner class L2 {
|
||||
fun l2() = "propL2.l2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
L().L1().L2()
|
||||
}
|
||||
}
|
||||
|
||||
// MODULE: main(lib)
|
||||
// FILE: main.kt
|
||||
fun test() {
|
||||
println(C().<!INVISIBLE_REFERENCE!>propA<!>.x())
|
||||
println(C().<!INVISIBLE_REFERENCE!>propI<!>.x())
|
||||
println(C().<!INVISIBLE_REFERENCE!>propAI<!>.x())
|
||||
println(C().<!INVISIBLE_REFERENCE!>propG<!>.x())
|
||||
println(C().<!INVISIBLE_REFERENCE!>propOI<!>.df())
|
||||
println(C().<!INVISIBLE_REFERENCE!>propL<!>.l())
|
||||
println(C().<!INVISIBLE_REFERENCE!>propL2<!>.l2())
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// MODULE: m1
|
||||
// FILE: a.kt
|
||||
package foo
|
||||
|
||||
import kotlin.js.*
|
||||
|
||||
@JsModule("A")
|
||||
external object A {
|
||||
fun f(): Int
|
||||
|
||||
val g: Int
|
||||
}
|
||||
|
||||
@JsNonModule
|
||||
external open class B {
|
||||
fun foo(): Int
|
||||
}
|
||||
|
||||
// MODULE: m2(m1)
|
||||
// MODULE_KIND: UMD
|
||||
// FILE: c.kt
|
||||
package bar
|
||||
|
||||
import foo.*
|
||||
|
||||
fun box() {
|
||||
A.f()+A.g
|
||||
B()
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
inline fun <T, reified K> bar() {}
|
||||
|
||||
fun foo() {
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!><Int>()
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
@file:JsModule("lib")
|
||||
|
||||
class A {
|
||||
class B
|
||||
|
||||
fun bar() {}
|
||||
}
|
||||
|
||||
fun foo() = "OK"
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// !DIAGNOSTICS: -NO_VALUE_FOR_PARAMETER, -CONSTANT_EXPECTED_TYPE_MISMATCH
|
||||
// This should not crash
|
||||
package foo
|
||||
|
||||
@JsModule
|
||||
external fun foo(x: Int): Int
|
||||
|
||||
@JsModule(<!ARGUMENT_TYPE_MISMATCH!>23<!>)
|
||||
external fun bar(x: Int): Int
|
||||
@@ -0,0 +1,7 @@
|
||||
package foo
|
||||
|
||||
@JsModule("bar")
|
||||
external var bar: Int = definedExternally
|
||||
|
||||
@JsNonModule
|
||||
external var baz: Int = definedExternally
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
@file:JsModule("foo")
|
||||
package foo
|
||||
|
||||
@JsModule("A")
|
||||
external class A {
|
||||
class Nested
|
||||
}
|
||||
|
||||
@JsModule("B")
|
||||
external object B
|
||||
|
||||
@JsModule("foo")
|
||||
external fun foo(): Int
|
||||
|
||||
@JsModule("bar")
|
||||
external val bar: Int
|
||||
|
||||
@JsNonModule
|
||||
external val baz: Int
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package foo
|
||||
|
||||
@JsModule("A")
|
||||
class A
|
||||
|
||||
@JsModule("B")
|
||||
object B
|
||||
|
||||
@JsModule("foo")
|
||||
fun foo() = 23
|
||||
|
||||
@JsModule("bar")
|
||||
val bar = 42
|
||||
|
||||
@JsNonModule
|
||||
val baz = 99
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
// MODULE: m1
|
||||
// FILE: a.kt
|
||||
package foo
|
||||
|
||||
import kotlin.js.*
|
||||
|
||||
@JsModule("A")
|
||||
external object A {
|
||||
fun f(): Int
|
||||
|
||||
val g: Int
|
||||
}
|
||||
|
||||
@JsModule("B")
|
||||
external open class B {
|
||||
fun foo(): Int
|
||||
|
||||
class Nested
|
||||
}
|
||||
|
||||
@JsModule("bar")
|
||||
external fun bar(): Unit
|
||||
|
||||
// MODULE: m2(m1)
|
||||
// FILE: b.kt
|
||||
// TODO: it's hard to test @JsNonModule on file from an external module
|
||||
@file:JsModule("foo")
|
||||
package foo
|
||||
|
||||
external fun baz(): Unit
|
||||
|
||||
// FILE: c.kt
|
||||
package bar
|
||||
|
||||
import foo.*
|
||||
|
||||
fun box() {
|
||||
A.f()+A.g
|
||||
B()
|
||||
bar()
|
||||
baz()
|
||||
|
||||
println(::bar.name)
|
||||
println(::baz.name)
|
||||
println(A::f.name)
|
||||
|
||||
B.Nested()
|
||||
|
||||
boo<B?>(null)
|
||||
boo(null as B?)
|
||||
boo<B.Nested?>(null)
|
||||
|
||||
println(B::class)
|
||||
println(B.Nested::class)
|
||||
}
|
||||
|
||||
external class DerivedB : B
|
||||
|
||||
inline fun <reified T> boo(x: T) {
|
||||
println("${T::class.simpleName}: $x")
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
// MODULE: m1
|
||||
// FILE: a.kt
|
||||
package foo
|
||||
|
||||
import kotlin.js.*
|
||||
|
||||
@JsNonModule
|
||||
external object A {
|
||||
fun f(): Int
|
||||
|
||||
val g: Int
|
||||
}
|
||||
|
||||
@JsNonModule
|
||||
external open class B {
|
||||
fun foo(): Int
|
||||
|
||||
class Nested
|
||||
}
|
||||
|
||||
@JsNonModule
|
||||
external fun bar(): Unit
|
||||
|
||||
// MODULE: m2(m1)
|
||||
// MODULE_KIND: AMD
|
||||
// TODO: it's hard to test @JsNonModule on file from an external module
|
||||
// FILE: c.kt
|
||||
package bar
|
||||
|
||||
import foo.*
|
||||
|
||||
fun box() {
|
||||
A.f()+A.g
|
||||
B()
|
||||
bar()
|
||||
B.Nested()
|
||||
|
||||
println(::bar.name)
|
||||
println(A::f.name)
|
||||
|
||||
boo<B?>(null)
|
||||
boo(null as B?)
|
||||
boo<B.Nested?>(null)
|
||||
|
||||
println(B::class)
|
||||
println(B.Nested::class)
|
||||
}
|
||||
|
||||
external class DerivedB : B
|
||||
|
||||
inline fun <reified T> boo(x: T) {
|
||||
println("${T::class.simpleName}: $x")
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
interface I {
|
||||
fun foo()
|
||||
}
|
||||
|
||||
interface J {
|
||||
@JsName("bar")
|
||||
fun foo()
|
||||
}
|
||||
|
||||
interface K : I, J {
|
||||
override fun foo()
|
||||
}
|
||||
|
||||
interface L : K {
|
||||
override fun foo()
|
||||
|
||||
fun bar()
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
class C {
|
||||
class prototype
|
||||
|
||||
class length
|
||||
|
||||
class `$metadata$`
|
||||
|
||||
fun constructor() {}
|
||||
}
|
||||
|
||||
class D {
|
||||
private class prototype
|
||||
|
||||
private class length
|
||||
|
||||
private class `$metadata$`
|
||||
|
||||
private fun constructor() {}
|
||||
}
|
||||
|
||||
class E {
|
||||
@JsName("prototype")
|
||||
class D
|
||||
|
||||
@JsName("constructor")
|
||||
fun f() {}
|
||||
}
|
||||
|
||||
class F {
|
||||
@JsName("A")
|
||||
class prototype
|
||||
|
||||
@JsName("B")
|
||||
class length
|
||||
|
||||
@JsName("f")
|
||||
fun constructor() {}
|
||||
}
|
||||
|
||||
class prototype
|
||||
|
||||
class length
|
||||
|
||||
fun constructor() {
|
||||
}
|
||||
|
||||
fun f() {
|
||||
class prototype
|
||||
class length
|
||||
|
||||
fun constructor() {}
|
||||
}
|
||||
|
||||
external interface Object {
|
||||
val constructor: Any?
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package foo
|
||||
|
||||
class A(val x: Int)
|
||||
|
||||
fun A() {}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
package foo
|
||||
|
||||
@JsName("B") class A(val x: Int)
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package foo
|
||||
|
||||
class A {
|
||||
fun bar() = 23
|
||||
|
||||
val bar = 23
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
interface A {
|
||||
@JsName("foo") fun f()
|
||||
}
|
||||
|
||||
interface B {
|
||||
@JsName("foo") fun g()
|
||||
}
|
||||
|
||||
class C : A, B {
|
||||
override fun f() {}
|
||||
|
||||
override fun g() {}
|
||||
}
|
||||
|
||||
abstract class D : A, B
|
||||
|
||||
open class E {
|
||||
open fun f() {}
|
||||
|
||||
open fun g() {}
|
||||
}
|
||||
|
||||
class F : E(), A, B
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: first.kt
|
||||
package foo
|
||||
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package foo
|
||||
|
||||
class A
|
||||
|
||||
fun A.get_bar() = 23
|
||||
|
||||
val A.bar: Int
|
||||
get() = 42
|
||||
@@ -0,0 +1,25 @@
|
||||
private fun ` .private `(): String = TODO("")
|
||||
|
||||
fun ` .public `(): String = TODO("")
|
||||
|
||||
@JsName(" __ ")
|
||||
fun foo(): String = TODO("")
|
||||
|
||||
@JsName(" ___ ")
|
||||
private fun bar(): String = TODO("")
|
||||
|
||||
@JsName("validName")
|
||||
private fun ` .private with @JsName `(): String = TODO("")
|
||||
|
||||
private class ` .private class ` {
|
||||
val ` .field. ` = ""
|
||||
}
|
||||
|
||||
val x: Int
|
||||
@JsName(".")
|
||||
get() = TODO("")
|
||||
|
||||
fun box(x: dynamic) {
|
||||
x.`foo-bar`()
|
||||
x.`ba-z`
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// SKIP_TXT
|
||||
// IGNORE_BACKEND: JS
|
||||
// !LANGUAGE: +JsAllowInvalidCharsIdentifiersEscaping
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package `//`
|
||||
|
||||
class A
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package foo
|
||||
|
||||
open class Super {
|
||||
fun foo() = 23
|
||||
}
|
||||
|
||||
class Sub : Super() {
|
||||
@JsName("foo") fun bar() = 42
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package foo
|
||||
|
||||
@JsName("x") fun foo(x: Int) = x
|
||||
|
||||
@JsName("x") fun bar() = 42
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package foo
|
||||
|
||||
@JsName("bar") fun foo(x: Int) = x
|
||||
|
||||
fun bar() = 42
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package foo
|
||||
|
||||
class A {
|
||||
var x: Int
|
||||
@JsName("get_x") get() = 23
|
||||
set(value) {}
|
||||
|
||||
var y: Int
|
||||
get() = 23
|
||||
@JsName("set_y") set(value) {}
|
||||
|
||||
var z: Int
|
||||
@JsName("get_z") get() = 23
|
||||
@JsName("set_z") set(value) {}
|
||||
}
|
||||
|
||||
var xx: Int
|
||||
@JsName("get_xx") get() = 23
|
||||
set(value) {}
|
||||
|
||||
var A.ext: Int
|
||||
@JsName("get_ext") get() = 23
|
||||
set(value) {}
|
||||
@@ -0,0 +1,7 @@
|
||||
package foo
|
||||
|
||||
class A {
|
||||
var x: Int
|
||||
@JsName("xx") get() = 0
|
||||
@JsName("xx") set(value) {}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package foo
|
||||
|
||||
open class A {
|
||||
@JsName("foo_") open fun foo() = 23
|
||||
|
||||
@JsName("bar_") open val bar = 123
|
||||
|
||||
open val baz: Int
|
||||
@JsName("getBaz_") get() = 55
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
@JsName("foo__") override fun foo() = 42
|
||||
|
||||
@JsName("bar__") override val bar = 142
|
||||
|
||||
override val baz: Int
|
||||
@JsName("getBaz__") get() = 155
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package foo
|
||||
|
||||
class A {
|
||||
@JsName("x_") val x: Int
|
||||
@JsName("get_x") get() = 23
|
||||
|
||||
@JsName("y_") val y = 0
|
||||
|
||||
@JsName("m_") var m: Int
|
||||
@JsName("get_m") get() = 23
|
||||
@JsName("set_m") set(value) {}
|
||||
}
|
||||
|
||||
@JsName("xx_") val xx: Int
|
||||
@JsName("get_xx") get() = 23
|
||||
|
||||
@JsName("yy_") val yy = 0
|
||||
|
||||
@JsName("mm_") var mm: Int
|
||||
@JsName("get_mm") get() = 23
|
||||
@JsName("set_mm") set(value) {}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
class A @JsName("B") constructor()
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
package foo
|
||||
|
||||
class A
|
||||
|
||||
@JsName("xx") val A.x: Int
|
||||
get() = 23
|
||||
|
||||
@property:JsName("yy") val A.y: Int
|
||||
get() = 42
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
class A {
|
||||
@property:JsName("x_") @get:JsName("getX_") val x: Int = 0
|
||||
|
||||
@get:JsName("getY_") var y: Int = 0
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user