blob: e7c8e433d395b1a3cbe35d5b66983e1838f27c33 [file]
// RUN_PIPELINE_TILL: FRONTEND
// LANGUAGE: +ContextParameters
// LANGUAGE_FEATURE_TOGGLED: CallableReferencesToContextual
context(_ : String) fun f1() {}
context(_ : String) fun f2(i: Int) {}
context(_ : String) fun Int.f3() {}
context(_ : String) val p1 get() = Unit
context(_ : String) val Int.p3 get() = Unit
fun testContextualFunctionType() {
accept<context(String) () -> Unit>(::<!NO_CONTEXT_ARGUMENT!>f1<!>)
accept<context(String) (Int) -> Unit>(::<!NO_CONTEXT_ARGUMENT!>f2<!>)
accept<context(String) Int.() -> Unit>(Int::<!NO_CONTEXT_ARGUMENT!>f3<!>)
accept<context(String) () -> Unit>(::<!NO_CONTEXT_ARGUMENT!>p1<!>)
accept<context(String) Int.() -> Unit>(Int::<!NO_CONTEXT_ARGUMENT!>p3<!>)
}
context(_: String)
fun testContextualFunctionTypeWithContext() {
accept<context(String) () -> Unit>(::<!INAPPLICABLE_CANDIDATE!>f1<!>)
accept<context(String) (Int) -> Unit>(::<!INAPPLICABLE_CANDIDATE!>f2<!>)
accept<context(String) Int.() -> Unit>(Int::<!INAPPLICABLE_CANDIDATE!>f3<!>)
accept<context(String) () -> Unit>(::<!INAPPLICABLE_CANDIDATE!>p1<!>)
accept<context(String) Int.() -> Unit>(Int::<!INAPPLICABLE_CANDIDATE!>p3<!>)
}
fun String.testReceiver() {
accept<Any>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f1<!>)
accept<Any>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f2<!>)
accept<Any>(Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f3<!>)
accept(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f1<!>)
accept(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f2<!>)
accept(Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f3<!>)
accept<Any>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p1<!>)
accept<Any>(Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p3<!>)
accept(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p1<!>)
accept(Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p3<!>)
val x1 = ::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f1<!>
val x2 = ::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f2<!>
val x3 = Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f3<!>
val x3Bound = 1::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f3<!>
accept<() -> Unit>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f1<!>)
accept<(Int) -> Unit>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f2<!>)
accept<Int.() -> Unit>(Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f3<!>)
accept<() -> Unit>(1::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f3<!>)
val y1 = ::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p1<!>
val y3 = Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p3<!>
val y3Bound = 1::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p3<!>
accept<() -> Unit>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p1<!>)
accept<Int.() -> Unit>(Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p3<!>)
accept<() -> Unit>(1::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p3<!>)
}
context(_: String)
fun testContextParameter() {
accept<() -> Unit>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f1<!>)
accept<(Int) -> Unit>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f2<!>)
accept<Int.() -> Unit>(Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f3<!>)
accept<() -> Unit>(1::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>f3<!>)
accept<() -> Unit>(::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p1<!>)
accept<Int.() -> Unit>(Int::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p3<!>)
accept<() -> Unit>(1::<!CALLABLE_REFERENCE_TO_CONTEXTUAL_DECLARATION!>p3<!>)
}
fun testMissingContext() {
accept<() -> Unit>(::<!NO_CONTEXT_ARGUMENT!>f1<!>)
accept<(Int) -> Unit>(::<!NO_CONTEXT_ARGUMENT!>f2<!>)
accept<Int.() -> Unit>(Int::<!NO_CONTEXT_ARGUMENT!>f3<!>)
accept<() -> Unit>(1::<!NO_CONTEXT_ARGUMENT!>f3<!>)
accept<() -> Unit>(::<!NO_CONTEXT_ARGUMENT!>p1<!>)
accept<Int.() -> Unit>(Int::<!NO_CONTEXT_ARGUMENT!>p3<!>)
accept<() -> Unit>(1::<!NO_CONTEXT_ARGUMENT!>p3<!>)
}
fun <T> accept(t: T) {}
/* GENERATED_FIR_TAGS: callableReference, funWithExtensionReceiver, functionDeclaration, functionDeclarationWithContext,
functionalType, integerLiteral, nullableType, typeParameter, typeWithContext, typeWithExtension */