From ac0d5b641003b96e0506fb61360eaf9e74ede4a1 Mon Sep 17 00:00:00 2001 From: Gabriel Moro Date: Sun, 3 May 2026 10:33:07 -0300 Subject: [PATCH] Refactor build logic to use type-safe version catalog accessors - Remove manual extension functions for dependency handling and version catalog lookups in `DependecyHandlerExtensions.kt` and `VersionCatalog.kt`. - Update convention plugins to use `the()` for accessing the version catalog. - Replace manual string-based library lookups and custom extensions with type-safe accessors (e.g., `libs.koin.core`, `libs.dokka`). - Configure `build-logic/build.gradle.kts` to enable type-safe accessors within the build logic module. --- build-logic/build.gradle.kts | 3 +++ .../java/com.streamplayer.application.gradle.kts | 8 +++----- .../main/java/com.streamplayer.dokka.gradle.kts | 7 ++++++- .../java/com.streamplayer.kmp-library.gradle.kts | 10 ++++------ ...treamplayer.koin-annotations-setup.gradle.kts | 16 ++++++---------- .../extensions/DependecyHandlerExtensions.kt | 8 -------- .../src/main/java/extensions/VersionCatalog.kt | 16 ---------------- 7 files changed, 22 insertions(+), 46 deletions(-) delete mode 100644 build-logic/src/main/java/extensions/DependecyHandlerExtensions.kt delete mode 100644 build-logic/src/main/java/extensions/VersionCatalog.kt diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 9da79024..6c4c4334 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -13,6 +13,9 @@ repositories { } dependencies { + // this allow us to access libs.anylibrary using type-safe accessors + implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) + implementation(libs.android.gradle.plugin) implementation(libs.kotlin.gradle.plugin) implementation(libs.detekt.gradle.plugin) diff --git a/build-logic/src/main/java/com.streamplayer.application.gradle.kts b/build-logic/src/main/java/com.streamplayer.application.gradle.kts index edc57f06..2e948946 100644 --- a/build-logic/src/main/java/com.streamplayer.application.gradle.kts +++ b/build-logic/src/main/java/com.streamplayer.application.gradle.kts @@ -1,13 +1,12 @@ @file:Suppress("UnstableApiUsage") -import extensions.dokkaPlugin -import extensions.getLibrary import extensions.iosTarget import extensions.setupAndroidDefaultConfig import extensions.setupCompileOptions import extensions.setupPackingOptions +import org.gradle.accessors.dm.LibrariesForLibs -val libs: VersionCatalog = extensions.getByType().named("libs") +val libs = the() plugins { id("com.android.application") @@ -16,7 +15,6 @@ plugins { id("com.streamplayer.dokka") id("com.streamplayer.detekt") } -val catalog: VersionCatalog = extensions.getByType().named("libs") kotlin { jvmToolchain(21) @@ -48,7 +46,7 @@ android { } dependencies { - dokkaPlugin(libs.getLibrary("dokka")) + add("dokkaPlugin", libs.dokka) } tasks.register("coverageReport") { diff --git a/build-logic/src/main/java/com.streamplayer.dokka.gradle.kts b/build-logic/src/main/java/com.streamplayer.dokka.gradle.kts index c3621e10..558a087b 100644 --- a/build-logic/src/main/java/com.streamplayer.dokka.gradle.kts +++ b/build-logic/src/main/java/com.streamplayer.dokka.gradle.kts @@ -1,5 +1,10 @@ @file:Suppress("UnstableApiUsage") +import org.gradle.accessors.dm.LibrariesForLibs + + +val libs = the() + allprojects { - apply(plugin = "org.jetbrains.dokka") + apply(plugin = libs.plugins.dokka.get().pluginId) } diff --git a/build-logic/src/main/java/com.streamplayer.kmp-library.gradle.kts b/build-logic/src/main/java/com.streamplayer.kmp-library.gradle.kts index 93e8406c..149a784b 100644 --- a/build-logic/src/main/java/com.streamplayer.kmp-library.gradle.kts +++ b/build-logic/src/main/java/com.streamplayer.kmp-library.gradle.kts @@ -1,17 +1,15 @@ @file:Suppress("UnstableApiUsage") -import extensions.dokkaPlugin -import extensions.getLibrary import extensions.iosTarget import extensions.setupAndroidDefaultConfig import extensions.setupCompileOptions import extensions.setupNameSpace import extensions.setupPackingOptions -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.kotlin.dsl.the +val libs = the() -val libs: VersionCatalog = extensions.getByType().named("libs") plugins { id("org.jetbrains.kotlin.multiplatform") id("com.android.library") @@ -61,5 +59,5 @@ android { } dependencies { - dokkaPlugin(libs.getLibrary("dokka")) + add("dokkaPlugin", libs.dokka) } diff --git a/build-logic/src/main/java/com.streamplayer.koin-annotations-setup.gradle.kts b/build-logic/src/main/java/com.streamplayer.koin-annotations-setup.gradle.kts index dfddc2e5..14d94977 100644 --- a/build-logic/src/main/java/com.streamplayer.koin-annotations-setup.gradle.kts +++ b/build-logic/src/main/java/com.streamplayer.koin-annotations-setup.gradle.kts @@ -1,12 +1,8 @@ -import extensions.koinAnnotationsDependency -import extensions.koinCompiler -import extensions.koinCoreDependency -import org.gradle.api.artifacts.VersionCatalog -import org.gradle.api.artifacts.VersionCatalogsExtension -import org.gradle.kotlin.dsl.getByType +import org.gradle.accessors.dm.LibrariesForLibs import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -val libs: VersionCatalog = extensions.getByType().named("libs") +val libs = the() + plugins { id("org.jetbrains.kotlin.multiplatform") id("com.google.devtools.ksp") @@ -15,8 +11,8 @@ plugins { kotlin { sourceSets { commonMain.dependencies { - implementation(libs.koinCoreDependency()) - api(libs.koinAnnotationsDependency()) + implementation(libs.koin.core) + api(libs.koin.annotations) } } @@ -28,7 +24,7 @@ kotlin { // KSP Tasks dependencies { - add("kspCommonMainMetadata", libs.koinCompiler()) + add("kspCommonMainMetadata", libs.koin.ksp.compiler) } diff --git a/build-logic/src/main/java/extensions/DependecyHandlerExtensions.kt b/build-logic/src/main/java/extensions/DependecyHandlerExtensions.kt deleted file mode 100644 index 816de6bf..00000000 --- a/build-logic/src/main/java/extensions/DependecyHandlerExtensions.kt +++ /dev/null @@ -1,8 +0,0 @@ -package extensions - -import org.gradle.api.artifacts.Dependency -import org.gradle.api.artifacts.dsl.DependencyHandler - -@Suppress("FunctionNaming") -fun DependencyHandler.`dokkaPlugin`(dependencyNotation: Any): Dependency? = - add("dokkaPlugin", dependencyNotation) diff --git a/build-logic/src/main/java/extensions/VersionCatalog.kt b/build-logic/src/main/java/extensions/VersionCatalog.kt deleted file mode 100644 index 8437cea6..00000000 --- a/build-logic/src/main/java/extensions/VersionCatalog.kt +++ /dev/null @@ -1,16 +0,0 @@ -package extensions - -import org.gradle.api.artifacts.VersionCatalog - -internal fun VersionCatalog.getLibrary(library: String) = findLibrary(library).get() -internal fun VersionCatalog.getVersion(library: String) = findVersion(library).get() -internal fun VersionCatalog.getBundle(bundle: String) = findBundle(bundle).get() - -internal fun VersionCatalog.koinCoreDependency() = findLibrary("koin_core").get() - -internal fun VersionCatalog.koinAnnotationsDependency() = findLibrary("koin_annotations").get() - -internal fun VersionCatalog.koinComposeDependency() = findLibrary("koin_compose").get() - -internal fun VersionCatalog.koinCompiler() = findLibrary("koin-ksp-compiler").get() -