blob: 9451a42008af6e91f20ecd744f3332462a3cee3e [file] [log] [blame]
import kotlin.*
@CompileTimeCalculation
open class A {
override fun toString(): String {
return "toString call from A class"
}
}
@CompileTimeCalculation
class B : A()
@CompileTimeCalculation
class C
class D @CompileTimeCalculation constructor() {
@CompileTimeCalculation
override fun toString(): String {
return super.toString()
}
}
@CompileTimeCalculation
fun getDoubledValue(a: Int): Int {
return 2 * a
}
@CompileTimeCalculation
fun checkToStringCorrectness(value: Any, startSymbol: Char): Boolean {
val string = value.toString()
return string.get(0) == startSymbol && string.get(1) == '@' && string.length == 10
}
@CompileTimeCalculation fun echo(value: String) = value
@CompileTimeCalculation fun concat(first: String, second: Any) = "$first$second"
const val constStr = <!EVALUATED: `Success`!>echo("Success")<!>
const val concat1 = <!EVALUATED: `String concatenation example: Success`!>concat("String concatenation example: ", constStr)<!>
const val concat2 = <!EVALUATED: `String concatenation example with primitive: 1`!>concat("String concatenation example with primitive: ", 1)<!>
const val concat3 = <!EVALUATED: `String concatenation example with primitive and explicit toString call: 1`!>concat("String concatenation example with primitive and explicit toString call: ", 1.toString())<!>
const val concat4 = <!EVALUATED: `String concatenation example with function that return primitive: 20`!>"String concatenation example with function that return primitive: ${getDoubledValue(10)}"<!>
const val concat5 = <!EVALUATED: `String concatenation example with A class: toString call from A class`!>"String concatenation example with A class: ${A()}"<!>
const val concat6 = <!EVALUATED: `String concatenation example with B class, where toString is FAKE_OVERRIDDEN: toString call from A class`!>"String concatenation example with B class, where toString is FAKE_OVERRIDDEN: ${B()}"<!>
const val concat7 = <!EVALUATED: `String concatenation example with B class and explicit toString call: toString call from A class`!>"String concatenation example with B class and explicit toString call: ${B().toString()}"<!>
const val concat8 = <!EVALUATED: `String concatenation example with C class, where toString isn't present; is it correct: true`!>"String concatenation example with C class, where toString isn't present; is it correct: ${checkToStringCorrectness(C(), 'C')}"<!>
const val concat9 = <!EVALUATED: `String concatenation example with D class, where toString is taken from Any; is it correct: true`!>"String concatenation example with D class, where toString is taken from Any; is it correct: ${checkToStringCorrectness(D(), 'D')}"<!>
const val concat10 = <!EVALUATED: `String plus example with A class: toString call from A class`!>"String plus example with A class: " + A()<!>
const val concat11 = <!EVALUATED: `String plus example with B class, where toString is FAKE_OVERRIDDEN: toString call from A class`!>"String plus example with B class, where toString is FAKE_OVERRIDDEN: " + B()<!>
const val concatLambda1 = <!EVALUATED: `() -> kotlin.String`!>"" + fun(): String = ""<!>
const val concatLambda2 = <!EVALUATED: `() -> kotlin.String`!>"" + (fun(): String = "").toString()<!>
const val concatLambda3 = <!EVALUATED: `() -> kotlin.String`!>"" + fun(): String = "Some string"<!>
const val concatLambda4 = <!EVALUATED: `(kotlin.Int) -> kotlin.String`!>"" + fun(i: Int): String = ""<!>
const val concatLambda5 = <!EVALUATED: `(kotlin.Int?) -> kotlin.String?`!>"" + fun(i: Int?): String? = ""<!>
const val concatLambda6 = <!EVALUATED: `(kotlin.Int) -> kotlin.String`!>"" + { i: Int -> "" }<!>
const val concatLambda7 = <!EVALUATED: `() -> kotlin.Unit`!>"" + { }<!>
const val concatLambda8 = <!EVALUATED: `(kotlin.Int, kotlin.Double, kotlin.String) -> kotlin.Unit`!>"" + { i: Int, b: Double, c: String -> }<!>
const val concatLambda9 = <!EVALUATED: `kotlin.Double.(kotlin.Int) -> kotlin.String`!>"".let {
val lambdaWith: Double.(Int) -> String = { "A" }
lambdaWith.toString()
}<!>
// wrap as lambda to prevent calculations on frontend
const val extensionPlus1 = <!EVALUATED: `Null as string = null`!>{ "Null as string = " + null }()<!>
const val extensionPlus2 = <!EVALUATED: `Null as string = null`!>"Null as string = ${null.toString()}"<!>