// !LANGUAGE: -TypeInferenceOnGenericsForCallableReferences // !DIAGNOSTICS: -UNUSED_VARIABLE, -UNUSED_PARAMETER fun bar(s: T) {} fun complex(t: T, f: (T) -> Unit) {} fun simple(f: (T) -> Unit) {} fun test1() { complex(1, ::bar) simple(::bar) } // --- fun takeFun(f: (T) -> Unit) {} fun callFun(f: (T) -> R): R = TODO() fun foo(s: T) {} open class Wrapper(val value: T) fun > createWrapper(s: T): R = TODO() fun Wrapper.baz(transform: (T) -> Unit): T = TODO() fun test2() { takeFun(::foo) callFun>(::createWrapper) callFun>(::createWrapper) callFun>(::createWrapper) callFun>(::createWrapper).baz(::foo) } // --- fun test3() { val a1: Array Double> = arrayOf(Double::plus, Double::minus) val a2: Array Double> = arrayOf(Double::plus, Double::minus) } // --- class A1 { fun a1(t: T): Unit {} fun test1(): (String) -> Unit = A1()::a1 } class A2 { fun a2(key: K): V = TODO() fun test1(): (String) -> Unit = A2()::a2 fun test2(): (T3) -> T3 = A2()::a2 } // --- fun foo1(x: Int?) {} fun foo1(y: String?) {} fun foo1(z: Boolean) {} fun baz1(element: (T) -> Unit): T? = null fun test4() { val a1: Int? = baz1(::foo1) val a2: String? = baz1(::foo1) }