From f8197db250dbfd4c091043e5f19f88834d45847d Mon Sep 17 00:00:00 2001 From: javernaut Date: Sat, 15 Jun 2024 21:02:51 +0200 Subject: [PATCH] Syntax improvements in Convention Plugins --- build-logic/convention/build.gradle.kts | 3 ++ ...droidApplicationComposeConventionPlugin.kt | 10 +++--- .../AndroidApplicationConventionPlugin.kt | 10 +++--- ...roidApplicationFirebaseConventionPlugin.kt | 19 ++++++----- ...ndroidApplicationJacocoConventionPlugin.kt | 4 ++- .../kotlin/AndroidFeatureConventionPlugin.kt | 25 ++++++++------ .../kotlin/AndroidHiltConventionPlugin.kt | 14 ++++---- .../AndroidLibraryComposeConventionPlugin.kt | 9 +++-- .../kotlin/AndroidLibraryConventionPlugin.kt | 15 ++++---- .../AndroidLibraryJacocoConventionPlugin.kt | 5 +-- .../kotlin/AndroidLintConventionPlugin.kt | 9 +++-- .../kotlin/AndroidRoomConventionPlugin.kt | 19 +++++++---- .../kotlin/AndroidTestConventionPlugin.kt | 6 ++-- .../main/kotlin/JvmLibraryConventionPlugin.kt | 6 ++-- .../apps/nowinandroid/AndroidCompose.kt | 13 ++++--- .../samples/apps/nowinandroid/Jacoco.kt | 3 +- .../apps/nowinandroid/KotlinAndroid.kt | 3 +- .../apps/nowinandroid/ProjectExtensions.kt | 25 -------------- .../DependencyHandlerScopeExtensions.kt | 34 +++++++++++++++++++ .../extension/PluginManagerExtensions.kt | 34 +++++++++++++++++++ .../extension/ProjectExtensions.kt | 24 +++++++++++++ gradle/libs.versions.toml | 3 ++ 22 files changed, 201 insertions(+), 92 deletions(-) delete mode 100644 build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt create mode 100644 build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/DependencyHandlerScopeExtensions.kt create mode 100644 build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/PluginManagerExtensions.kt create mode 100644 build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/ProjectExtensions.kt diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index dc478a829..c2c298f56 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -46,6 +46,9 @@ dependencies { compileOnly(libs.ksp.gradlePlugin) compileOnly(libs.room.gradlePlugin) implementation(libs.truth) + // Accessing the Version Catalog in convention plugins according to + // https://github.com/gradle/gradle/issues/15383#issuecomment-779893192 + implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) } tasks { diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt index a8b1b1779..87dd012aa 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt @@ -16,20 +16,22 @@ import com.android.build.api.dsl.ApplicationExtension import com.google.samples.apps.nowinandroid.configureAndroidCompose +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.getByType class AndroidApplicationComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - apply(plugin = "com.android.application") - apply(plugin = "org.jetbrains.kotlin.plugin.compose") + with(pluginManager) { + apply(libs.plugins.android.application) + apply(libs.plugins.compose) + } val extension = extensions.getByType() configureAndroidCompose(extension) } } - } diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt index f4d5bb0d0..6cd19969b 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -21,6 +21,8 @@ import com.google.samples.apps.nowinandroid.configureBadgingTasks import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid import com.google.samples.apps.nowinandroid.configurePrintApksTask +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -30,10 +32,10 @@ class AndroidApplicationConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { - apply("com.android.application") - apply("org.jetbrains.kotlin.android") - apply("nowinandroid.android.lint") - apply("com.dropbox.dependency-guard") + apply(libs.plugins.android.application) + apply(libs.plugins.kotlin.android) + apply(libs.plugins.nowinandroid.android.lint) + apply(libs.plugins.dependencyGuard) } extensions.configure { diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt index 422592b8a..6c442b913 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt @@ -16,7 +16,9 @@ import com.android.build.api.dsl.ApplicationExtension import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension -import com.google.samples.apps.nowinandroid.libs +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.implementation +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -26,17 +28,16 @@ class AndroidApplicationFirebaseConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { - apply("com.google.gms.google-services") - apply("com.google.firebase.firebase-perf") - apply("com.google.firebase.crashlytics") + apply(libs.plugins.gms) + apply(libs.plugins.firebase.perf) + apply(libs.plugins.firebase.crashlytics) } dependencies { - val bom = libs.findLibrary("firebase-bom").get() - add("implementation", platform(bom)) - "implementation"(libs.findLibrary("firebase.analytics").get()) - "implementation"(libs.findLibrary("firebase.performance").get()) - "implementation"(libs.findLibrary("firebase.crashlytics").get()) + implementation(platform(libs.firebase.bom)) + implementation(libs.firebase.analytics) + implementation(libs.firebase.performance) + implementation(libs.firebase.crashlytics) } extensions.configure { diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt index ac385b0d9..84fb40309 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt @@ -17,6 +17,8 @@ import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.gradle.internal.dsl.BaseAppModuleExtension import com.google.samples.apps.nowinandroid.configureJacoco +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.getByType @@ -24,7 +26,7 @@ import org.gradle.kotlin.dsl.getByType class AndroidApplicationJacocoConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - pluginManager.apply("jacoco") + pluginManager.apply(libs.plugins.jacoco) val androidExtension = extensions.getByType() androidExtension.buildTypes.configureEach { diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index 52c337521..fd2b238ab 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -16,7 +16,10 @@ import com.android.build.gradle.LibraryExtension import com.google.samples.apps.nowinandroid.configureGradleManagedDevices -import com.google.samples.apps.nowinandroid.libs +import com.google.samples.apps.nowinandroid.extension.androidTestImplementation +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.implementation +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -25,9 +28,9 @@ import org.gradle.kotlin.dsl.dependencies class AndroidFeatureConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - pluginManager.apply { - apply("nowinandroid.android.library") - apply("nowinandroid.android.hilt") + with(pluginManager) { + apply(libs.plugins.nowinandroid.android.library) + apply(libs.plugins.nowinandroid.android.hilt) } extensions.configure { defaultConfig { @@ -39,15 +42,15 @@ class AndroidFeatureConventionPlugin : Plugin { } dependencies { - add("implementation", project(":core:ui")) - add("implementation", project(":core:designsystem")) + implementation(project(":core:ui")) + implementation(project(":core:designsystem")) - add("implementation", libs.findLibrary("androidx.hilt.navigation.compose").get()) - add("implementation", libs.findLibrary("androidx.lifecycle.runtimeCompose").get()) - add("implementation", libs.findLibrary("androidx.lifecycle.viewModelCompose").get()) - add("implementation", libs.findLibrary("androidx.tracing.ktx").get()) + implementation(libs.androidx.hilt.navigation.compose) + implementation(libs.androidx.lifecycle.runtimeCompose) + implementation(libs.androidx.lifecycle.viewModelCompose) + implementation(libs.androidx.tracing.ktx) - add("androidTestImplementation", libs.findLibrary("androidx.lifecycle.runtimeTesting").get()) + androidTestImplementation(libs.androidx.lifecycle.runtimeTesting) } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt index fcb4f823e..e12db9d21 100644 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt @@ -14,7 +14,10 @@ * limitations under the License. */ -import com.google.samples.apps.nowinandroid.libs +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.implementation +import com.google.samples.apps.nowinandroid.extension.ksp +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies @@ -23,15 +26,14 @@ class AndroidHiltConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { - apply("com.google.devtools.ksp") - apply("dagger.hilt.android.plugin") + apply(libs.plugins.ksp) + apply(libs.plugins.hilt) } dependencies { - "implementation"(libs.findLibrary("hilt.android").get()) - "ksp"(libs.findLibrary("hilt.compiler").get()) + implementation(libs.hilt.android) + ksp(libs.hilt.compiler) } - } } diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index 19fabf549..0efffd35b 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -16,6 +16,8 @@ import com.android.build.gradle.LibraryExtension import com.google.samples.apps.nowinandroid.configureAndroidCompose +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.apply @@ -24,12 +26,13 @@ import org.gradle.kotlin.dsl.getByType class AndroidLibraryComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - apply(plugin = "com.android.library") - apply(plugin = "org.jetbrains.kotlin.plugin.compose") + with(pluginManager) { + apply(libs.plugins.android.library) + apply(libs.plugins.compose) + } val extension = extensions.getByType() configureAndroidCompose(extension) } } - } diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index be5b41d07..2257cbc05 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -21,7 +21,10 @@ import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid import com.google.samples.apps.nowinandroid.configurePrintApksTask import com.google.samples.apps.nowinandroid.disableUnnecessaryAndroidTests -import com.google.samples.apps.nowinandroid.libs +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.implementation +import com.google.samples.apps.nowinandroid.extension.libs +import com.google.samples.apps.nowinandroid.extension.testImplementation import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -32,9 +35,9 @@ class AndroidLibraryConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { - apply("com.android.library") - apply("org.jetbrains.kotlin.android") - apply("nowinandroid.android.lint") + apply(libs.plugins.android.library) + apply(libs.plugins.kotlin.android) + apply(libs.plugins.nowinandroid.android.lint) } extensions.configure { @@ -52,9 +55,9 @@ class AndroidLibraryConventionPlugin : Plugin { disableUnnecessaryAndroidTests(target) } dependencies { - add("testImplementation", kotlin("test")) + testImplementation(kotlin("test")) - add("implementation", libs.findLibrary("androidx.tracing.ktx").get()) + implementation(libs.androidx.tracing.ktx) } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt index 6f2ff60c5..947239023 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt @@ -15,9 +15,10 @@ */ import com.android.build.api.dsl.LibraryExtension -import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.api.variant.LibraryAndroidComponentsExtension import com.google.samples.apps.nowinandroid.configureJacoco +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.getByType @@ -25,7 +26,7 @@ import org.gradle.kotlin.dsl.getByType class AndroidLibraryJacocoConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - pluginManager.apply("jacoco") + pluginManager.apply(libs.plugins.jacoco) val androidExtension = extensions.getByType() androidExtension.buildTypes.configureEach { diff --git a/build-logic/convention/src/main/kotlin/AndroidLintConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLintConventionPlugin.kt index 1734df930..1f448d7ed 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLintConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLintConventionPlugin.kt @@ -17,6 +17,9 @@ import com.android.build.api.dsl.ApplicationExtension import com.android.build.api.dsl.LibraryExtension import com.android.build.api.dsl.Lint +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.hasPlugin +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -25,14 +28,14 @@ class AndroidLintConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { when { - pluginManager.hasPlugin("com.android.application") -> + pluginManager.hasPlugin(libs.plugins.android.application) -> configure { lint(Lint::configure) } - pluginManager.hasPlugin("com.android.library") -> + pluginManager.hasPlugin(libs.plugins.android.library) -> configure { lint(Lint::configure) } else -> { - pluginManager.apply("com.android.lint") + pluginManager.apply(libs.plugins.android.lint) configure(Lint::configure) } } diff --git a/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt index dbca79a5e..fb9a0be3d 100644 --- a/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt @@ -16,7 +16,10 @@ import androidx.room.gradle.RoomExtension import com.google.devtools.ksp.gradle.KspExtension -import com.google.samples.apps.nowinandroid.libs +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.implementation +import com.google.samples.apps.nowinandroid.extension.ksp +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -26,8 +29,10 @@ class AndroidRoomConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - pluginManager.apply("androidx.room") - pluginManager.apply("com.google.devtools.ksp") + with(pluginManager) { + apply(libs.plugins.room) + apply(libs.plugins.ksp) + } extensions.configure { arg("room.generateKotlin", "true") @@ -41,10 +46,10 @@ class AndroidRoomConventionPlugin : Plugin { } dependencies { - add("implementation", libs.findLibrary("room.runtime").get()) - add("implementation", libs.findLibrary("room.ktx").get()) - add("ksp", libs.findLibrary("room.compiler").get()) + implementation(libs.room.runtime) + implementation(libs.room.ktx) + ksp(libs.room.compiler) } } } -} \ No newline at end of file +} diff --git a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt index e48d75757..b38906f77 100644 --- a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt @@ -17,6 +17,8 @@ import com.android.build.gradle.TestExtension import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -25,8 +27,8 @@ class AndroidTestConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { - apply("com.android.test") - apply("org.jetbrains.kotlin.android") + apply(libs.plugins.android.test) + apply(libs.plugins.kotlin.android) } extensions.configure { diff --git a/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt index 35932c835..69e4567fe 100644 --- a/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt @@ -15,6 +15,8 @@ */ import com.google.samples.apps.nowinandroid.configureKotlinJvm +import com.google.samples.apps.nowinandroid.extension.apply +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Plugin import org.gradle.api.Project @@ -22,8 +24,8 @@ class JvmLibraryConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { - apply("org.jetbrains.kotlin.jvm") - apply("nowinandroid.android.lint") + apply(libs.plugins.kotlin.jvm) + apply(libs.plugins.nowinandroid.android.lint) } configureKotlinJvm() } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index f16a8051a..502c086db 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -17,6 +17,10 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.dsl.CommonExtension +import com.google.samples.apps.nowinandroid.extension.androidTestImplementation +import com.google.samples.apps.nowinandroid.extension.debugImplementation +import com.google.samples.apps.nowinandroid.extension.implementation +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Project import org.gradle.api.provider.Provider import org.gradle.kotlin.dsl.assign @@ -36,11 +40,10 @@ internal fun Project.configureAndroidCompose( } dependencies { - val bom = libs.findLibrary("androidx-compose-bom").get() - add("implementation", platform(bom)) - add("androidTestImplementation", platform(bom)) - add("implementation", libs.findLibrary("androidx-compose-ui-tooling-preview").get()) - add("debugImplementation", libs.findLibrary("androidx-compose-ui-tooling").get()) + implementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui.tooling.preview) + debugImplementation(libs.androidx.compose.ui.tooling) } testOptions { diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt index 7820a978e..c6e48849a 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt @@ -19,6 +19,7 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.artifact.ScopedArtifact import com.android.build.api.variant.AndroidComponentsExtension import com.android.build.api.variant.ScopedArtifacts +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.Project import org.gradle.api.file.Directory import org.gradle.api.file.RegularFile @@ -59,7 +60,7 @@ internal fun Project.configureJacoco( androidComponentsExtension: AndroidComponentsExtension<*, *, *>, ) { configure { - toolVersion = libs.findVersion("jacoco").get().toString() + toolVersion = libs.versions.jacoco.get() } androidComponentsExtension.onVariants { variant -> diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index bfb799595..5a09ee49a 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -17,6 +17,7 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.dsl.CommonExtension +import com.google.samples.apps.nowinandroid.extension.libs import org.gradle.api.JavaVersion import org.gradle.api.Project import org.gradle.api.plugins.JavaPluginExtension @@ -54,7 +55,7 @@ internal fun Project.configureKotlinAndroid( configureKotlin() dependencies { - add("coreLibraryDesugaring", libs.findLibrary("android.desugarJdkLibs").get()) + add("coreLibraryDesugaring", libs.android.desugarJdkLibs) } } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt deleted file mode 100644 index e45d7f2e1..000000000 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/ProjectExtensions.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid - -import org.gradle.api.Project -import org.gradle.api.artifacts.VersionCatalog -import org.gradle.api.artifacts.VersionCatalogsExtension -import org.gradle.kotlin.dsl.getByType - -val Project.libs - get(): VersionCatalog = extensions.getByType().named("libs") diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/DependencyHandlerScopeExtensions.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/DependencyHandlerScopeExtensions.kt new file mode 100644 index 000000000..b6f71b9e7 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/DependencyHandlerScopeExtensions.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.extension + +import org.gradle.kotlin.dsl.DependencyHandlerScope + +internal fun DependencyHandlerScope.implementation(dependency: Any) = + dependencies.add("implementation", dependency) + +internal fun DependencyHandlerScope.testImplementation(dependency: Any) = + dependencies.add("testImplementation", dependency) + +internal fun DependencyHandlerScope.androidTestImplementation(dependency: Any) = + dependencies.add("androidTestImplementation", dependency) + +internal fun DependencyHandlerScope.debugImplementation(dependency: Any) = + dependencies.add("debugImplementation", dependency) + +internal fun DependencyHandlerScope.ksp(dependency: Any) = + dependencies.add("ksp", dependency) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/PluginManagerExtensions.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/PluginManagerExtensions.kt new file mode 100644 index 000000000..761015d62 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/PluginManagerExtensions.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.extension + +import org.gradle.api.plugins.PluginManager +import org.gradle.api.provider.Provider +import org.gradle.api.provider.ProviderConvertible +import org.gradle.plugin.use.PluginDependency + +internal fun PluginManager.apply(pluginProvider: Provider) { + apply(pluginProvider.get().pluginId) +} + +internal fun PluginManager.apply(pluginProvider: ProviderConvertible) { + apply(pluginProvider.asProvider()) +} + +internal fun PluginManager.hasPlugin(pluginProvider: Provider): Boolean { + return hasPlugin(pluginProvider.get().pluginId) +} diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/ProjectExtensions.kt new file mode 100644 index 000000000..88f16aced --- /dev/null +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/extension/ProjectExtensions.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.extension + +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.api.Project +import org.gradle.kotlin.dsl.getByType + +val Project.libs + get(): LibrariesForLibs = extensions.getByType() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e0b938e75..8a45216ad 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -156,6 +156,7 @@ room-gradlePlugin = { group = "androidx.room", name = "room-gradle-plugin", vers [plugins] android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" } +android-lint = { id = "com.android.lint", version.ref = "androidGradlePlugin" } android-test = { id = "com.android.test", version.ref = "androidGradlePlugin" } baselineprofile = { id = "androidx.baselineprofile", version.ref = "androidxMacroBenchmark"} compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } @@ -164,6 +165,8 @@ firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = " firebase-perf = { id = "com.google.firebase.firebase-perf", version.ref = "firebasePerfPlugin" } gms = { id = "com.google.gms.google-services", version.ref = "gmsPlugin" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } +jacoco = { id = "jacoco", version.ref = "jacoco" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }