| // LANGUAGE: +ContextParameters | |
| class Bar { | |
| context(a: Int) | |
| operator fun invoke(): String { | |
| return "context(Int) Bar.invoke " | |
| } | |
| } | |
| context(a: String) | |
| operator fun Bar.invoke(): String { | |
| return "context(String) Bar.invoke " | |
| } | |
| class Foo { | |
| val foo = Bar() | |
| fun test(): String { | |
| fun foo(): String { | |
| return "local foo " | |
| } | |
| return with("") { foo() } + //resolves to local foo | |
| with(1) { foo() } //resolves to local foo | |
| } | |
| fun test2(): String { | |
| fun String.foo(): String { | |
| return "local foo " | |
| } | |
| return with("") { foo() } + //resolves to local foo | |
| with(1) { foo() } //resolves to context(Int) Bar.invoke | |
| } | |
| fun test3(): String { | |
| context(a: String) fun foo(): String { | |
| return "local foo " | |
| } | |
| return with("") { foo() } + //resolves to local foo | |
| with(1) { foo() } //resolves to context(Int) Bar.invoke | |
| } | |
| fun test4(): String { | |
| return with("") { foo() } //resolves to context(String) Bar.invoke | |
| } | |
| } | |
| fun box(): String { | |
| var result = "OK" | |
| if (Foo().test() != "local foo local foo ") result = "not OK" | |
| if (Foo().test2() != "local foo context(Int) Bar.invoke ") result = "not OK" | |
| if (Foo().test3() != "local foo context(Int) Bar.invoke ") result = "not OK" | |
| if (Foo().test4() != "context(String) Bar.invoke ") result = "not OK" | |
| return result | |
| } |