// LANGUAGE: +NestedClassesInAnnotations
// WITH_STDLIB

import kotlin.test.*

interface Test {
    companion object {
        val x = "O"

        val y1 = Test.x

        val y2 = 42.let { x }

        val y3: String
        init {
            fun localFun() = x
            y3 = localFun()
        }

        fun method() = x
        val y4 = method()

        val anonObject = object {
            override fun toString() = x
        }
        val y5 = anonObject.toString()

        init {
            assertEquals(x, y1)
            assertEquals(x, y2)
            assertEquals(x, y3)
            assertEquals(x, y4)
            assertEquals(x, y5)
        }
    }
}

annotation class Anno {
    companion object {
        val x = "K"

        val y1 = Anno.x

        val y2 = 42.let { x }

        val y3: String
        init {
            fun localFun() = x
            y3 = localFun()
        }

        fun method() = x
        val y4 = method()

        val anonObject = object {
            override fun toString() = x
        }
        val y5 = anonObject.toString()

        init {
            assertEquals(x, y1)
            assertEquals(x, y2)
            assertEquals(x, y3)
            assertEquals(x, y4)
            assertEquals(x, y5)
        }
    }
}

fun box() = Test.x + Anno.x
