blob: a9e613ebf6719a8a8f3b60b57fbbadfe7a219c44 [file] [log] [blame]
abstract class A @CompileTimeCalculation constructor() {
@CompileTimeCalculation
abstract fun getIntNum(): Int
}
open class B @CompileTimeCalculation constructor(@CompileTimeCalculation val b: Int) : A() {
@CompileTimeCalculation
override fun getIntNum(): Int {
return b
}
}
class C @CompileTimeCalculation constructor(@CompileTimeCalculation val c: Int) : B(c + 1) {
@CompileTimeCalculation
override fun getIntNum(): Int {
return c
}
}
@CompileTimeCalculation
fun getAClassImplementation(num: Int): A {
return B(num)
}
@CompileTimeCalculation
fun getBClassImplementation(num: Int): B {
return B(num)
}
@CompileTimeCalculation
fun getClassCAsA(num: Int): A {
return C(num)
}
@CompileTimeCalculation
fun getClassCAsB(num: Int): B {
return C(num)
}
@CompileTimeCalculation
fun getClassCAsC(num: Int): C {
return C(num)
}
const val num1 = <!EVALUATED: `1`!>getAClassImplementation(1).getIntNum()<!>
const val num2 = <!EVALUATED: `2`!>getBClassImplementation(2).getIntNum()<!>
// all `getIntNum` methods are from class C
const val num3 = <!EVALUATED: `3`!>getClassCAsA(3).getIntNum()<!>
const val num4 = <!EVALUATED: `4`!>getClassCAsB(4).getIntNum()<!>
const val num5 = <!EVALUATED: `5`!>getClassCAsC(5).getIntNum()<!>