@CompileTimeCalculation data class Person(val name: String, val phone: Int) @CompileTimeCalculation fun Person.getAsString(): String { val (name, phone) = this return "Person name is $name and his phone is $phone" } const val a1 = Person("John", 123456).name const val a2 = Person("John", 123456).component1() const val a3 = Person("John", 123456).phone const val a4 = Person("John", 123456).component2() const val b1 = Person("John", 789).copy("Adam").toString() const val b2 = Person("John", 789).copy("Adam", 123).toString() const val c = Person("John", 123456).equals(Person("John", 123456)) const val d = Person("John", 123456).getAsString() @CompileTimeCalculation data class WithArray(val array: Array<*>?, val intArray: IntArray?) const val e1 = WithArray(arrayOf(1, 2.0), intArrayOf(1, 2, 3)).toString() const val e2 = WithArray(null, intArrayOf(1, 2, 3)).toString() const val e3 = WithArray(arrayOf("1", false), null).toString() const val e4 = WithArray(null, null).toString()