diff --git a/src/main/kotlin/org/kodein/internal/gradle/KodeinMppExtension.kt b/src/main/kotlin/org/kodein/internal/gradle/KodeinMppExtension.kt index de85e5c..5a0cb04 100644 --- a/src/main/kotlin/org/kodein/internal/gradle/KodeinMppExtension.kt +++ b/src/main/kotlin/org/kodein/internal/gradle/KodeinMppExtension.kt @@ -4,48 +4,56 @@ import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Project import org.gradle.internal.os.OperatingSystem -import org.jetbrains.kotlin.gradle.dsl.* +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTests import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithTests -import org.jetbrains.kotlin.gradle.targets.js.dsl.* +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmJsTargetDsl +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmTargetDsl +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmWasiTargetDsl import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeBinaryTestRun -import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask -public typealias KodeinTarget = KodeinMppExtension.Target, out KotlinCommonCompilerOptions, out KodeinMppExtension.Sources> -public typealias KodeinTargetBuilder = KodeinMppExtension.TargetBuilder, out KotlinCommonCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinTarget = KodeinMppExtension.Target, out KodeinMppExtension.Sources> +public typealias KodeinTargetBuilder = KodeinMppExtension.TargetBuilder, out KodeinMppExtension.Sources> -public typealias KodeinJvmTarget = KodeinMppExtension.Target, KotlinJvmCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinJvmTargetBuilder = KodeinMppExtension.TargetBuilder, out KotlinJvmCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinJvmTarget = KodeinMppExtension.Target +public typealias KodeinJvmTargetBuilder = KodeinMppExtension.TargetBuilder -public typealias KodeinJsTarget = KodeinMppExtension.Target, KotlinJsCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinJsTargetBuilder = KodeinMppExtension.TargetBuilder, out KotlinJsCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinJsTarget = KodeinMppExtension.Target +public typealias KodeinJsTargetBuilder = KodeinMppExtension.TargetBuilder -public typealias KodeinWasmTarget = KodeinMppExtension.Target, KotlinJsCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinWasmTargetBuilder = KodeinMppExtension.TargetBuilder, out KotlinJsCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinWasmTarget = KodeinMppExtension.Target +public typealias KodeinWasmTargetBuilder = KodeinMppExtension.TargetBuilder -public typealias KodeinWasmJsTarget = KodeinMppExtension.Target, KotlinJsCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinWasmJsTargetBuilder = KodeinMppExtension.TargetBuilder, out KotlinJsCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinWasmJsTarget = KodeinMppExtension.Target +public typealias KodeinWasmJsTargetBuilder = KodeinMppExtension.TargetBuilder -public typealias KodeinWasmWasiTarget = KodeinMppExtension.Target, KotlinJsCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinWasmWasiTargetBuilder = KodeinMppExtension.TargetBuilder, out KotlinJsCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinWasmWasiTarget = KodeinMppExtension.Target +public typealias KodeinWasmWasiTargetBuilder = KodeinMppExtension.TargetBuilder -public typealias KodeinNativeTarget = KodeinMppExtension.Target, KotlinNativeCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinNativeTargetBuilder = KodeinMppExtension.TargetBuilder, out KotlinNativeCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinNativeTarget = KodeinMppExtension.Target +public typealias KodeinNativeTargetBuilder = KodeinMppExtension.TargetBuilder -public typealias KodeinNativeTargetWithHostTests = KodeinMppExtension.Target, KotlinNativeCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinNativeTargetWithHostTestsBuilder = KodeinMppExtension.TargetBuilder, out KotlinNativeCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinNativeTargetWithHostTests = KodeinMppExtension.Target +public typealias KodeinNativeTargetWithHostTestsBuilder = KodeinMppExtension.TargetBuilder -public typealias KodeinNativeTargetWithSimulatorTests = KodeinMppExtension.Target, KotlinNativeCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinNativeTargetWithSimulatorTestsBuilder = KodeinMppExtension.TargetBuilder, out KotlinNativeCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinNativeTargetWithSimulatorTests = KodeinMppExtension.Target +public typealias KodeinNativeTargetWithSimulatorTestsBuilder = KodeinMppExtension.TargetBuilder -public typealias KodeinNativeTargetWithTests = KodeinMppExtension.Target, KotlinCompilationTask, KotlinNativeCompilerOptions, KodeinMppExtension.Sources> -public typealias KodeinNativeTargetWithTestsBuilder = KodeinMppExtension.TargetBuilder, out KotlinCompilationTask, out KotlinNativeCompilerOptions, out KodeinMppExtension.Sources> +public typealias KodeinNativeTargetWithTests = KodeinMppExtension.Target, KotlinNativeCompilation, KodeinMppExtension.Sources> +public typealias KodeinNativeTargetWithTestsBuilder = KodeinMppExtension.TargetBuilder, out KotlinNativeCompilation, out KodeinMppExtension.Sources> public open class KodeinMppExtension( internal val project: Project, @@ -75,9 +83,9 @@ public open class KodeinMppExtension( public val common: Sources get() = Sources("common") public fun common(configure: Sources.() -> Unit) { common.apply(configure) } - public inner class TargetBuilder, O : KotlinCommonCompilerOptions, S : Sources> internal constructor( - public val target: T, - public val sources: S + public inner class TargetBuilder, S : Sources> internal constructor( + public val target: T, + public val sources: S, ) { public fun target(block: T.() -> Unit) { target.block() } @@ -98,25 +106,27 @@ public open class KodeinMppExtension( } } - public class Target, O : KotlinCommonCompilerOptions, S : Sources>( - internal val name: String, - internal val kotlinAccess: KotlinMultiplatformExtension.(String) -> T, - internal val sourceBuilder: (String) -> S, - internal val nativeBuildOn: OperatingSystem.() -> Boolean? = { null }, - internal val defaultConfig: TargetBuilder.() -> Unit = {} + public class Target, S : Sources>( + internal val name: String, + internal val kotlinAccess: KotlinMultiplatformExtension.(String) -> T, + internal val sourceBuilder: (String) -> S, + internal val nativeBuildOn: OperatingSystem.() -> Boolean? = { null }, + internal val defaultConfig: TargetBuilder.() -> Unit = {}, ) { internal fun access(kotlin: KotlinMultiplatformExtension) = kotlinAccess(kotlin, name) } public open inner class Targets { - public fun , O : KotlinCommonCompilerOptions> Target( - name: String, - kotlinAccess: KotlinMultiplatformExtension.(String) -> T, - nativeBuildOn: OperatingSystem.() -> Boolean? = { null }, - defaultConfig: TargetBuilder.() -> Unit = {} - ): Target = Target(name, kotlinAccess, ::Sources, nativeBuildOn, defaultConfig) - - public fun , O : KotlinJvmCompilerOptions> TargetBuilder<*, C, O, out Sources>.commonJvmConfig(kotlin: KotlinTopLevelExtension) { + public fun > Target( + name: String, + kotlinAccess: KotlinMultiplatformExtension.(String) -> T, + nativeBuildOn: OperatingSystem.() -> Boolean? = { null }, + defaultConfig: TargetBuilder.() -> Unit = {}, + ): Target = Target(name, kotlinAccess, ::Sources, nativeBuildOn, defaultConfig) + + public fun > TargetBuilder<*, C, out Sources>.commonJvmConfig( + kotlin: KotlinTopLevelExtension, + ) { kotlin.jvmToolchain(KodeinJvmPlugin.jvmTarget(project)) if (target.project.properties["org.kodein.no-default-junit"] != "true") { @@ -257,13 +267,16 @@ public open class KodeinMppExtension( private val created = HashSet() - public fun , O : KotlinCommonCompilerOptions, S : Sources> add(target: Target, configure: TargetBuilder.() -> Unit) { + public fun , S : Sources> add( + target: Target, + configure: TargetBuilder.() -> Unit, + ) { if (target.name in excludedTargets) { project.logger.warn("Target ${target.name} excluded.") return } - val targetBuilder = TargetBuilder(target.access(kotlin), target.sourceBuilder(target.name)) + val targetBuilder = TargetBuilder(target.access(kotlin), target.sourceBuilder(target.name)) if (target.name !in created) { created += target.name @@ -279,7 +292,10 @@ public open class KodeinMppExtension( targetBuilder.apply(configure) } - public fun , O : KotlinCommonCompilerOptions, S : Sources> addAll(targets: List>, configure: TargetBuilder.() -> Unit) { + public fun , S : Sources> addAll( + targets: List>, + configure: TargetBuilder.() -> Unit, + ) { targets.forEach { add(it, configure) } } diff --git a/src/main/kotlin/org/kodein/internal/gradle/KodeinMppWithAndroidExtension.kt b/src/main/kotlin/org/kodein/internal/gradle/KodeinMppWithAndroidExtension.kt index 51587d0..7bd0c55 100644 --- a/src/main/kotlin/org/kodein/internal/gradle/KodeinMppWithAndroidExtension.kt +++ b/src/main/kotlin/org/kodein/internal/gradle/KodeinMppWithAndroidExtension.kt @@ -2,14 +2,13 @@ package org.kodein.internal.gradle import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget -import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation -public typealias KodeinAndroidTarget = KodeinMppExtension.Target, KotlinJvmCompilerOptions, KodeinMppWithAndroidExtension.AndroidSources> -public typealias KodeinAndroidTargetBuilder = KodeinMppExtension.TargetBuilder, KotlinJvmCompilerOptions, KodeinMppWithAndroidExtension.AndroidSources> +public typealias KodeinAndroidTarget = KodeinMppExtension.Target +public typealias KodeinAndroidTargetBuilder = KodeinMppExtension.TargetBuilder public class KodeinMppWithAndroidExtension(project: Project, kotlin: KotlinMultiplatformExtension) : KodeinMppExtension(project, kotlin) {