From 028a9940701c3a67d80476e67696f8a9b52c23dc Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Tue, 5 Aug 2025 21:46:17 +0800 Subject: [PATCH] Hack for type-safe accessors in convention plugins --- build-logic/convention/build.gradle.kts | 3 +++ .../src/main/kotlin/AndroidApplicationConventionPlugin.kt | 8 ++++---- .../kotlin/MultiplatformLibraryComposeConventionPlugin.kt | 6 +++--- .../main/kotlin/MultiplatformLibraryConventionPlugin.kt | 8 ++++---- .../src/main/kotlin/com/ehviewer/ProjectExtensions.kt | 6 +++--- .../convention/src/main/kotlin/com/ehviewer/Spotless.kt | 4 ++-- 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 6c3471fa8..9e94e07c0 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -7,6 +7,9 @@ dependencies { compileOnly(libs.android.gradlePlugin) compileOnly(libs.kotlin.gradlePlugin) compileOnly(libs.spotless.gradlePlugin) + + // https://github.com/gradle/gradle/issues/15383#issuecomment-779893192 + compileOnly(files(libs::class.java.superclass.protectionDomain.codeSource.location)) } gradlePlugin { diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt index 2c069a45a..1875724a2 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -16,10 +16,10 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidExtension @Suppress("unused") class AndroidApplicationConventionPlugin : Plugin { override fun apply(target: Project) = with(target) { - apply(plugin = libs.findPlugin("kotlin-android").get().get().pluginId) - apply(plugin = libs.findPlugin("android-application").get().get().pluginId) - apply(plugin = libs.findPlugin("compose-compiler").get().get().pluginId) - apply(plugin = libs.findPlugin("composeCompilerReportGenerator").get().get().pluginId) + apply(plugin = libs.plugins.kotlin.android.get().pluginId) + apply(plugin = libs.plugins.android.application.get().pluginId) + apply(plugin = libs.plugins.compose.compiler.get().pluginId) + apply(plugin = libs.plugins.composeCompilerReportGenerator.get().pluginId) configure { jvmToolchain(21) diff --git a/build-logic/convention/src/main/kotlin/MultiplatformLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/MultiplatformLibraryComposeConventionPlugin.kt index b07309dcb..e578d7cec 100644 --- a/build-logic/convention/src/main/kotlin/MultiplatformLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/MultiplatformLibraryComposeConventionPlugin.kt @@ -10,9 +10,9 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension class MultiplatformLibraryComposeConventionPlugin : Plugin { override fun apply(target: Project) = with(target) { apply() - apply(plugin = libs.findPlugin("compose-compiler").get().get().pluginId) - apply(plugin = libs.findPlugin("compose-multiplatform").get().get().pluginId) - apply(plugin = libs.findPlugin("composeCompilerReportGenerator").get().get().pluginId) + apply(plugin = libs.plugins.compose.compiler.get().pluginId) + apply(plugin = libs.plugins.compose.multiplatform.get().pluginId) + apply(plugin = libs.plugins.composeCompilerReportGenerator.get().pluginId) configure { compilerOptions { diff --git a/build-logic/convention/src/main/kotlin/MultiplatformLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/MultiplatformLibraryConventionPlugin.kt index b649e7c30..d3bc69c95 100644 --- a/build-logic/convention/src/main/kotlin/MultiplatformLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/MultiplatformLibraryConventionPlugin.kt @@ -18,9 +18,9 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension @OptIn(ExperimentalKotlinGradlePluginApi::class) class MultiplatformLibraryConventionPlugin : Plugin { override fun apply(target: Project) = with(target) { - apply(plugin = libs.findPlugin("kotlin-multiplatform").get().get().pluginId) - apply(plugin = libs.findPlugin("android-kotlin-multiplatform-library").get().get().pluginId) - apply(plugin = libs.findPlugin("android-lint").get().get().pluginId) + apply(plugin = libs.plugins.kotlin.multiplatform.get().pluginId) + apply(plugin = libs.plugins.android.kotlin.multiplatform.library.get().pluginId) + apply(plugin = libs.plugins.android.lint.get().pluginId) configure { jvmToolchain(21) @@ -60,7 +60,7 @@ class MultiplatformLibraryConventionPlugin : Plugin { configureSpotless() dependencies { - "coreLibraryDesugaring"(libs.findLibrary("desugar").get()) + "coreLibraryDesugaring"(libs.desugar) } } } diff --git a/build-logic/convention/src/main/kotlin/com/ehviewer/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/com/ehviewer/ProjectExtensions.kt index b884b2531..358d628a5 100644 --- a/build-logic/convention/src/main/kotlin/com/ehviewer/ProjectExtensions.kt +++ b/build-logic/convention/src/main/kotlin/com/ehviewer/ProjectExtensions.kt @@ -1,8 +1,8 @@ package com.ehviewer +import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.api.Project -import org.gradle.api.artifacts.VersionCatalogsExtension -import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.the internal val Project.libs - get() = extensions.getByType().named("libs") + get(): LibrariesForLibs = the() diff --git a/build-logic/convention/src/main/kotlin/com/ehviewer/Spotless.kt b/build-logic/convention/src/main/kotlin/com/ehviewer/Spotless.kt index c784715c8..be6868c69 100644 --- a/build-logic/convention/src/main/kotlin/com/ehviewer/Spotless.kt +++ b/build-logic/convention/src/main/kotlin/com/ehviewer/Spotless.kt @@ -6,10 +6,10 @@ import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.configure internal fun Project.configureSpotless() { - apply(plugin = libs.findPlugin("spotless").get().get().pluginId) + apply(plugin = libs.plugins.spotless.get().pluginId) configure { - val ktlintVersion = libs.findLibrary("ktlint").get().get().version + val ktlintVersion = libs.ktlint.get().version kotlin { // https://github.com/diffplug/spotless/issues/111 target("src/**/*.kt")