| // RUN_PIPELINE_TILL: FRONTEND |
| // LANGUAGE: +ContextParameters |
| |
| |
| open class A |
| class B: A() |
| |
| class C |
| |
| |
| // 'contextOf' |
| |
| // green code |
| context(a: A) fun usage1() { contextOf<A>() } |
| context(a: A) fun usage2(): A = contextOf<A>() |
| context(a: A) fun usage3() = contextOf<A>() |
| |
| // green code |
| fun A.usage4() { contextOf<A>() } |
| fun A.usage5(): A = contextOf<A>() |
| fun A.usage6() = contextOf<A>() |
| |
| // green code |
| context(b: B) fun usage7() { contextOf<A>() } |
| context(b: B) fun usage8(): A = contextOf<A>() |
| context(b: B) fun usage9(): A = contextOf<B>() |
| |
| // red code (ambiguous context argument) |
| context(a: A) fun A.usage10() { <!AMBIGUOUS_CONTEXT_ARGUMENT("context: A")!>contextOf<!><A>() } |
| context(a: A) fun A.usage11(): A = <!AMBIGUOUS_CONTEXT_ARGUMENT("context: A")!>contextOf<!><A>() |
| context(a: A, b: B) fun usage12() { <!AMBIGUOUS_CONTEXT_ARGUMENT("context: A")!>contextOf<!><A>() } |
| context(a: A, b: B) fun usage13(): A = <!AMBIGUOUS_CONTEXT_ARGUMENT("context: A")!>contextOf<!><A>() |
| |
| // green code |
| context(a: A, c: C) fun usage14() { contextOf<A>() } |
| context(a: A, c: C) fun usage15(): A = contextOf<A>() |
| |
| // red code (lack of type inference via context argument) |
| context(a: A) fun usage16() { <!CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() } |
| context(a: A) fun usage17() = <!CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() |
| fun A.usage18() { <!CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() } |
| fun A.usage19() = <!CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() |
| context(a: A) fun A.usage20() { <!AMBIGUOUS_CONTEXT_ARGUMENT, CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() } |
| context(a: A, b: B) fun usage21() { <!AMBIGUOUS_CONTEXT_ARGUMENT, CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() } |
| context(a: A, c: C) fun usage22() { <!AMBIGUOUS_CONTEXT_ARGUMENT, CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() } |
| |
| // red code (lack of type inference via return type) |
| context(a: A) fun usage23(): A = <!CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() |
| fun A.usage24(): A = <!CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() |
| context(b: B) fun usage25(): A = <!CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() |
| context(a: A) fun A.usage26(): A = <!AMBIGUOUS_CONTEXT_ARGUMENT, CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() |
| context(a: A, b: B) fun usage27(): A = <!AMBIGUOUS_CONTEXT_ARGUMENT, CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() |
| context(a: A, c: C) fun usage28(): A = <!AMBIGUOUS_CONTEXT_ARGUMENT, CANNOT_INFER_PARAMETER_TYPE!>contextOf<!>() |
| |
| |
| // 'context' w/ 1 context parameter |
| |
| // green code |
| fun context1() { context(B()) { usage1() } } |
| fun context2(): A = context(B()) { usage2() } |
| fun context3(): A = context(B()) { usage3() } |
| |
| // red code (context parameters cannot be used as extension receivers) |
| fun context4() { <!CANNOT_INFER_PARAMETER_TYPE!>context<!>(B()) { <!UNRESOLVED_REFERENCE!>usage4<!>() } } |
| fun context5(): A = context(B()) { <!UNRESOLVED_REFERENCE!>usage5<!>() } |
| fun context6(): A = context(B()) { <!UNRESOLVED_REFERENCE!>usage6<!>() } |
| |
| // green code |
| fun context7() { context(B()) { usage7() } } |
| fun context8(): A = context(B()) { usage8() } |
| fun context9(): A = context(B()) { usage9() } |
| |
| // green code |
| fun context10v1() { context(B()) { with(B()) { usage10() } } } |
| fun context11v1(): A = context(B()) { with(B()) { usage11() } } |
| |
| // red code (context parameters cannot be used as extension receivers) |
| fun context10v2() { <!CANNOT_INFER_PARAMETER_TYPE!>context<!>(B()) { <!UNRESOLVED_REFERENCE!>usage10<!>() } } |
| fun context11v2(): A = context(B()) { <!UNRESOLVED_REFERENCE!>usage11<!>() } |
| |
| // green code |
| fun context12() { context(B()) { usage12() } } |
| fun context13(): A = context(B()) { usage13() } |
| |
| // green code |
| fun context14v1() { context(B()) { context(C()) { usage14() } } } |
| fun context15v1(): A = context(B()) { context(C()) { usage15() } } |
| |
| // red code (no context argument) |
| fun context14v2() { context(B()) { <!NO_CONTEXT_ARGUMENT("c: C")!>usage14<!>() } } |
| fun context15v2(): A = context(B()) { <!NO_CONTEXT_ARGUMENT("c: C")!>usage15<!>() } |
| |
| /* GENERATED_FIR_TAGS: classDeclaration, funWithExtensionReceiver, functionDeclaration, functionDeclarationWithContext, |
| lambdaLiteral */ |