be5850112a
^KT-56723 Fixed
92 lines
1.7 KiB
Kotlin
Vendored
92 lines
1.7 KiB
Kotlin
Vendored
import kotlin.reflect.KProperty
|
|
|
|
fun foo(f: () -> Unit) {
|
|
f()
|
|
}
|
|
|
|
class Wrapper(var s: String)
|
|
|
|
fun bar(w: Wrapper?) {
|
|
// K1: type is () -> Unit, K2: type is () -> Unit?
|
|
val lambda = {
|
|
w?.s = "X"
|
|
}
|
|
// K1: Ok, K2: ARGUMENT_TYPE_MISMATCH
|
|
foo(lambda)
|
|
}
|
|
|
|
class Wrapper2(val w: Wrapper?)
|
|
|
|
fun baz(w2: Wrapper2?) {
|
|
val lambda = {
|
|
w2?.w?.s = "X"
|
|
}
|
|
foo(lambda)
|
|
}
|
|
|
|
object Indexible {
|
|
operator fun get(index: Int) = "$index"
|
|
operator fun set(index: Int, value: String) {}
|
|
}
|
|
class IndexibleRef(val ind: Indexible)
|
|
class IndexibleRefRef(val ref: IndexibleRef?)
|
|
|
|
fun ban(refRef: IndexibleRefRef?, ref: IndexibleRef?) {
|
|
val lambda = {
|
|
ref?.ind[1] = "X"
|
|
}
|
|
foo(lambda)
|
|
|
|
val lambda2 = {
|
|
refRef?.ref?.ind[1] = "X"
|
|
}
|
|
foo(lambda2)
|
|
|
|
val lambda3 = {
|
|
ref?.ind?.set(1, "X")
|
|
}
|
|
foo(<!ARGUMENT_TYPE_MISMATCH!>lambda3<!>)
|
|
|
|
val lambda4 = {
|
|
refRef?.ref?.ind?.set(1, "X")
|
|
}
|
|
foo(<!ARGUMENT_TYPE_MISMATCH!>lambda4<!>)
|
|
}
|
|
|
|
object PlusAssignable {
|
|
operator fun plusAssign(index: Int) {}
|
|
}
|
|
|
|
object Indexible2 {
|
|
operator fun get(index: Int) = PlusAssignable
|
|
operator fun set(index: Int, value: String) {}
|
|
}
|
|
|
|
class Indexible2Ref(val ind: Indexible2)
|
|
|
|
fun bam(ref: Indexible2Ref?) {
|
|
val lambda = {
|
|
ref?.ind[1] += 1
|
|
}
|
|
foo(lambda)
|
|
|
|
val lambd2 = {
|
|
ref?.ind?.get(1)?.plusAssign(1)
|
|
}
|
|
foo(lambda)
|
|
}
|
|
|
|
class DelegatedHolder {
|
|
var delegated by object {
|
|
operator fun getValue(thisRef: Any?, desc: KProperty<*>) = "test"
|
|
operator fun setValue(thisRef: Any?, desc: KProperty<*>, value: String) {}
|
|
}
|
|
}
|
|
|
|
fun bap(holder: DelegatedHolder?) {
|
|
val lambda = {
|
|
holder?.delegated = "Y"
|
|
}
|
|
foo(lambda)
|
|
}
|