# kotlin compiler

Published articles for kotlin compiler.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## The Four Kotlin Versions in a Gradle Project

DevFeed: [The Four Kotlin Versions in a Gradle Project](<https://devfeed.tech/articles/the-four-kotlin-versions-in-a-gradle-project-24698.md>)

Original publisher: [Read original article](<https://blog.gradle.org/three-kotlin-versions-in-a-gradle-project>)

Author: Laura Kassovic

Published: 2026-06-12T04:00:00Z

Content type: article

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

This article explains the four Kotlin versions that can matter in a Gradle project: the Kotlin compiler version selected through the Kotlin Gradle Plugin, the language version targeted for project code, the Kotlin compiler bundled with Gradle for build logic, and the language version Gradle pins for that build logic.

### Source excerpt

Do you know what version of Kotlin your Gradle build is using? There are four Kotlin versions you need to know about in a project built with Gradle. They're easy to mix up, and mixing them up can lead to some confusion (and the occasional compiler error). The trick is that there are really only two compilers in play, and each one carries its own language-version dial. Two compilers, two dials, four numbers. Let's take them one at a time. This post was updated on June 16, 2026. 1. The Kotlin that compiles your code This is the version most people look for. If your application or library code is written in Kotlin and gets compiled by the Kotlin Gradle Plugin, you pick its version in your build: // build.gradle.kts plugins { kotlin("jvm") version "1.9.25" } Change the KGP version, and you change the Kotlin compiler used to compile your project. This is the version you control directly. 2. The Kotlin language version for your code Picking the KGP version chooses which compiler runs over your code. But that compiler has a second dial: the language version, which decides what Kotlin syntax it will accept. You set it through KGP: // build.gradle.kts kotlin { compilerOptions { languageVersion = KotlinVersion.KOTLIN_1_8 } } By default it matches the language version associated with your KGP version, so most projects never touch it. You can pin it lower, for example to keep a library compilable by projects still on an older Kotlin. #1 is the compiler; this is the language level you ask that compiler to target. 3. The Kotlin embedded in Gradle (that compiles your build logic) Now the other compiler. Gradle ships its own Kotlin compiler and standard library inside the distribution. It's the compiler that builds your Kotlin DSL scripts and Gradle-managed build logic, and its standard library is available on the classpath used by build scripts and plugins. You never declare this one. It comes bundled with whatever Gradle version you use. In Gradle 9.6.0: # gradle/wrapper/gradle-w

## Koin Compiler 1.0: DSL and Annotations, Koin now Compile-Safe

DevFeed: [Koin Compiler 1.0: DSL and Annotations, Koin now Compile-Safe](<https://devfeed.tech/articles/koin-compiler-1-0-dsl-and-annotations-koin-now-compile-safe-22972.md>)

Original publisher: [Read original article](<https://blog.insert-koin.io/koin-compiler-1-0-dsl-and-annotations-koin-now-compile-safe-06905a2b04ad?source=rss----925561f2ecdf---4>)

Author: Arnaud Giuliani

Published: 2026-06-03T12:01:01Z

Content type: release

Language: en

Sources: [Koin developers - Medium](<https://devfeed.tech/sources/koin-developers-medium.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [build](<https://devfeed.tech/tags/build.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [plugin](<https://devfeed.tech/tags/plugin.md>)

### AI overview

Koin Compiler 1.0 introduces a native Kotlin compiler plugin that verifies Koin dependency graphs at build time. The release supports both DSL and annotation-based wiring, requires no KSP or generated files, and supports Kotlin Multiplatform.

### Source excerpt

Koin Compiler 1.0: DSL and Annotations, Now Compile-Safe Hello, dear Koin Community 👋 Koin Compiler 1.0 is out. Koin's DSL and annotations now sit on a native Kotlin compiler plugin that verifies your dependency graph at build time: the missing-definition error that used to wait for a get<T>() call no longer makes it past gradlew build: e: [Koin] Missing dependency: UserRepository (required by UserService) No KSP, no generated files, full Kotlin Multiplatform support out of the box. It's the biggest ergonomic shift we've made in Koin's nine-year history. Koin Logo with KotlinConf '26 LogoSetup 👀 If you use a Gradle version catalog (the modern default): [versions] koin = "4.2.1" koin-plugin = "1.0.0" [libraries] koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } koin-annotations = { module = "io.insert-koin:koin-annotations", version.ref = "koin" } [plugins] koin-compiler = { id = "io.insert-koin.compiler.plugin", version.ref = "koin-plugin" } Or the equivalent inline in build.gradle.kts: plugins { id("io.insert-koin.compiler.plugin") version "1.0.0" } dependencies { implementation("io.insert-koin:koin-core:4.2.1") implementation("io.insert-koin:koin-annotations:4.2.1") } koin-annotations is only needed if you use the annotations on your classes for the constructor, or use the annotations flow. On the DSL flow, the plugin works against koin-core alone. The DSL flow -- Safer DSL ✨ Take two classes: class MyDatabase() class MyRepository(val db: MyDatabase) Wiring them up with Koin has progressively required less typing: // 1. Manual -- the wiring is explicit module { single { MyDatabase() } single { MyRepository(get()) } } // 2. Reflection-free constructor binding module { singleOf(::MyDatabase) singleOf(::MyRepository) } // 3. Compiler-intercepted - same DSL, new mechanism module { single<MyDatabase>() single<MyRepository>() } The third form looks like nothing is happening. That's the point: the compiler plugin sees single<MyDatabase>(), walks the

## Kotlin Compiler Plugins

DevFeed: [Kotlin Compiler Plugins](<https://devfeed.tech/articles/kotlin-compiler-plugins-39197.md>)

Original publisher: [Read original article](<https://kt.academy/article/ak-compiler-plugin>)

Published: 2025-03-03T00:15:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [kotlin compiler](<https://devfeed.tech/topics/kotlin-compiler.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Parsing](<https://devfeed.tech/topics/parsing.md>), [IntelliJ IDEA](<https://devfeed.tech/topics/intellij-idea.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [intellij](<https://devfeed.tech/tags/intellij.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

A tutorial on Kotlin Compiler plugins, including how extensions and registrars modify compiler behavior, how the frontend and backend are divided, and how compiler communication supports IDE features.

### Source excerpt

All you need to know about Kotlin Compiler plugins.

## SKIE Subplugin API for Kotlin Multiplatform Projects

DevFeed: [SKIE Subplugin API for Kotlin Multiplatform Projects](<https://devfeed.tech/articles/the-power-of-skie-subplugins-tadeas-kriz-38316.md>)

Original publisher: [Read original article](<https://touchlab.co/skie-subplugin>)

Published: 2025-01-17T00:00:00Z

Content type: article

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [kotlin compiler](<https://devfeed.tech/topics/kotlin-compiler.md>), [kotlin-native](<https://devfeed.tech/topics/kotlin-native.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [changes](<https://devfeed.tech/tags/changes.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [complex](<https://devfeed.tech/tags/complex.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-native](<https://devfeed.tech/tags/kotlin-native.md>), [meta-programming](<https://devfeed.tech/tags/meta-programming.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [skie](<https://devfeed.tech/tags/skie.md>)

### AI overview

This article introduces SKIE's undocumented subplugin API and explains how it can be used within a Kotlin Multiplatform project. It describes compatibility and build-complexity considerations across Kotlin and SKIE versions, and cautions that the API may change.

### Source excerpt

Generate Swift code for your Kotlin Multiplatform project using SKIE subplugins.

## Benchmarking the Performance of Java and Kotlin Reflection

DevFeed: [Benchmarking the Performance of Java and Kotlin Reflection](<https://devfeed.tech/articles/is-reflection-slowing-down-your-code-39220.md>)

Original publisher: [Read original article](<https://kt.academy/article/benchmark-reflection>)

Published: 2024-12-16T00:00:00Z

Content type: article

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Java](<https://devfeed.tech/topics/java.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [kotlin compiler](<https://devfeed.tech/topics/kotlin-compiler.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [logging](<https://devfeed.tech/tags/logging.md>), [performance](<https://devfeed.tech/tags/performance.md>), [synchronization](<https://devfeed.tech/tags/synchronization.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This article benchmarks regular function calls, Java reflection, and Kotlin reflection. It finds that reflection is much slower than regular calls, Java reflection is slightly faster than Kotlin reflection in the measured test, and reflection has a comparable cost to synchronization while being faster than logging.

### Source excerpt

Let's benchmark reflection and see how it affects the performance of your code.

## Parameterized Android Tests with Burst 2.0

DevFeed: [Parameterized Android Tests with Burst 2.0](<https://devfeed.tech/articles/parameterized-android-tests-with-burst-2-0-25127.md>)

Original publisher: [Read original article](<https://handstandsam.com/2024/10/31/parameterized-android-tests-with-burst-2-0/>)

Author: Sam Edwards

Published: 2024-10-31T15:52:32Z

Content type: tutorial

Language: en

Sources: [Handstand Sam](<https://devfeed.tech/sources/handstand-sam.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Test coverage](<https://devfeed.tech/topics/coverage.md>), [APK](<https://devfeed.tech/topics/apk.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [android](<https://devfeed.tech/tags/android.md>), [apk](<https://devfeed.tech/tags/apk.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [instrumentation](<https://devfeed.tech/tags/instrumentation.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [updates](<https://devfeed.tech/tags/updates.md>)

### AI overview

The article explains how Burst 2.0, a Kotlin Compiler Plugin, enables parameterized tests for Kotlin Multiplatform and Android instrumentation tests. It reports that the tests compile and execute successfully from the command line, while noting IDE support issues and a use case for statically computing test names for sharding.

### Source excerpt

Parameterized tests allow you to write a test once, but allow it to be called with multiple parameters. This means it is creating more methods than you've written, but without you having to write and maintain each one individually. Here is a trivial example of writing a single test with TestParameterInjector, but having it run [...]

## Generics in Kotlin

DevFeed: [Generics in Kotlin](<https://devfeed.tech/articles/generics-in-kotlin-39335.md>)

Original publisher: [Read original article](<https://kt.academy/article/kfde-generics>)

Published: 2024-03-18T00:01:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [generics](<https://devfeed.tech/topics/generics.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Type Parameter](<https://devfeed.tech/topics/type-parameter.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [classes](<https://devfeed.tech/topics/classes.md>), [function](<https://devfeed.tech/topics/function.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [kotlin compiler](<https://devfeed.tech/topics/kotlin-compiler.md>)

Tags: [classes](<https://devfeed.tech/tags/classes.md>), [functions](<https://devfeed.tech/tags/functions.md>), [generics](<https://devfeed.tech/tags/generics.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [programming](<https://devfeed.tech/tags/programming.md>), [type-parameter](<https://devfeed.tech/tags/type-parameter.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains how generics work in Kotlin. It covers generic functions, classes, and interfaces, including type parameters, type arguments, explicit specification, compiler inference, and relationships between argument and result types.

### Source excerpt

The essence of how generics work in Kotlin.

## Replacing a Kotlin HashMap with Generated Code for Screen-Team Lookups

DevFeed: [Replacing a Kotlin HashMap with Generated Code for Screen-Team Lookups](<https://devfeed.tech/articles/a-weirder-hashmap-25617.md>)

Original publisher: [Read original article](<https://blog.p-y.wtf/a-weirder-hashmap>)

Author: Pierre-Yves Ricau

Published: 2024-02-15T03:59:18Z

Content type: tutorial

Language: en

Sources: [Py's blog](<https://devfeed.tech/sources/py-s-blog.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [make](<https://devfeed.tech/topics/make.md>), [Code](<https://devfeed.tech/topics/code.md>), [modules](<https://devfeed.tech/topics/modules.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [build-tool](<https://devfeed.tech/tags/build-tool.md>), [code](<https://devfeed.tech/tags/code.md>), [internals](<https://devfeed.tech/tags/internals.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [memory](<https://devfeed.tech/tags/memory.md>), [modules](<https://devfeed.tech/tags/modules.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

The article explores replacing a Kotlin map of roughly 1,000 screen classes and owner teams with generated code. It estimates the map's retained size at about 120 KB and considers a hash-based, code-generated lookup to reduce that memory use.

### Source excerpt

Today I was mob programming with Square's Mobile & Performance Reliability team and we toyed with an interesting idea. Our codebase has classes that represent screens a user can navigate to. These classes are defined in modules, and these modules hav...

## Using Multiplatform Kotlin

DevFeed: [Using Multiplatform Kotlin](<https://devfeed.tech/articles/using-multiplatform-kotlin-39206.md>)

Original publisher: [Read original article](<https://kt.academy/article/ak-kmp>)

Published: 2023-09-11T00:15:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [modules](<https://devfeed.tech/tags/modules.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains Kotlin Multiplatform, including how Kotlin code can target JVM bytecode, JavaScript, and machine code. It describes sharing code across platforms and configuring multiplatform Gradle modules with common and platform-specific source sets.

### Source excerpt

The essence of using multiplatform Kotlin capabilities and definition common elements.

## Kotlin Compiler Plugin Capabilities for Development-Time Type Generation

DevFeed: [Kotlin Compiler Plugin Capabilities for Development-Time Type Generation](<https://devfeed.tech/articles/kotlin-revolutionary-announcement-39344.md>)

Original publisher: [Read original article](<https://kt.academy/article/kotlin-compiler-plugin-announcement>)

Published: 2023-04-19T00:00:00Z

Content type: opinion

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [programming](<https://devfeed.tech/tags/programming.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

The article discusses Kotlin Compiler Plugin capabilities that may generate types during development, potentially allowing statically typed code to reference properties from JSON, CSV, and database structures without manually defining all corresponding classes.

### Source excerpt

Kotlin announcement that will change the way we all will write code.

## KotlinConf'23 -- Meta-programming with KSP and Kotlin compiler plugins by Tadeas Kriz

DevFeed: [KotlinConf'23 -- Meta-programming with KSP and Kotlin compiler plugins by Tadeas Kriz](<https://devfeed.tech/articles/kotlinconf-23-meta-programming-with-ksp-and-kotlin-compiler-plugins-by-tadeas-kriz-27028.md>)

Original publisher: [Read original article](<https://appmattus.medium.com/kotlinconf23-meta-programming-with-ksp-and-kotlin-compiler-plugins-by-tadeas-kriz-45dd57d30e47?source=rss-be40b368c57e------2>)

Author: Matthew Dolan

Published: 2023-04-15T01:27:49Z

Content type: opinion

Language: en

Sources: [Stories by Matthew Dolan on Medium](<https://devfeed.tech/sources/stories-by-matthew-dolan-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [kotlinconf](<https://devfeed.tech/tags/kotlinconf.md>), [ksp](<https://devfeed.tech/tags/ksp.md>)

### AI overview

The article reflects on a KotlinConf'23 talk about metaprogramming with KSP and Kotlin compiler plugins. It compares approaches for generating or altering code during compilation, discusses Kotlin compiler extensions and JVM IR, and recommends using KSP where possible.

### Source excerpt

KotlinConf'23 -- Meta-programming with KSP and Kotlin compiler plugins by Tadeas Krizhttps://medium.com/media/5209f3d53633efc6fd3a4ca4879001cc/href I really enjoyed watching the talk on meta-programming by Tadeáš Kříž at KotlinConf'23 where he provided an excellent overview of the two main options for generating and/or altering code during compilation. It was great to see the pros and cons of each option even compared to Java's annotation processing which more developers are familiar with. "there are the things that break your heart 💔" The lack of documentation around writing a Kotlin Compiler Plugin makes getting started hard work. Fortunately the speaker provides plenty of links to resources you can use to help you on your way -- I wish I'd seen this talk before writing my own compiler plugin last week! Perhaps you were aware of the move to JVM IR; for most Kotlin developers the compiler implementation doesn't really matter unless, of course, you are writing a compiler plugin. As such it was interesting to have an overview of both SyntheticResolveExtension and IrGenerationExtension. How do you decide what to use for meta-programming? Prefer KSP where possible. The talk mentions plenty of examples of KSP and Kotlin Compiler Plugins you can check out to help you write your own plugin. Additionally, during the conference I had the opportunity to talk with Tadeas about a Kotlin Compiler Plugin he's been writing, Skie (pronounced sky) which, by the way, looks awesome. We both have our fingers crossed that it can become open source so the Kotlin community has another good example of how to write a compiler plugin. "What do you do next. Hopefully profit." You can find my thoughts on more KotlinConf'23 talks at KotlinConf'23. Please let me know your thoughts. Join medium to read all of my articles or subscribe for e-mail updates.

## JUnit Coroutines Runner

DevFeed: [JUnit Coroutines Runner](<https://devfeed.tech/articles/junit-coroutines-runner-38650.md>)

Original publisher: [Read original article](<https://krossovochkin.com/posts/2021_07_10_junit_coroutines_runner/>)

Published: 2021-07-10T00:00:00Z

Content type: tutorial

Language: en

Sources: [Vasya Drobushkov](<https://devfeed.tech/sources/vasya-drobushkov.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [coroutines](<https://devfeed.tech/tags/coroutines.md>), [junit](<https://devfeed.tech/tags/junit.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [runner](<https://devfeed.tech/tags/runner.md>), [suspend-function](<https://devfeed.tech/tags/suspend-function.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This tutorial explores how to reduce repeated runBlockingTest setup in Kotlin coroutine tests by creating a custom JUnit rule. It explains the resulting suspend-function and bytecode validation issues and investigates their root cause.

### Source excerpt

Introduction Recently while writing tests for kotlin code with coroutines I found one annoying thing: almost all the tests start with runBlockingTest. Typing the same stuff repeatedly is something we can't accept! So, I decided to think about how to improve this. Disclaimer. Yes, this is an example of how to spend few hours to optimize some task that requires you 2 seconds to complete each time. Even on a scale of hundreds of usages such optimization most likely won't pay your time back. But it is always fun to do some weird things even if you understand that they are stupid.

## Sealed interfaces in Kotlin

DevFeed: [Sealed interfaces in Kotlin](<https://devfeed.tech/articles/sealed-interfaces-in-kotlin-27470.md>)

Original publisher: [Read original article](<https://jorgecastilloprz.github.io/sealed-interfaces-kotlin>)

Author: Jorge Castillo

Published: 2021-03-06T10:00:00Z

Content type: tutorial

Language: en

Sources: [👨💻 Jorge Castillo](<https://devfeed.tech/sources/jorge-castillo.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Library](<https://devfeed.tech/topics/library.md>), [enum](<https://devfeed.tech/topics/enum.md>)

Tags: [enum](<https://devfeed.tech/tags/enum.md>), [interface](<https://devfeed.tech/tags/interface.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [sealed](<https://devfeed.tech/tags/sealed.md>), [sealed-class](<https://devfeed.tech/tags/sealed-class.md>)

### AI overview

An overview of experimental sealed interfaces planned for Kotlin 1.5. The article explains relaxed subclass-location restrictions, allowing implementations in different files within the same module, and discusses why sealed interfaces can cover cases that sealed classes cannot, including enums implementing interfaces and types belonging to multiple sealed hierarchies.

### Source excerpt

Short overview of the sealed interfaces coming up in Kotlin 1.5.

## Влияние Kotlin data-классов на вес приложения

DevFeed: [Влияние Kotlin data-классов на вес приложения](<https://devfeed.tech/articles/kotlin-data-23635.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/545260/>)

Author: ChPr (Badoo)

Published: 2021-03-04T14:13:38Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [R8](<https://devfeed.tech/topics/r8.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [data](<https://devfeed.tech/tags/data.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [r8](<https://devfeed.tech/tags/r8.md>)

### AI overview

A Kotlin developer investigates the cost of using many data classes in an application. The article describes an experiment involving replacing data classes with ordinary classes and discusses how release optimizers such as R8 affect their generated methods.

### Source excerpt

Kotlin имеет много классных особенностей: null safety, smart casts, интерполяция строк и другие. Но одной из самых любимых разработчиками, по моим наблюдениям, являются data-классы. Настолько любимой, что их часто используют даже там, где никакой функциональности data-класса не требуется. В этой статье я с помощью эксперимента постараюсь понять, какова реальная цена использования большого количества data-классов в приложении. Я попробую удалить все data-классы, не сломав компиляцию, но сломав приложение, а потом расскажу о результатах и выводах этого эксперимента. Читать дальше ->

## Kotlin Multiplatform Frequently Asked Questions - Touchlab

DevFeed: [Kotlin Multiplatform Frequently Asked Questions - Touchlab](<https://devfeed.tech/articles/kotlin-multiplatform-frequently-asked-questions-touchlab-38265.md>)

Original publisher: [Read original article](<https://touchlab.co/kotlin-multiplatform-frequently-asked-questions>)

Published: 2019-11-19T22:18:08Z

Content type: article

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Library](<https://devfeed.tech/topics/library.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code-sharing](<https://devfeed.tech/tags/code-sharing.md>), [great](<https://devfeed.tech/tags/great.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-multiplatform-libraries](<https://devfeed.tech/tags/kotlin-multiplatform-libraries.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>)

### AI overview

This FAQ explains how Kotlin Multiplatform can be introduced into existing applications and how much code teams may share. It discusses sharing business logic while generally keeping platform-specific UI, expected app size impact, Swift and Objective-C interoperability, and libraries used by Touchlab and its community.

### Source excerpt

Touchlab is building a community of mobile code sharing and Kotlin Multiplatform enthusiasts. We answer Kotlin Multiplatform frequently asked questions.

## Kotlinconf 2018 slides

DevFeed: [Kotlinconf 2018 slides](<https://devfeed.tech/articles/kotlinconf-2018-slides-28671.md>)

Original publisher: [Read original article](<https://jeroenmols.com/blog/2018/10/05/kotlinconf18/>)

Author: info@jeroenmols.com (Jeroen Mols)

Published: 2018-10-05T00:00:00Z

Content type: article

Language: en

Sources: [Jeroen Mols](<https://devfeed.tech/sources/jeroen-mols.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [blogs](<https://devfeed.tech/tags/blogs.md>), [conference](<https://devfeed.tech/tags/conference.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [intellij](<https://devfeed.tech/tags/intellij.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [kotlinconf](<https://devfeed.tech/tags/kotlinconf.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [spring-boot](<https://devfeed.tech/tags/spring-boot.md>)

### AI overview

A roundup of KotlinConf 2018 conference recordings and slides, covering Kotlin development across Android, multiplatform, servers, DSLs, compilers, coroutines, graphics, data science, and related areas.

### Source excerpt

Was really great visiting Kotlinconf this year and I wanted to do a quick post to link to all of it's wonderful content. Conference slides # While you will be able to find all recordings here, I often find it useful to be able to quickly scan through the slides.

## How Dagger Annotation Processing Affected Kotlin Build and Test Performance

DevFeed: [How Dagger Annotation Processing Affected Kotlin Build and Test Performance](<https://devfeed.tech/articles/a-dagger-to-remember-29347.md>)

Original publisher: [Read original article](<https://arturdryomov.dev/posts/a-dagger-to-remember/>)

Author: Artur Dryomov

Published: 2018-04-22T00:00:00Z

Content type: article

Language: en

Sources: [Artur Dryomov](<https://devfeed.tech/sources/artur-dryomov.md>)

Topics: [Dagger](<https://devfeed.tech/topics/dagger.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Java](<https://devfeed.tech/topics/java.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [can](<https://devfeed.tech/tags/can.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [development](<https://devfeed.tech/tags/development.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>)

### AI overview

The article recounts problems with Kotlin annotation processing and incremental compilation in a growing Kotlin and Java project. It describes slow or corrupted builds, later test-performance issues, and an investigation into a Dagger annotation-processing dependency.

### Source excerpt

Story Time! Kotlin and Java annotations have a complicated relationship. This goes from the syntax to the toolchain. Does anybody remember that at the beginning of time Kotlin annotations were placed in square brackets? In 2015 the syntax was changed to the current form. Before that, it was [Inject] instead of @Inject. Yep. The syntax is fine at this point, but kapt (Kotlin annotation processing tool) from the Kotlin toolchain can be... cruel.

## A dive into Async-Await on Android

DevFeed: [A dive into Async-Await on Android](<https://devfeed.tech/articles/a-dive-into-async-await-on-android-25997.md>)

Original publisher: [Read original article](<https://medium.com/@nhaarman/a-dive-into-async-await-on-android-5a6699029aa3?source=rss-fceb7a60a849------2>)

Author: Niek Haarman

Published: 2016-11-03T16:09:29Z

Content type: tutorial

Language: en

Sources: [Stories by Niek Haarman on Medium](<https://devfeed.tech/sources/stories-by-niek-haarman-on-medium.md>)

Topics: [async/await](<https://devfeed.tech/topics/async-await.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [Code](<https://devfeed.tech/topics/code.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Network](<https://devfeed.tech/topics/network.md>), [Database](<https://devfeed.tech/topics/database.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [async](<https://devfeed.tech/tags/async.md>), [asynchronous](<https://devfeed.tech/tags/asynchronous.md>), [await](<https://devfeed.tech/tags/await.md>), [blocking](<https://devfeed.tech/tags/blocking.md>), [callback](<https://devfeed.tech/tags/callback.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [database](<https://devfeed.tech/tags/database.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [main-thread](<https://devfeed.tech/tags/main-thread.md>), [network](<https://devfeed.tech/tags/network.md>), [textview](<https://devfeed.tech/tags/textview.md>)

### AI overview

This tutorial explains async-await on Android using Kotlin coroutines, focusing on handling long-running network and database operations without blocking the UI thread. It contrasts nested callbacks with suspension functions such as asyncUI and await, and describes how the Kotlin compiler transforms the code.

### Source excerpt

Note: this article was written for a preview version of coroutines for Kotlin. Its details have changed since then. In a previous article I provided a glimpse into the world of async-await on Android. Now it's time to dive a little bit deeper in this upcoming functionality in Kotlin 1.1 What is async-await for? When dealing with long-running operations like network calls or database transactions, you need to make sure you schedule this work to a background thread. If you forget to do this, you may end up with blocking the UI thread until the task is finished. During that time, the user cannot interact with your application. Unfortunately when you schedule a new task in the background, you cannot use its result directly. Instead, you're gonna have to use some sort of callback. When that callback is invoked with the result of the operation, you can continue with what you want to do, for example run another network request. This easily flows in what people call a 'callback hell': multiple nested callbacks, all waiting to be invoked when some long-running task has finished. fun retrieveIssues() { githubApi.retrieveUser() { user -> githubApi.repositoriesFor(user) { repositories -> githubApi.issueFor(repositories.first()) { issues -> handler.post { textView.text = "You have issues!" } } } } } This snippet of code does three network requests, and finally posts a message to the main thread to update the text of some TextView. Fixing this with async-await With async-await, you can program that same function in a more imperative way. Instead of passing a callback to the function, you can call a suspension function await which lets you use the result of the task in a way that resembles normal synchronous code: fun retrieveIssues() = asyncUI { val user = await(githubApi.retrieveUser()) val repositories = await(githubApi.repositoriesFor(user)) val issues = await(githubApi.issueFor(repositories.first())) textView.text = "You have issues!" } This snippet of code still does three n