FE KT-47939 callable references to functional interface constructors

Allow callable references to Kotlin 'fun interface' constructors.
Prohibit callable references to Java SAM interface constructors.
This commit is contained in:
Dmitry Petrov
2021-11-29 15:10:14 +03:00
committed by TeamCityServer
parent bfb6e73728
commit 1fd0dec5e7
26 changed files with 188 additions and 43 deletions
@@ -0,0 +1,10 @@
// FIR_IDENTICAL
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference +ProhibitJavaSamInterfaceConstructorReference
fun interface Foo {
fun run()
}
val x = ::Foo
val y = Foo { }
val z = ::<!JAVA_SAM_INTERFACE_CONSTRUCTOR_REFERENCE!>Runnable<!>
@@ -1,3 +1,6 @@
// FIR_IDENTICAL
// !LANGUAGE: -AllowKotlinFunInterfaceConstructorReference -ProhibitJavaSamInterfaceConstructorReference
fun interface Foo {
fun run()
}
@@ -0,0 +1,12 @@
package
public val x: kotlin.reflect.KFunction1<() -> kotlin.Unit, Foo>
public val y: Foo
public val z: kotlin.reflect.KFunction1<() -> kotlin.Unit, java.lang.Runnable>
public fun interface Foo {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun run(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,7 +0,0 @@
fun interface Foo {
fun run()
}
val x = ::<!FUN_INTERFACE_CONSTRUCTOR_REFERENCE!>Foo<!>
val y = Foo { }
val z = ::<!FUN_INTERFACE_CONSTRUCTOR_REFERENCE!>Runnable<!>