Consider callable reference's LHS when resolving RHS

Previous resolution sequence (static scope, nested classes scope, receiver) and
a check against type parameters only made sense when there's a type, not an
expression, on the LHS of a callable reference. Also TransientReceiver is
incorrect in such case because private-to-this visibility check only works for
ExpressionReceiver values
This commit is contained in:
Alexander Udalov
2016-06-15 19:24:46 +03:00
parent 6562a2db19
commit 456ba79793
11 changed files with 180 additions and 25 deletions
@@ -0,0 +1,24 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
class Foo<out T>(name: T) {
private var prop: T = name
private set
fun testProp() {
val ok1 = this::prop
val ok2 = this@Foo::prop
val ok3 = object { val y: Any = this@Foo::prop }
val fail1 = Foo(prop)::<!INVISIBLE_MEMBER!>prop<!>
}
fun testFunc() {
val ok1 = this::func
val ok2 = this@Foo::func
val ok3 = object { val y: Any = this@Foo::func }
val fail1 = Foo(prop)::<!INVISIBLE_MEMBER!>func<!>
}
private fun func(t: T): T = t
}