// RUN_PIPELINE_TILL: FRONTEND
// WITH_NEW_INFERENCE
// SKIP_TXT

class MyException : Exception() {
    val myField = "field"

    fun myFun() {}
}

fun test1() {
    val e = "something"
    try {}
    catch (e: Exception) {
        e.message
        e.<!UNRESOLVED_REFERENCE!>length<!>
    }
}

fun test2() {
    try {}
    catch (e: Exception) {
        val <!NAME_SHADOWING!>e<!> = "something"
        e.<!UNRESOLVED_REFERENCE!>message<!>
        e.length
    }
}

fun test3() {
    try {}
    catch (e: MyException) {
        e.myField
    }
}

fun test4() {
    try {}
    catch (e: Exception) {
        val <!REDECLARATION!>a<!> = 42
        val <!NAME_SHADOWING, REDECLARATION!>a<!> = "foo"
    }
}

fun test5() {
    try {}
    catch (e: Exception) {
        val a: Int = 42
        try {}
        catch (e: MyException) {
            e.myFun()
            val <!NAME_SHADOWING!>a<!>: String = ""
            a.length
        }
    }
}

/* GENERATED_FIR_TAGS: classDeclaration, functionDeclaration, integerLiteral, localProperty, nullableType,
propertyDeclaration, stringLiteral, tryExpression */
