blob: 94e77427aa6298606daee966b86fda6c1f25e205 [file] [log] [blame]
@CompileTimeCalculation
open class A
class B @CompileTimeCalculation constructor() {
@CompileTimeCalculation
override fun toString(): String {
return super.toString()
}
}
class C
class D : A()
@CompileTimeCalculation
fun checkToStringCorrectness(value: Any, startStr: String): Boolean {
val string = value.toString()
return string.subSequence(0, startStr.length) == startStr && string.get(startStr.length) == '@' && string.length <= startStr.length + 9
}
@CompileTimeCalculation
fun getTheSameValue(a: Any): Any = a
@CompileTimeCalculation
fun theSameObjectToString(value: Any): Boolean {
return value.toString() == getTheSameValue(value).toString()
}
const val aString = <!EVALUATED: `true`!>checkToStringCorrectness(A(), "A")<!>
const val bString = <!EVALUATED: `true`!>checkToStringCorrectness(B(), "B")<!>
val cString = C().toString() // must not be calculated
val dString = D().toString() // must not be calculated
const val arrayString = <!EVALUATED: `true`!>checkToStringCorrectness(arrayOf(A(), B()).toString(), "[Ljava.lang.Object;")<!>
const val intArrayString = <!EVALUATED: `true`!>checkToStringCorrectness(intArrayOf(1, 2, 3).toString(), "[I")<!>
const val checkA = <!EVALUATED: `true`!>theSameObjectToString(A())<!>
const val checkStringBuilder1 = <!EVALUATED: `true`!>theSameObjectToString(StringBuilder())<!>
const val checkStringBuilder2 = <!EVALUATED: `true`!>theSameObjectToString(StringBuilder("Some Builder"))<!>