KT-45375 Lightweight lambdas; KT-52817 introduce @JvmSerializableLambda

This commit is contained in:
Pavel Mikhailovskii
2022-07-18 09:20:55 +02:00
parent 1557f919f5
commit 846537b367
33 changed files with 243 additions and 15 deletions
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// IGNORE_BACKEND: WASM
// WASM_MUTE_REASON: IGNORED_IN_JS
// IGNORE_BACKEND: JS_IR
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// IGNORE_BACKEND: WASM
// WASM_MUTE_REASON: IGNORED_IN_JS
// IGNORE_BACKEND: JS_IR
@@ -0,0 +1,13 @@
// LANGUAGE: +LightweightLambdas
// TARGET_BACKEND: JVM_IR
// JVM_TARGET: 1.8
// FULL_JDK
// WITH_STDLIB
import kotlin.test.assertTrue
fun box(): String {
assertTrue((@kotlin.jvm.JvmSerializableLambda {}) is java.io.Serializable)
return "OK"
}
@@ -0,0 +1,21 @@
// LANGUAGE: +LightweightLambdas
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM_IR
// JVM_TARGET: 1.8
// WITH_REFLECT
import kotlin.reflect.jvm.reflect
import kotlin.test.*
import kotlin.jvm.JvmSerializableLambda
fun box(): String {
assertNull({}.reflect())
assertNull((fun () {}).reflect())
assertNull((fun Any.() {}).reflect())
assertNotNull((@JvmSerializableLambda {}).reflect())
assertNotNull((@JvmSerializableLambda fun () {}).reflect())
assertNotNull((@JvmSerializableLambda fun Any.() {}).reflect())
return "OK"
}
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -1,3 +1,4 @@
// LAMBDAS: CLASS
// !OPT_IN: kotlin.reflect.jvm.ExperimentalReflectionOnLambdas
// TARGET_BACKEND: JVM
// WITH_REFLECT
@@ -0,0 +1,17 @@
// LAMBDAS: INDY
// FIR_IDENTICAL
// WITH_STDLIB
import kotlin.jvm.JvmSerializableLambda
fun foo() = fun () {}
val good1 = @JvmSerializableLambda {}
val good2 = @JvmSerializableLambda fun () {}
val good3 = @JvmSerializableLambda fun Any.() {}
val good4 = listOf(@JvmSerializableLambda {})[0]
val bad1 = <!WRONG_ANNOTATION_TARGET!>@JvmSerializableLambda<!> 1
val bad2 = <!WRONG_ANNOTATION_TARGET!>@JvmSerializableLambda<!> object {}
val bad3 = <!WRONG_ANNOTATION_TARGET!>@JvmSerializableLambda<!> ::foo
val bad4 = listOf(<!WRONG_ANNOTATION_TARGET!>@JvmSerializableLambda<!> 1)[0]
@@ -0,0 +1,11 @@
package
public val bad1: kotlin.Int
public val bad2: kotlin.Any
public val bad3: kotlin.reflect.KFunction0<() -> kotlin.Unit>
public val bad4: kotlin.Int
public val good1: () -> kotlin.Unit
public val good2: () -> kotlin.Unit
public val good3: kotlin.Any.() -> kotlin.Unit
public val good4: () -> kotlin.Unit
public fun foo(): () -> kotlin.Unit