Although Kotlin's string templates usually work well in cases when you want to include literals into generated code, KotlinPoet offers additional syntax inspired-by but incompatible-with String.format()
. It accepts %L
to emit a literal value in the output. This works just like Formatter
's %s
:
private fun computeRange(name: String, from: Int, to: Int, op: String): FunSpec { return FunSpec.builder(name) .returns(Int::class) .addStatement("var result = 0") .beginControlFlow("for (i in %L..<%L)", from, to) .addStatement("result = result %L i", op) .endControlFlow() .addStatement("return result") .build() }
Literals are emitted directly to the output code with no escaping. Arguments for literals may be strings, primitives, and a few KotlinPoet types described below.