Forbid callable references to members and extensions with empty LHS

This syntax is reserved to be likely used in the future as a shorthand for
"this::foo" where the resulting expression doesn't take the receiver as a
parameter but has "this" already bound to it
This commit is contained in:
Alexander Udalov
2015-10-02 21:56:15 +03:00
parent f310d4c10e
commit 661f4efc68
48 changed files with 114 additions and 378 deletions
@@ -0,0 +1,40 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
val topLevelVal = 1
fun topLevelFun() = 2
val A.extensionVal: Int get() = 3
fun A.extensionFun(): Int = 4
class A {
val memberVal = 5
fun memberFun() = 6
val ok1 = ::topLevelVal
val ok2 = ::topLevelFun
fun fail1() {
::<!CALLABLE_REFERENCE_TO_MEMBER_OR_EXTENSION_WITH_EMPTY_LHS!>extensionVal<!>
::<!CALLABLE_REFERENCE_TO_MEMBER_OR_EXTENSION_WITH_EMPTY_LHS!>extensionFun<!>
}
fun fail2() {
::<!CALLABLE_REFERENCE_TO_MEMBER_OR_EXTENSION_WITH_EMPTY_LHS!>memberVal<!>
::<!CALLABLE_REFERENCE_TO_MEMBER_OR_EXTENSION_WITH_EMPTY_LHS!>memberFun<!>
}
}
val ok1 = ::topLevelVal
val ok2 = ::topLevelFun
fun A.fail1() {
::<!CALLABLE_REFERENCE_TO_MEMBER_OR_EXTENSION_WITH_EMPTY_LHS!>extensionVal<!>
::<!CALLABLE_REFERENCE_TO_MEMBER_OR_EXTENSION_WITH_EMPTY_LHS!>extensionFun<!>
}
fun A.fail2() {
::<!CALLABLE_REFERENCE_TO_MEMBER_OR_EXTENSION_WITH_EMPTY_LHS!>memberVal<!>
::<!CALLABLE_REFERENCE_TO_MEMBER_OR_EXTENSION_WITH_EMPTY_LHS!>memberFun<!>
}