I was wondering how is it possible that the KotlinMultiplatformExtensions
can be cast to ExtensionAware
when none of its supertypes extends ExtensionAware
. There must be some Gradle black magic here, but my muggle programming skills are not enough to figure it out.
I wondered into this question by looking at the generated Kotlin code for the K/Native cocoapods
plugin:
/**
* Retrieves the [cocoapods][org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension] extension.
*/
val org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension.`cocoapods`: org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension get() =
(this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("cocoapods") as org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension
/**
* Configures the [cocoapods][org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension] extension.
*/
fun org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension.`cocoapods`(configure: org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension.() -> Unit): Unit =
(this as org.gradle.api.plugins.ExtensionAware).extensions.configure("cocoapods", configure)
// 🠑 some real avada kedavra high level s here!