// RUN_PIPELINE_TILL: FRONTEND
// FIR_IDENTICAL
// CHECK_TYPE
class A {
    val x get() = 1
    val y get() = id(1)
    val y2 get() = id(id(2))
    val z get() = l("")
    val z2 get() = l(id(l("")))

    val <T> T.u get() = id(this)
}
fun <E> id(x: E) = x
fun <E> l(x: E): List<E> = null!!

fun foo(a: A) {
    a.x checkType { _<Int>() }
    a.y checkType { _<Int>() }
    a.y2 checkType { _<Int>() }
    a.z checkType { _<List<String>>() }
    a.z2 checkType { _<List<List<String>>>() }

    with(a) {
        1.u checkType { _<Int>() }
    }
}

/* GENERATED_FIR_TAGS: checkNotNullCall, classDeclaration, funWithExtensionReceiver, functionDeclaration, functionalType,
getter, infix, integerLiteral, lambdaLiteral, nullableType, propertyDeclaration, propertyWithExtensionReceiver,
stringLiteral, thisExpression, typeParameter, typeWithExtension */
