From 88f4ac96af7ff405e30b6cc3e3b3d42d21f77702 Mon Sep 17 00:00:00 2001 From: Daniel Frett Date: Fri, 8 Dec 2023 14:52:19 -0700 Subject: [PATCH] enable circuit codegen --- .../ui/account/delete/DeleteAccountModule.kt | 38 ------------------- build-logic/build.gradle.kts | 1 + .../src/main/kotlin/AndroidConfiguration.kt | 10 +++-- build-logic/src/main/kotlin/Project.kt | 2 + gradle/libs.versions.toml | 5 ++- 5 files changed, 13 insertions(+), 43 deletions(-) delete mode 100644 app/src/main/kotlin/org/cru/godtools/ui/account/delete/DeleteAccountModule.kt diff --git a/app/src/main/kotlin/org/cru/godtools/ui/account/delete/DeleteAccountModule.kt b/app/src/main/kotlin/org/cru/godtools/ui/account/delete/DeleteAccountModule.kt deleted file mode 100644 index 376bf0496d..0000000000 --- a/app/src/main/kotlin/org/cru/godtools/ui/account/delete/DeleteAccountModule.kt +++ /dev/null @@ -1,38 +0,0 @@ -package org.cru.godtools.ui.account.delete - -import com.slack.circuit.runtime.presenter.Presenter -import com.slack.circuit.runtime.ui.Ui -import com.slack.circuit.runtime.ui.ui -import dagger.Module -import dagger.Provides -import dagger.Reusable -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import dagger.multibindings.IntoSet - -// TODO: switch to codegen for this once https://github.com/slackhq/circuit/pull/963 is released -@Module -@InstallIn(SingletonComponent::class) -object DeleteAccountModule { - @Provides - @Reusable - @IntoSet - fun presenterFactory(factory: DeleteAccountPresenter.Factory) = Presenter.Factory { screen, navigator, _ -> - when (screen) { - DeleteAccountScreen -> factory.create(navigator = navigator) - else -> null - } - } - - @Provides - @Reusable - @IntoSet - fun uiFactory() = Ui.Factory { screen, _ -> - when (screen) { - DeleteAccountScreen -> ui { state, modifier -> - DeleteAccountLayout(state = state, modifier = modifier) - } - else -> null - } - } -} diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index a2df029d99..90bf7f79e6 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -13,6 +13,7 @@ dependencies { implementation(libs.json) implementation(libs.kotlin.gradlePlugin) implementation(libs.kotlin.kover.gradlePlugin) + implementation(libs.ksp.gradlePlugin) implementation(libs.onesky.gradlePlugin) } diff --git a/build-logic/src/main/kotlin/AndroidConfiguration.kt b/build-logic/src/main/kotlin/AndroidConfiguration.kt index c21e5472e0..b4c7dd66d2 100644 --- a/build-logic/src/main/kotlin/AndroidConfiguration.kt +++ b/build-logic/src/main/kotlin/AndroidConfiguration.kt @@ -122,11 +122,13 @@ fun CommonExtension<*, *, *, *, *>.configureCompose(project: Project, enableCirc } if (enableCircuit) { - project.plugins.apply("kotlin-parcelize") + project.pluginManager.apply("com.google.devtools.ksp") + project.pluginManager.apply("kotlin-parcelize") - project.dependencies.apply { - addProvider("implementation", project.libs.findBundle("circuit").get()) - } + project.dependencies.addProvider("implementation", project.libs.findBundle("circuit").get()) + project.dependencies.addProvider("ksp", project.libs.findLibrary("circuit-codegen").get()) + + project.ksp.arg("circuit.codegen.mode", "hilt") } } diff --git a/build-logic/src/main/kotlin/Project.kt b/build-logic/src/main/kotlin/Project.kt index 912af57fcf..640c9ab98e 100644 --- a/build-logic/src/main/kotlin/Project.kt +++ b/build-logic/src/main/kotlin/Project.kt @@ -1,4 +1,5 @@ import com.android.build.api.variant.AndroidComponentsExtension +import com.google.devtools.ksp.gradle.KspExtension import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.artifacts.VersionCatalogsExtension @@ -13,3 +14,4 @@ internal fun Project.kapt(configure: KaptExtension.() -> Unit) = extensions.conf internal val Project.libs get() = project.extensions.getByType().named("libs") internal val Project.androidComponents get() = project.extensions.getByName("androidComponents") as AndroidComponentsExtension<*, *, *> +internal val Project.ksp get() = project.extensions.getByType() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6b3d909c5d..a4e3dc2609 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,6 +23,7 @@ gtoSupport = "4.2.0-SNAPSHOT" kotlin = "1.9.21" kotlinCoroutines = "1.7.3" kotlinKover = "0.7.5" +ksp = "1.9.21-1.0.15" ktlint = "1.0.1" ktlintGradle = "12.0.2" lottie = "6.2.0" @@ -78,6 +79,7 @@ androidx-viewpager2 = { module = "androidx.viewpager2:viewpager2", version.ref = androidx-work = { module = "androidx.work:work-runtime", version.ref = "androidx-work" } androidx-work-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "androidx-work" } appsflyer = "com.appsflyer:af-android-sdk:6.12.4" +circuit-codegen = { module = "com.slack.circuit:circuit-codegen", version.ref = "circuit" } circuit-codegen-annotations = { module = "com.slack.circuit:circuit-codegen-annotations", version.ref = "circuit" } circuit-foundation = { module = "com.slack.circuit:circuit-foundation", version.ref = "circuit" } circuit-test = { module = "com.slack.circuit:circuit-test", version.ref = "circuit" } @@ -173,6 +175,7 @@ kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", ve kotlin-kover-gradlePlugin = { module = "org.jetbrains.kotlinx:kover-gradle-plugin", version.ref = "kotlinKover" } kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } +ksp-gradlePlugin = { module = "com.google.devtools.ksp:symbol-processing-gradle-plugin", version.ref = "ksp" } ktlint-gradle = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlintGradle" } leakcanary = "com.squareup.leakcanary:leakcanary-android:2.12" lottie = { module = "com.airbnb.android:lottie", version.ref = "lottie" } @@ -228,5 +231,5 @@ firebase-perf = { id = "com.google.firebase.firebase-perf", version = "1.4.2" } google-services = { id = "com.google.gms.google-services", version = "4.4.0" } grgit = { id = "org.ajoberstar.grgit", version = "5.2.1" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "dagger" } -ksp = { id = "com.google.devtools.ksp", version = "1.9.21-1.0.15" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlintGradle" }