blob: e33c3c36680538777701035ed45243585705c245 [file] [log] [blame]
// WITH_REFLECT
// FIR_DUMP
import kotlin.reflect.*
interface Foo<T : Any> {
var a: T
val b: Array<T>
fun accept(arg: T)
}
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class FooImpl<!><T : Any> : Foo<T>
fun bar(p: KMutableProperty0<Int>) {
p.set(100)
}
fun <T : Any> myBuilder(block: Foo<T>.() -> Unit): Foo<T> = FooImpl<T>().apply(block)
fun <T : Any> Foo<T>.change(block: Foo<T>.() -> Unit): Foo<T> {
this.block()
return this
}
fun main(arg: Any, condition: Boolean) {
val value = myBuilder {
b[0] = 123
a = 45
<!STUB_TYPE_IN_RECEIVER_CAUSES_AMBIGUITY!>a<!><!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, OVERLOAD_RESOLUTION_AMBIGUITY, OVERLOAD_RESOLUTION_AMBIGUITY_BECAUSE_OF_STUB_TYPES!>++<!>
bar(::a)
if (<!USELESS_IS_CHECK, USELESS_IS_CHECK!>a is Int<!>) {
a = 67
<!STUB_TYPE_IN_RECEIVER_CAUSES_AMBIGUITY!>a<!><!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, OVERLOAD_RESOLUTION_AMBIGUITY, OVERLOAD_RESOLUTION_AMBIGUITY_BECAUSE_OF_STUB_TYPES!>--<!>
bar(::a)
}
when (condition) {
true -> a = 87
false -> a = 65
}
val x by <!DELEGATE_SPECIAL_FUNCTION_AMBIGUITY!>a<!>
change {
a = 99
}
}
val value2 = myBuilder {
accept("")
a = <!TYPE_MISMATCH!>45<!>
when (condition) {
true -> a = <!TYPE_MISMATCH!>87<!>
false -> a = <!TYPE_MISMATCH!>65<!>
}
change {
a = <!TYPE_MISMATCH!>99<!>
}
if (<!USELESS_IS_CHECK, USELESS_IS_CHECK!>a is Int<!>) {
a = <!TYPE_MISMATCH!>67<!>
}
}
// See KT-54664
val value3 = myBuilder {
accept(<!TYPE_MISMATCH!>""<!>)
a = 45
bar(<!TYPE_MISMATCH!>::a<!>)
}
fun baz(t: Int) {}
val value4 = myBuilder {
accept("")
a = 45
b[0] = 123
baz(<!TYPE_MISMATCH, TYPE_MISMATCH!>a<!>)
}
}