| // RUN_PIPELINE_TILL: FRONTEND | |
| interface Algebra<T> { | |
| operator fun T.plus(other: T): T | |
| } | |
| interface A | |
| interface B | |
| fun <T> injectAlgebra() {} | |
| fun test_1(a1: A, a2: A, b1: B, b2: B) { | |
| a1 <!UNRESOLVED_REFERENCE!>+<!> a2 // error | |
| b1 <!UNRESOLVED_REFERENCE!>+<!> b2 // error | |
| injectAlgebra<A>() | |
| a1 + a2 // ok | |
| b1 <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>+<!> b2 // error | |
| injectAlgebra<B>() | |
| a1 + a2 // ok | |
| b1 + b2 // ok | |
| } | |
| fun test_2(a1: A, a2: A, cond: Boolean) { | |
| a1 <!UNRESOLVED_REFERENCE!>+<!> a2 // error | |
| if (cond) { | |
| injectAlgebra<A>() | |
| a1 + a2 // ok | |
| } | |
| a1 <!UNRESOLVED_REFERENCE!>+<!> a2 // error | |
| } | |
| /* GENERATED_FIR_TAGS: additiveExpression, funWithExtensionReceiver, functionDeclaration, ifExpression, | |
| interfaceDeclaration, nullableType, operator, typeParameter */ |