44 lines
1.1 KiB
Kotlin
Vendored
44 lines
1.1 KiB
Kotlin
Vendored
abstract class A @CompileTimeCalculation constructor() {
|
|
@CompileTimeCalculation
|
|
abstract fun getIntNum(): Int
|
|
|
|
@CompileTimeCalculation
|
|
abstract fun getIntNumInverse(): Int
|
|
}
|
|
|
|
abstract 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
|
|
override fun getIntNumInverse(): Int {
|
|
return -c
|
|
}
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
fun getClassCAsA(num: Int): A {
|
|
return C(num)
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
fun getClassCAsB(num: Int): B {
|
|
return C(num)
|
|
}
|
|
|
|
// all methods call from C
|
|
const val num1 = <!EVALUATED: `1`!>getClassCAsA(1).getIntNum()<!>
|
|
const val num2 = <!EVALUATED: `2`!>getClassCAsB(2).getIntNum()<!>
|
|
|
|
const val num3 = <!EVALUATED: `-3`!>getClassCAsA(3).getIntNumInverse()<!>
|
|
const val num4 = <!EVALUATED: `-4`!>getClassCAsB(4).getIntNumInverse()<!>
|