Support for new double colon expressions in type checker
Despite the fact that the LHS of a double colon expression is now KtExpression instead of KtUserType, we must still consider it a type for callable references to work. Extract and reuse relevant parts of QualifiedExpressionResolver and TypeResolver to support this behavior
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
// MODULE: m1
|
||||
// FILE: 1.kt
|
||||
|
||||
package a
|
||||
|
||||
class b {
|
||||
class c
|
||||
}
|
||||
|
||||
// MODULE: m2
|
||||
// FILE: 2.kt
|
||||
|
||||
package a.b
|
||||
|
||||
class c {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
// MODULE: m3(m1, m2)
|
||||
// FILE: test.kt
|
||||
|
||||
package test
|
||||
|
||||
fun test() = a.b.c::foo
|
||||
@@ -0,0 +1,61 @@
|
||||
// -- Module: <m1> --
|
||||
package
|
||||
|
||||
package a {
|
||||
|
||||
public final class b {
|
||||
public constructor b()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public final class c {
|
||||
public constructor c()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// -- Module: <m2> --
|
||||
package
|
||||
|
||||
package a {
|
||||
|
||||
package a.b {
|
||||
|
||||
public final class c {
|
||||
public constructor c()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// -- Module: <m3> --
|
||||
package
|
||||
|
||||
package a {
|
||||
|
||||
public final class b {
|
||||
// -- Module: <m1> --
|
||||
}
|
||||
|
||||
package a.b {
|
||||
|
||||
public final class c {
|
||||
// -- Module: <m2> --
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
package test {
|
||||
public fun test(): kotlin.reflect.KFunction1<a.b.c, kotlin.Unit>
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION
|
||||
// FILE: simpleName.kt
|
||||
|
||||
package foo
|
||||
|
||||
fun test() {
|
||||
<!UNRESOLVED_REFERENCE!>foo<!>::test
|
||||
}
|
||||
|
||||
// FILE: qualifiedName.kt
|
||||
|
||||
package foo.bar
|
||||
|
||||
fun test() {
|
||||
foo.<!UNRESOLVED_REFERENCE!>bar<!>::test
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package
|
||||
|
||||
package foo {
|
||||
public fun test(): kotlin.Unit
|
||||
|
||||
package foo.bar {
|
||||
public fun test(): kotlin.Unit
|
||||
}
|
||||
}
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
package test
|
||||
|
||||
class Foo {
|
||||
fun <T> bar(x: Int) = x
|
||||
}
|
||||
|
||||
fun test() {
|
||||
Foo::<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!> <!SYNTAX!>< <!DEBUG_INFO_MISSING_UNRESOLVED!>Int<!> ><!> <!SYNTAX!>(2 <!DEBUG_INFO_MISSING_UNRESOLVED!>+<!> 2)<!>
|
||||
}
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
package
|
||||
|
||||
package test {
|
||||
public fun test(): kotlin.Unit
|
||||
|
||||
public final class Foo {
|
||||
public constructor Foo()
|
||||
public final fun </*0*/ T> bar(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// !CHECK_TYPE
|
||||
|
||||
class Foo
|
||||
|
||||
fun Foo?.bar() {}
|
||||
|
||||
fun test() {
|
||||
val r1 = Foo ?:: bar
|
||||
checkSubtype<(Foo?) -> Unit>(r1)
|
||||
|
||||
val r2 = Foo ? :: bar
|
||||
checkSubtype<(Foo?) -> Unit>(r2)
|
||||
|
||||
val r3 = Foo ? ? :: bar
|
||||
checkSubtype<(Foo?) -> Unit>(r3)
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package
|
||||
|
||||
public fun test(): kotlin.Unit
|
||||
public fun Foo?.bar(): kotlin.Unit
|
||||
|
||||
public final class Foo {
|
||||
public constructor Foo()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user