Support bound references to objects and companion objects

Tweak member extension detection a little bit to prohibit extensions imported
from objects (they don't have one of the receiver parameters)
This commit is contained in:
Alexander Udalov
2016-05-30 12:34:43 +03:00
parent d90b40c661
commit 04c190231a
12 changed files with 167 additions and 58 deletions
@@ -0,0 +1,39 @@
// !CHECK_TYPE
// !DIAGNOSTICS: -UNUSED_EXPRESSION
package test
class C {
companion object {
fun foo(): String = "companion"
fun bar() {}
}
fun foo(): Int = 0
}
fun test() {
val r1 = C::foo
checkSubtype<(C) -> Int>(r1)
val r2 = test.C::foo
checkSubtype<(C) -> Int>(r2)
val r3 = C.Companion::foo
checkSubtype<() -> String>(r3)
val r4 = test.C.Companion::foo
checkSubtype<() -> String>(r4)
val r5 = (C)::foo
checkSubtype<() -> String>(r5)
val r6 = (test.C)::foo
checkSubtype<() -> String>(r6)
val c = C.Companion
val r7 = c::foo
checkSubtype<() -> String>(r7)
C::<!UNRESOLVED_REFERENCE!>bar<!>
}