A.coolExt(block: context(A) () -> R): R = TODO()
fun <R> X.straightforwardExt(block: context(X) () -> R): R = TODO()
fun <A : X, R> A.goodExt(block: A.() -> R): R = TODO()
context(X)
fun doSomeWork(): Unit = TODO()
fun someUselessFunction(monoid: X) {
monoid.coolExt { doSomeWork() } // Compiler error
monoid.straightforwardExt { doSomeWork() } // OK
monoid.goodExt { doSomeWork() } // OK
}
В теле someUselessFunction первая строка не компилируется с ошибкой
No required context receiver found: Cxt { context(X) public fun doSomeWork(): kotlin.Unit defined in root package in file test.kt[SimpleFunctionDescriptorImpl@b343066] }
а две последующих компилируются нормально. Казалось бы, resolution algorithm должен работать примерно одинаково для всех трёх функций-расширений. Я чего-то не понимаю или это, действительно, баг компилятора?
По-моему, первый и третий пример должны работать идентично, потому я бы пошёл с этим прямиком на ютрек.
Ага, понял. Спасибо. UPD. KT-51243.
Обсуждают сегодня