In order to interoperate with the underlying runtime, and to implement advanced features, the Kotlin Compiler needs to take some liberties on your behalf. It must translate Kotlin specific constructs into concepts the runtime can understand, which requires that it reinterpret your code in unexpected ways.
This applies to both simple things like symbol names and complex abstractions like suspending and composable functions. In this talk, we will lift the lid on some of the tricks the Kotlin compiler (with plug-ins) uses to keep your coding life simple, plus show how and when you can influence its output. Examples will be drawn from Ktor, Arrow, Jetpack Compose and other popular Kotlin libraries.