From 61a53fadb7ad8809c2a8c918ea13e36702fec57c Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 12:05:28 +0900 Subject: [PATCH 1/9] [feature/#306] Bump Kotlin/Ksp to 2.0.0 & add compose compiler plugin --- build.gradle.kts | 1 + gradle/libs.versions.toml | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 06f4a83d..7efc3f04 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,6 +18,7 @@ plugins { alias(libs.plugins.hilt) apply false alias(libs.plugins.verify.detekt) apply false alias(libs.plugins.ksp) apply false + alias(libs.plugins.compose.compiler) apply false } apply { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c43d1aed..437ae9d7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ composeShimmer = "1.3.0" ## Kotlin Symbol Processing # https://github.com/google/ksp/ -ksp = "1.9.24-1.0.20" +ksp = "2.0.0-1.0.21" ## Hilt # https://github.com/google/dagger/releases @@ -55,9 +55,9 @@ retrofit = "2.11.0" ## Kotlin # https://github.com/JetBrains/kotlin -kotlin = "1.9.24" +kotlin = "2.0.0" # https://github.com/Kotlin/kotlinx.serialization -kotlinxSerializationJson = "1.6.3" +kotlinxSerializationJson = "1.7.0-RC" # https://github.com/Kotlin/kotlinx-datetime/releases kotlinxDatetime = "0.6.0" # https://github.com/Kotlin/kotlinx.collections.immutable @@ -174,3 +174,4 @@ kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", versi ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } verify-detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } From 9f77165a3fb04994317afa3dae9cc563da612900 Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 12:09:27 +0900 Subject: [PATCH 2/9] [feature/#306] Apply compose compiler --- build-logic/build.gradle.kts | 1 + .../com/droidknights/app/ComposeAndroid.kt | 19 +++++++++++++------ gradle/libs.versions.toml | 1 + 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 64e4aa58..49c02bac 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -7,6 +7,7 @@ dependencies { implementation(libs.android.gradlePlugin) implementation(libs.kotlin.gradlePlugin) implementation(libs.verify.detektPlugin) + compileOnly(libs.compose.compiler.gradle.plugin) } gradlePlugin { diff --git a/build-logic/src/main/kotlin/com/droidknights/app/ComposeAndroid.kt b/build-logic/src/main/kotlin/com/droidknights/app/ComposeAndroid.kt index de62b523..5e413764 100644 --- a/build-logic/src/main/kotlin/com/droidknights/app/ComposeAndroid.kt +++ b/build-logic/src/main/kotlin/com/droidknights/app/ComposeAndroid.kt @@ -2,23 +2,25 @@ package com.droidknights.app import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getByType +import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension internal fun Project.configureComposeAndroid() { + with(plugins) { + apply("org.jetbrains.kotlin.plugin.compose") + } + val libs = extensions.libs androidExtension.apply { buildFeatures { compose = true } - composeOptions { - kotlinCompilerExtensionVersion = - libs.findVersion("androidxComposeCompiler").get().toString() - } - + dependencies { val bom = libs.findLibrary("androidx-compose-bom").get() add("implementation", platform(bom)) add("androidTestImplementation", platform(bom)) - + add("implementation", libs.findLibrary("androidx.compose.material3").get()) add("implementation", libs.findLibrary("androidx.compose.ui").get()) add("implementation", libs.findLibrary("androidx.compose.ui.tooling.preview").get()) @@ -29,4 +31,9 @@ internal fun Project.configureComposeAndroid() { add("debugImplementation", libs.findLibrary("androidx.compose.ui.testManifest").get()) } } + + extensions.getByType().apply { + enableStrongSkippingMode.set(true) + includeSourceInformation.set(true) + } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 437ae9d7..a088f248 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -110,6 +110,7 @@ androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "u androidx-compose-ui-testManifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-compose-navigation = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidxComposeNavigation" } androidx-compose-navigation-test = { group = "androidx.navigation", name = "navigation-testing", version.ref = "androidxComposeNavigation" } +compose-compiler-gradle-plugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } hilt-core = { group = "com.google.dagger", name = "hilt-core", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" } From 6fb9c41a91d0bc4c0a3d9a6254c0ed91148d4145 Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 12:09:40 +0900 Subject: [PATCH 3/9] [feature/#306] Remove useless code --- .../src/main/kotlin/com/droidknights/app/ComposeAndroid.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/build-logic/src/main/kotlin/com/droidknights/app/ComposeAndroid.kt b/build-logic/src/main/kotlin/com/droidknights/app/ComposeAndroid.kt index 5e413764..984a1b8c 100644 --- a/build-logic/src/main/kotlin/com/droidknights/app/ComposeAndroid.kt +++ b/build-logic/src/main/kotlin/com/droidknights/app/ComposeAndroid.kt @@ -12,10 +12,6 @@ internal fun Project.configureComposeAndroid() { val libs = extensions.libs androidExtension.apply { - buildFeatures { - compose = true - } - dependencies { val bom = libs.findLibrary("androidx-compose-bom").get() add("implementation", platform(bom)) From 511663fa5ee40fcb3fbced5520d316c382d346aa Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 12:11:28 +0900 Subject: [PATCH 4/9] [feature/#306] Change kotlinOptions to compilerOptions --- .../com/droidknights/app/KotlinAndroid.kt | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt index 440dcb7c..9efb37b2 100644 --- a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt +++ b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt @@ -5,8 +5,11 @@ package com.droidknights.app import org.gradle.api.JavaVersion import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.provideDelegate import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension import org.jetbrains.kotlin.gradle.tasks.KotlinCompile /** @@ -51,15 +54,17 @@ internal fun Project.configureKotlinAndroid() { } internal fun Project.configureKotlin() { - tasks.withType().configureEach { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() + extensions.getByType().apply { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) // Treat all Kotlin warnings as errors (disabled by default) // Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties val warningsAsErrors: String? by project - allWarningsAsErrors = warningsAsErrors.toBoolean() - freeCompilerArgs = freeCompilerArgs + listOf( - "-opt-in=kotlin.RequiresOptIn", + allWarningsAsErrors.set(warningsAsErrors.toBoolean()) + freeCompilerArgs.set( + freeCompilerArgs.get() + listOf( + "-opt-in=kotlin.RequiresOptIn", + ) ) } } From ef9f7ad3f65782ad32d5a6abc0261fc35043ce0b Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 12:17:14 +0900 Subject: [PATCH 5/9] [feature/#306] Add experimental feature: ExplicitBackingFields --- .../src/main/kotlin/com/droidknights/app/KotlinAndroid.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt index 9efb37b2..7a6c6237 100644 --- a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt +++ b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt @@ -67,5 +67,8 @@ internal fun Project.configureKotlin() { ) ) } + sourceSets.all { + languageSettings.enableLanguageFeature("ExplicitBackingFields") + } } } From 9cd93629af1ef331b0e9df79c1d1cb34d73b51b2 Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 12:17:30 +0900 Subject: [PATCH 6/9] [feature/#306] Remove useless imports --- .../src/main/kotlin/com/droidknights/app/KotlinAndroid.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt index 7a6c6237..c2048504 100644 --- a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt +++ b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt @@ -7,10 +7,8 @@ import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.provideDelegate -import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile /** * https://github.com/android/nowinandroid/blob/main/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt From fa5fbd4bfd0843673621c9be042938f91dca0f02 Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 12:24:07 +0900 Subject: [PATCH 7/9] [feature/#306] Update .gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 217d977f..edb6f2ad 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ # Created by https://www.toptal.com/developers/gitignore/api/androidstudio,android # Edit at https://www.toptal.com/developers/gitignore?templates=androidstudio,android +### Kotlin ### +# generated .kotlin +.kotlin/ + ### Android ### # Built application files *.apk From c13a8c466bee634d3ebd1b23c904d34e8888f071 Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 12:24:20 +0900 Subject: [PATCH 8/9] [feature/#306] Fix build error --- .../src/main/kotlin/com/droidknights/app/KotlinAndroid.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt index c2048504..aa52b9f9 100644 --- a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt +++ b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt @@ -7,8 +7,10 @@ import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.provideDelegate +import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile /** * https://github.com/android/nowinandroid/blob/main/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -52,7 +54,7 @@ internal fun Project.configureKotlinAndroid() { } internal fun Project.configureKotlin() { - extensions.getByType().apply { + tasks.withType().configureEach { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) // Treat all Kotlin warnings as errors (disabled by default) @@ -65,6 +67,8 @@ internal fun Project.configureKotlin() { ) ) } + } + extensions.getByType().apply { sourceSets.all { languageSettings.enableLanguageFeature("ExplicitBackingFields") } From 329129b52fe14811be916e478b10f3a26153edce Mon Sep 17 00:00:00 2001 From: HyunWoo Lee Date: Thu, 30 May 2024 13:02:11 +0900 Subject: [PATCH 9/9] [feature/#306] Remove explicit backing field setting --- .../main/kotlin/com/droidknights/app/KotlinAndroid.kt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt index aa52b9f9..8d156348 100644 --- a/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt +++ b/build-logic/src/main/kotlin/com/droidknights/app/KotlinAndroid.kt @@ -1,15 +1,11 @@ -@file:Suppress("UnstableApiUsage") - package com.droidknights.app import org.gradle.api.JavaVersion import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.provideDelegate import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.tasks.KotlinCompile /** @@ -68,9 +64,4 @@ internal fun Project.configureKotlin() { ) } } - extensions.getByType().apply { - sourceSets.all { - languageSettings.enableLanguageFeature("ExplicitBackingFields") - } - } }