40 lines
1.4 KiB
Kotlin
Vendored
40 lines
1.4 KiB
Kotlin
Vendored
@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"))<!>
|