diff --git a/build.gradle.kts b/build.gradle.kts index 1c4e314954..caf41c2d8c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.gradle.dsl.abi.AbiValidationExtension import org.jetbrains.kotlin.gradle.dsl.abi.AbiValidationMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.abi.AbiValidationVariantSpec import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation -import org.jetbrains.kotlin.gradle.plugin.KotlinBasePlugin import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile @@ -27,7 +26,6 @@ buildscript { classpath(libs.gradlePlugin.atomicFu) classpath(libs.gradlePlugin.jetbrainsCompose) classpath(libs.gradlePlugin.composeCompiler) - classpath(libs.gradlePlugin.kotlin) classpath(libs.gradlePlugin.mavenPublish) classpath(libs.gradlePlugin.paparazzi) classpath(libs.gradlePlugin.roborazzi) @@ -104,12 +102,6 @@ allprojects { } } - tasks.configureEach { - if (name.startsWith("spotless")) { - notCompatibleWithConfigurationCache("https://github.com/diffplug/spotless/issues/2459") - } - } - plugins.withId("org.jetbrains.kotlin.plugin.compose") { extensions.configure { stabilityConfigurationFiles.add { @@ -140,30 +132,7 @@ allprojects { } if (project.name in publicModules) { - @OptIn(ExperimentalAbiValidation::class) - plugins.withType { - extensions.configure { - fun AbiValidationVariantSpec.configure() = filters { - excluded { - annotatedWith.add("coil3.annotation.InternalCoilApi") - } - } - - // Unfortunately the 'enabled' property doesn't share a common interface. - val singleTargetExtension = extensions.findByType() - if (singleTargetExtension != null) { - singleTargetExtension.apply { - enabled = true - configure() - } - } else { - extensions.configure { - enabled = true - configure() - } - } - } - } + configureAbiValidation() } // Skiko's runtime files are ESM-only so preload our shim to let Node require them during tests. @@ -176,6 +145,52 @@ allprojects { } } +fun configureAbiValidation() { + @OptIn(ExperimentalAbiValidation::class) + fun Project.configureKotlinProject() { + extensions.configure { + fun AbiValidationVariantSpec.configure() = filters { + excluded { + annotatedWith.add("coil3.annotation.InternalCoilApi") + } + } + + // Unfortunately the 'enabled' property doesn't share a common interface. + extensions.findByType()?.apply { + enabled = true + configure() + } + extensions.findByType()?.apply { + enabled = true + configure() + } + } + } + + pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { + configureKotlinProject() + } + pluginManager.withPlugin("com.android.kotlin.multiplatform.library") { + pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { + configureKotlinProject() + } + } + pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { + configureKotlinProject() + } + + // Built-in Kotlin Android wires the Kotlin extension during Android plugin application. + pluginManager.withPlugin("com.android.application") { + configureKotlinProject() + } + pluginManager.withPlugin("com.android.library") { + configureKotlinProject() + } + pluginManager.withPlugin("com.android.test") { + configureKotlinProject() + } +} + private val ktlintRules = buildMap { put("ktlint_code_style", "intellij_idea") diff --git a/buildSrc/src/main/kotlin/coil3/multiplatform.kt b/buildSrc/src/main/kotlin/coil3/multiplatform.kt index 48d9c1f511..cd0c38b101 100644 --- a/buildSrc/src/main/kotlin/coil3/multiplatform.kt +++ b/buildSrc/src/main/kotlin/coil3/multiplatform.kt @@ -17,10 +17,11 @@ fun Project.addAllMultiplatformTargets( plugins.withId("org.jetbrains.kotlin.multiplatform") { extensions.configure { applyCoilHierarchyTemplate() - val sharedKarmaConfigDirectory = rootProject.projectDir.resolve("karma.config.d") jvm() + val sharedKarmaConfigDirectory = rootProject.projectDir.resolve("karma.config.d") + js { browser { testTask { diff --git a/coil-gif/build.gradle.kts b/coil-gif/build.gradle.kts index ef86970ca7..19c68cb8f0 100644 --- a/coil-gif/build.gradle.kts +++ b/coil-gif/build.gradle.kts @@ -2,7 +2,6 @@ import coil3.androidLibrary plugins { id("com.android.library") - id("kotlin-android") } androidLibrary(name = "coil3.gif") diff --git a/coil-video/build.gradle.kts b/coil-video/build.gradle.kts index dc9404722d..d6224ab311 100644 --- a/coil-video/build.gradle.kts +++ b/coil-video/build.gradle.kts @@ -2,7 +2,6 @@ import coil3.androidLibrary plugins { id("com.android.library") - id("kotlin-android") } androidLibrary(name = "coil3.video") diff --git a/gradle.properties b/gradle.properties index e625edf451..e2738bc6bd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,6 @@ android.javaCompile.suppressSourceTargetDeprecationWarning=true android.useAndroidX=true # https://github.com/cashapp/paparazzi/issues/2095 -android.builtInKotlin=false android.newDsl=false # Disable welcome message. diff --git a/internal/benchmark/build.gradle.kts b/internal/benchmark/build.gradle.kts index a78ecdf8e7..24602b45d3 100644 --- a/internal/benchmark/build.gradle.kts +++ b/internal/benchmark/build.gradle.kts @@ -3,7 +3,6 @@ import com.android.build.api.dsl.ManagedVirtualDevice plugins { id("com.android.test") - id("kotlin-android") id("androidx.baselineprofile.producer") } diff --git a/internal/test-compose-screenshot/build.gradle.kts b/internal/test-compose-screenshot/build.gradle.kts index 2e055e1bd6..ac47e29721 100644 --- a/internal/test-compose-screenshot/build.gradle.kts +++ b/internal/test-compose-screenshot/build.gradle.kts @@ -2,7 +2,6 @@ import coil3.androidLibrary plugins { id("com.android.library") - id("kotlin-android") id("org.jetbrains.compose") id("org.jetbrains.kotlin.plugin.compose") alias(libs.plugins.screenshot) diff --git a/internal/test-paparazzi/build.gradle.kts b/internal/test-paparazzi/build.gradle.kts index e5c41157e3..6f230067ef 100644 --- a/internal/test-paparazzi/build.gradle.kts +++ b/internal/test-paparazzi/build.gradle.kts @@ -2,7 +2,6 @@ import coil3.androidLibrary plugins { id("com.android.library") - id("kotlin-android") id("org.jetbrains.compose") id("org.jetbrains.kotlin.plugin.compose") id("app.cash.paparazzi") diff --git a/samples/compose-android/build.gradle.kts b/samples/compose-android/build.gradle.kts index 9299e584de..daf58064a4 100644 --- a/samples/compose-android/build.gradle.kts +++ b/samples/compose-android/build.gradle.kts @@ -2,7 +2,6 @@ import coil3.androidApplication plugins { id("com.android.application") - id("kotlin-android") id("org.jetbrains.compose") id("org.jetbrains.kotlin.plugin.compose") } diff --git a/samples/view/build.gradle.kts b/samples/view/build.gradle.kts index a0a233ce01..47ad427695 100644 --- a/samples/view/build.gradle.kts +++ b/samples/view/build.gradle.kts @@ -2,7 +2,6 @@ import coil3.androidApplication plugins { id("com.android.application") - id("kotlin-android") } androidApplication(name = "sample.view") {