From 2efdb3ae45cf42bb608e8be418ab259d62faea42 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Mon, 30 Sep 2024 14:20:28 +0200 Subject: [PATCH] Centralise the DI code generation logic (#3562) * Create Anvil extension helper * Use the helper everywhere --- app/build.gradle.kts | 13 ++-- appnav/build.gradle.kts | 10 +--- features/analytics/impl/build.gradle.kts | 9 +-- features/cachecleaner/impl/build.gradle.kts | 9 +-- features/call/impl/build.gradle.kts | 8 +-- features/createroom/impl/build.gradle.kts | 9 +-- features/deactivation/impl/build.gradle.kts | 9 +-- features/ftue/impl/build.gradle.kts | 9 +-- features/invite/impl/build.gradle.kts | 9 +-- features/joinroom/impl/build.gradle.kts | 9 +-- features/leaveroom/impl/build.gradle.kts | 9 +-- features/licenses/impl/build.gradle.kts | 8 +-- features/location/impl/build.gradle.kts | 9 +-- features/lockscreen/impl/build.gradle.kts | 9 +-- features/login/impl/build.gradle.kts | 9 +-- features/logout/impl/build.gradle.kts | 9 +-- features/messages/impl/build.gradle.kts | 9 +-- features/networkmonitor/impl/build.gradle.kts | 7 +-- features/onboarding/impl/build.gradle.kts | 9 +-- features/poll/impl/build.gradle.kts | 9 +-- features/preferences/impl/build.gradle.kts | 9 +-- features/rageshake/impl/build.gradle.kts | 9 +-- .../roomaliasresolver/impl/build.gradle.kts | 9 +-- features/roomdetails/impl/build.gradle.kts | 10 +--- features/roomdirectory/impl/build.gradle.kts | 8 +-- features/roomlist/impl/build.gradle.kts | 9 +-- features/securebackup/impl/build.gradle.kts | 10 +--- features/share/impl/build.gradle.kts | 10 +--- features/signedout/impl/build.gradle.kts | 9 +-- features/userprofile/impl/build.gradle.kts | 10 +--- features/userprofile/shared/build.gradle.kts | 10 +--- features/verifysession/impl/build.gradle.kts | 10 +--- features/viewfolder/impl/build.gradle.kts | 9 +-- gradle/libs.versions.toml | 1 + libraries/androidutils/build.gradle.kts | 9 +-- libraries/cryptography/impl/build.gradle.kts | 9 +-- libraries/dateformatter/impl/build.gradle.kts | 9 +-- libraries/deeplink/build.gradle.kts | 7 +-- .../eventformatter/impl/build.gradle.kts | 10 +--- libraries/featureflag/impl/build.gradle.kts | 7 +-- libraries/featureflag/ui/build.gradle.kts | 9 +-- .../fullscreenintent/impl/build.gradle.kts | 9 +-- libraries/indicator/impl/build.gradle.kts | 9 +-- libraries/matrix/api/build.gradle.kts | 7 +-- libraries/matrix/impl/build.gradle.kts | 7 +-- libraries/matrixui/build.gradle.kts | 9 +-- libraries/mediaplayer/api/build.gradle.kts | 7 +-- libraries/mediaplayer/impl/build.gradle.kts | 7 +-- libraries/mediaupload/api/build.gradle.kts | 48 +++++++-------- libraries/mediaupload/impl/build.gradle.kts | 56 ++++++++---------- libraries/mediaviewer/api/build.gradle.kts | 10 +--- libraries/mediaviewer/impl/build.gradle.kts | 10 +--- libraries/network/build.gradle.kts | 7 +-- libraries/oidc/impl/build.gradle.kts | 9 +-- libraries/permissions/impl/build.gradle.kts | 10 +--- libraries/preferences/impl/build.gradle.kts | 7 +-- libraries/push/impl/build.gradle.kts | 7 +-- .../pushproviders/firebase/build.gradle.kts | 7 +-- .../unifiedpush/build.gradle.kts | 7 +-- libraries/pushstore/impl/build.gradle.kts | 7 +-- libraries/roomselect/impl/build.gradle.kts | 9 +-- .../session-storage/impl/build.gradle.kts | 7 +-- libraries/textcomposer/impl/build.gradle.kts | 8 +-- libraries/troubleshoot/impl/build.gradle.kts | 9 +-- libraries/usersearch/impl/build.gradle.kts | 7 +-- libraries/voicerecorder/api/build.gradle.kts | 7 +-- libraries/voicerecorder/impl/build.gradle.kts | 7 +-- plugins/build.gradle.kts | 1 + .../main/kotlin/extension/AnvilExtensions.kt | 59 +++++++++++++++++++ .../kotlin/extension/DependencyHandleScope.kt | 2 + services/analytics/impl/build.gradle.kts | 9 +-- services/analytics/noop/build.gradle.kts | 7 +-- .../posthog/build.gradle.kts | 7 +-- .../sentry/build.gradle.kts | 7 +-- services/apperror/impl/build.gradle.kts | 8 +-- services/appnavstate/impl/build.gradle.kts | 9 +-- services/toolbox/impl/build.gradle.kts | 7 +-- 77 files changed, 327 insertions(+), 447 deletions(-) create mode 100644 plugins/src/main/kotlin/extension/AnvilExtensions.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c2c38ae219..c16d30f618 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -19,14 +19,13 @@ import extension.allLibrariesImpl import extension.allServicesImpl import extension.koverDependencies import extension.locales +import extension.setupAnvil import extension.setupKover import java.util.Locale plugins { id("io.element.android-compose-application") alias(libs.plugins.kotlin.android) - alias(libs.plugins.anvil) - alias(libs.plugins.kapt) // When using precompiled plugins, we need to apply the firebase plugin like this id(libs.plugins.firebaseAppDistribution.get().pluginId) alias(libs.plugins.knit) @@ -233,6 +232,11 @@ knit { } } +setupAnvil( + generateDaggerCode = true, + generateDaggerFactoriesUsingAnvil = false, +) + dependencies { allLibrariesImpl() allServicesImpl() @@ -244,11 +248,9 @@ dependencies { } allFeaturesImpl(rootDir, logger) implementation(projects.features.migration.api) - implementation(projects.anvilannotations) implementation(projects.appnav) implementation(projects.appconfig) implementation(projects.libraries.uiStrings) - anvil(projects.anvilcodegen) if (ModulesConfig.pushProvidersConfig.includeFirebase) { "gplayImplementation"(projects.libraries.pushproviders.firebase) @@ -274,9 +276,6 @@ dependencies { implementation(libs.matrix.emojibase.bindings) - implementation(libs.dagger) - kapt(libs.dagger.compiler) - testImplementation(libs.test.junit) testImplementation(libs.test.robolectric) testImplementation(libs.coroutines.test) diff --git a/appnav/build.gradle.kts b/appnav/build.gradle.kts index fd389645a9..6c35f8e3b9 100644 --- a/appnav/build.gradle.kts +++ b/appnav/build.gradle.kts @@ -8,11 +8,10 @@ @file:Suppress("UnstableApiUsage") import extension.allFeaturesApi +import extension.setupAnvil plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) - alias(libs.plugins.kapt) id("kotlin-parcelize") } @@ -20,12 +19,9 @@ android { namespace = "io.element.android.appnav" } -dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) - implementation(libs.dagger) - kapt(libs.dagger.compiler) +setupAnvil() +dependencies { allFeaturesApi(rootDir, logger) implementation(projects.libraries.core) diff --git a/features/analytics/impl/build.gradle.kts b/features/analytics/impl/build.gradle.kts index 6bae23dffe..fb23cefcf4 100644 --- a/features/analytics/impl/build.gradle.kts +++ b/features/analytics/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,13 +16,9 @@ android { namespace = "io.element.android.features.analytics.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/cachecleaner/impl/build.gradle.kts b/features/cachecleaner/impl/build.gradle.kts index e6e796dac4..07abbc564b 100644 --- a/features/cachecleaner/impl/build.gradle.kts +++ b/features/cachecleaner/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,20 +9,15 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.features.cachecleaner.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.cachecleaner.api) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/call/impl/build.gradle.kts b/features/call/impl/build.gradle.kts index 3dcb936f63..00077b1c83 100644 --- a/features/call/impl/build.gradle.kts +++ b/features/call/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") alias(libs.plugins.kotlin.serialization) } @@ -24,13 +25,10 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(projects.appconfig) - implementation(projects.anvilannotations) implementation(projects.libraries.architecture) implementation(projects.libraries.core) implementation(projects.libraries.designsystem) diff --git a/features/createroom/impl/build.gradle.kts b/features/createroom/impl/build.gradle.kts index 8a75d420e7..5c216894eb 100644 --- a/features/createroom/impl/build.gradle.kts +++ b/features/createroom/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -21,13 +22,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) diff --git a/features/deactivation/impl/build.gradle.kts b/features/deactivation/impl/build.gradle.kts index 25a71098ac..19b4815d13 100644 --- a/features/deactivation/impl/build.gradle.kts +++ b/features/deactivation/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -21,13 +22,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/ftue/impl/build.gradle.kts b/features/ftue/impl/build.gradle.kts index 442e7f1292..a4a0ef8f71 100644 --- a/features/ftue/impl/build.gradle.kts +++ b/features/ftue/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,13 +16,9 @@ android { namespace = "io.element.android.features.ftue.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.ftue.api) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) diff --git a/features/invite/impl/build.gradle.kts b/features/invite/impl/build.gradle.kts index 055695a0f0..d7bc86e3bf 100644 --- a/features/invite/impl/build.gradle.kts +++ b/features/invite/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,13 +16,9 @@ android { namespace = "io.element.android.features.invite.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.invite.api) implementation(libs.androidx.datastore.preferences) implementation(projects.libraries.core) diff --git a/features/joinroom/impl/build.gradle.kts b/features/joinroom/impl/build.gradle.kts index df1f4ed8fc..8f3bcb76ea 100644 --- a/features/joinroom/impl/build.gradle.kts +++ b/features/joinroom/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,13 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.joinroom.api) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/leaveroom/impl/build.gradle.kts b/features/leaveroom/impl/build.gradle.kts index 6ad62ec24a..2e5be64b8a 100644 --- a/features/leaveroom/impl/build.gradle.kts +++ b/features/leaveroom/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,20 +9,15 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.features.leaveroom.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) diff --git a/features/licenses/impl/build.gradle.kts b/features/licenses/impl/build.gradle.kts index a5aa02f3e6..36bbd7ef34 100644 --- a/features/licenses/impl/build.gradle.kts +++ b/features/licenses/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -16,13 +18,9 @@ android { namespace = "io.element.android.features.licenses.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(libs.serialization.json) implementation(projects.libraries.architecture) implementation(projects.libraries.designsystem) diff --git a/features/location/impl/build.gradle.kts b/features/location/impl/build.gradle.kts index eb8af94d6c..d4307015f5 100644 --- a/features/location/impl/build.gradle.kts +++ b/features/location/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { @@ -19,9 +20,7 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { api(projects.features.location.api) @@ -39,8 +38,6 @@ dependencies { implementation(libs.accompanist.permission) implementation(projects.libraries.uiStrings) implementation(libs.dagger) - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) testImplementation(libs.test.junit) testImplementation(libs.coroutines.test) diff --git a/features/lockscreen/impl/build.gradle.kts b/features/lockscreen/impl/build.gradle.kts index 6b17bdf0d1..a73958e41f 100644 --- a/features/lockscreen/impl/build.gradle.kts +++ b/features/lockscreen/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,13 +16,9 @@ android { namespace = "io.element.android.features.lockscreen.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.lockscreen.api) implementation(projects.appconfig) implementation(projects.libraries.core) diff --git a/features/login/impl/build.gradle.kts b/features/login/impl/build.gradle.kts index fc783e8733..04901f4fea 100644 --- a/features/login/impl/build.gradle.kts +++ b/features/login/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") alias(libs.plugins.kotlin.serialization) } @@ -22,14 +23,10 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) implementation(projects.appconfig) - anvil(projects.anvilcodegen) implementation(projects.libraries.core) implementation(projects.libraries.androidutils) implementation(projects.libraries.architecture) diff --git a/features/logout/impl/build.gradle.kts b/features/logout/impl/build.gradle.kts index f58ea1c8b9..0058bb8f37 100644 --- a/features/logout/impl/build.gradle.kts +++ b/features/logout/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { @@ -20,13 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/messages/impl/build.gradle.kts b/features/messages/impl/build.gradle.kts index f2a5e69f63..892c69ea2c 100644 --- a/features/messages/impl/build.gradle.kts +++ b/features/messages/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,13 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.messages.api) implementation(projects.appconfig) implementation(projects.features.call.api) diff --git a/features/networkmonitor/impl/build.gradle.kts b/features/networkmonitor/impl/build.gradle.kts index cedb7fcdad..8501968df8 100644 --- a/features/networkmonitor/impl/build.gradle.kts +++ b/features/networkmonitor/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,12 +9,9 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() android { namespace = "io.element.android.features.networkmonitor.impl" diff --git a/features/onboarding/impl/build.gradle.kts b/features/onboarding/impl/build.gradle.kts index ac57266e56..5025c28e9c 100644 --- a/features/onboarding/impl/build.gradle.kts +++ b/features/onboarding/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -21,13 +22,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.appconfig) implementation(projects.libraries.core) implementation(projects.libraries.androidutils) diff --git a/features/poll/impl/build.gradle.kts b/features/poll/impl/build.gradle.kts index dd0b9fa8e8..47009040da 100644 --- a/features/poll/impl/build.gradle.kts +++ b/features/poll/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,13 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.poll.api) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/preferences/impl/build.gradle.kts b/features/preferences/impl/build.gradle.kts index 44a792a625..7cd76442bf 100644 --- a/features/preferences/impl/build.gradle.kts +++ b/features/preferences/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,13 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.androidutils) implementation(projects.appconfig) implementation(projects.libraries.core) diff --git a/features/rageshake/impl/build.gradle.kts b/features/rageshake/impl/build.gradle.kts index 2ba2f1767d..6c2e4c9505 100644 --- a/features/rageshake/impl/build.gradle.kts +++ b/features/rageshake/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -21,13 +22,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.appconfig) implementation(projects.services.toolbox.api) implementation(projects.libraries.androidutils) diff --git a/features/roomaliasresolver/impl/build.gradle.kts b/features/roomaliasresolver/impl/build.gradle.kts index b2383820ea..22d5370b8c 100644 --- a/features/roomaliasresolver/impl/build.gradle.kts +++ b/features/roomaliasresolver/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,13 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.roomaliasresolver.api) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/roomdetails/impl/build.gradle.kts b/features/roomdetails/impl/build.gradle.kts index 2998a82dc5..c8bf9d36f1 100644 --- a/features/roomdetails/impl/build.gradle.kts +++ b/features/roomdetails/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,14 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) diff --git a/features/roomdirectory/impl/build.gradle.kts b/features/roomdirectory/impl/build.gradle.kts index 54f78949c4..6d05cad8e3 100644 --- a/features/roomdirectory/impl/build.gradle.kts +++ b/features/roomdirectory/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -20,13 +22,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.roomdirectory.api) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/roomlist/impl/build.gradle.kts b/features/roomlist/impl/build.gradle.kts index ce747859f5..d6b30a2b17 100644 --- a/features/roomlist/impl/build.gradle.kts +++ b/features/roomlist/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -21,13 +22,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.appconfig) implementation(projects.libraries.core) implementation(projects.libraries.androidutils) diff --git a/features/securebackup/impl/build.gradle.kts b/features/securebackup/impl/build.gradle.kts index f7250c768d..72ab706757 100644 --- a/features/securebackup/impl/build.gradle.kts +++ b/features/securebackup/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -21,14 +22,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(projects.appconfig) implementation(projects.libraries.core) implementation(projects.libraries.androidutils) diff --git a/features/share/impl/build.gradle.kts b/features/share/impl/build.gradle.kts index 33e85f88e4..24fe6231a9 100644 --- a/features/share/impl/build.gradle.kts +++ b/features/share/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -21,14 +22,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(projects.appconfig) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) diff --git a/features/signedout/impl/build.gradle.kts b/features/signedout/impl/build.gradle.kts index 8d8b3f518c..23707802ee 100644 --- a/features/signedout/impl/build.gradle.kts +++ b/features/signedout/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,13 +16,9 @@ android { namespace = "io.element.android.features.signedout.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) api(projects.features.signedout.api) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/features/userprofile/impl/build.gradle.kts b/features/userprofile/impl/build.gradle.kts index f647e29621..678684f4b9 100644 --- a/features/userprofile/impl/build.gradle.kts +++ b/features/userprofile/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,14 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) diff --git a/features/userprofile/shared/build.gradle.kts b/features/userprofile/shared/build.gradle.kts index f190b79956..18c668efe6 100644 --- a/features/userprofile/shared/build.gradle.kts +++ b/features/userprofile/shared/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,14 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) diff --git a/features/verifysession/impl/build.gradle.kts b/features/verifysession/impl/build.gradle.kts index 5be533a2ea..27aeaa7bc3 100644 --- a/features/verifysession/impl/build.gradle.kts +++ b/features/verifysession/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { @@ -19,14 +20,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) diff --git a/features/viewfolder/impl/build.gradle.kts b/features/viewfolder/impl/build.gradle.kts index 02cf4fc869..5f45cbeffc 100644 --- a/features/viewfolder/impl/build.gradle.kts +++ b/features/viewfolder/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,13 +16,9 @@ android { namespace = "io.element.android.features.viewfolder.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.androidutils) implementation(projects.libraries.architecture) implementation(projects.libraries.core) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 748fb1d161..510c8c0295 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -63,6 +63,7 @@ kover = "0.8.3" android_gradle_plugin = { module = "com.android.tools.build:gradle", version.ref = "android_gradle_plugin" } # https://developer.android.com/studio/write/java8-support#library-desugaring-versions android_desugar = "com.android.tools:desugar_jdk_libs:2.1.2" +anvil_gradle_plugin = { module = "com.squareup.anvil:gradle-plugin", version.ref = "anvil" } kotlin_gradle_plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kover_gradle_plugin = { module = "org.jetbrains.kotlinx:kover-gradle-plugin", version.ref = "kover" } gms_google_services = "com.google.gms:google-services:4.4.2" diff --git a/libraries/androidutils/build.gradle.kts b/libraries/androidutils/build.gradle.kts index 65d0499cc7..e6a9bf20f0 100644 --- a/libraries/androidutils/build.gradle.kts +++ b/libraries/androidutils/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { @@ -17,13 +18,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) implementation(projects.libraries.di) implementation(projects.libraries.core) diff --git a/libraries/cryptography/impl/build.gradle.kts b/libraries/cryptography/impl/build.gradle.kts index 2d1ed0ab55..8ce34477ab 100644 --- a/libraries/cryptography/impl/build.gradle.kts +++ b/libraries/cryptography/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,21 +9,16 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.cryptography.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) implementation(libs.dagger) - implementation(projects.anvilannotations) implementation(projects.libraries.di) api(projects.libraries.cryptography.api) diff --git a/libraries/dateformatter/impl/build.gradle.kts b/libraries/dateformatter/impl/build.gradle.kts index e28a30bd0b..eb05eb18e0 100644 --- a/libraries/dateformatter/impl/build.gradle.kts +++ b/libraries/dateformatter/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,21 +9,16 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() android { namespace = "io.element.android.libraries.dateformatter.impl" dependencies { - anvil(projects.anvilcodegen) implementation(libs.dagger) implementation(projects.libraries.di) - implementation(projects.anvilannotations) api(projects.libraries.dateformatter.api) api(libs.datetime) diff --git a/libraries/deeplink/build.gradle.kts b/libraries/deeplink/build.gradle.kts index 8a2f7e7095..565281fe50 100644 --- a/libraries/deeplink/build.gradle.kts +++ b/libraries/deeplink/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.deeplink" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(projects.libraries.di) diff --git a/libraries/eventformatter/impl/build.gradle.kts b/libraries/eventformatter/impl/build.gradle.kts index ec38194702..aa5713f745 100644 --- a/libraries/eventformatter/impl/build.gradle.kts +++ b/libraries/eventformatter/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { @@ -20,14 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) diff --git a/libraries/featureflag/impl/build.gradle.kts b/libraries/featureflag/impl/build.gradle.kts index 49597c8f99..b676acdd6e 100644 --- a/libraries/featureflag/impl/build.gradle.kts +++ b/libraries/featureflag/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,9 +16,7 @@ android { namespace = "io.element.android.libraries.featureflag.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { api(projects.libraries.featureflag.api) diff --git a/libraries/featureflag/ui/build.gradle.kts b/libraries/featureflag/ui/build.gradle.kts index 00979f3ad1..32b0d94b13 100644 --- a/libraries/featureflag/ui/build.gradle.kts +++ b/libraries/featureflag/ui/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,12 +16,8 @@ android { namespace = "io.element.android.libraries.featureflag.ui" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.designsystem) } diff --git a/libraries/fullscreenintent/impl/build.gradle.kts b/libraries/fullscreenintent/impl/build.gradle.kts index aabac1adee..a467e11fb2 100644 --- a/libraries/fullscreenintent/impl/build.gradle.kts +++ b/libraries/fullscreenintent/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,21 +9,16 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.fullscreenintent.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { api(projects.libraries.fullscreenintent.api) - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.permissions.api) diff --git a/libraries/indicator/impl/build.gradle.kts b/libraries/indicator/impl/build.gradle.kts index 9ee1faf615..770f2d1ed3 100644 --- a/libraries/indicator/impl/build.gradle.kts +++ b/libraries/indicator/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,24 +9,19 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() android { namespace = "io.element.android.libraries.indicator.impl" } dependencies { - anvil(projects.anvilcodegen) implementation(libs.dagger) implementation(projects.libraries.di) implementation(projects.libraries.featureflag.api) implementation(projects.libraries.matrix.api) - implementation(projects.anvilannotations) implementation(libs.coroutines.core) diff --git a/libraries/matrix/api/build.gradle.kts b/libraries/matrix/api/build.gradle.kts index 4c3b829949..cfdf2297ff 100644 --- a/libraries/matrix/api/build.gradle.kts +++ b/libraries/matrix/api/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -8,7 +10,6 @@ plugins { id("io.element.android-compose-library") id("kotlin-parcelize") - alias(libs.plugins.anvil) alias(libs.plugins.kotlin.serialization) } @@ -20,9 +21,7 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(projects.libraries.di) diff --git a/libraries/matrix/impl/build.gradle.kts b/libraries/matrix/impl/build.gradle.kts index ebad958bb7..35d746f572 100644 --- a/libraries/matrix/impl/build.gradle.kts +++ b/libraries/matrix/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) alias(libs.plugins.kotlin.serialization) } @@ -15,9 +16,7 @@ android { namespace = "io.element.android.libraries.matrix.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { releaseImplementation(libs.matrix.sdk) diff --git a/libraries/matrixui/build.gradle.kts b/libraries/matrixui/build.gradle.kts index 2ce1b84b2c..39e40733a8 100644 --- a/libraries/matrixui/build.gradle.kts +++ b/libraries/matrixui/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -20,13 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.di) implementation(projects.libraries.architecture) implementation(projects.libraries.androidutils) diff --git a/libraries/mediaplayer/api/build.gradle.kts b/libraries/mediaplayer/api/build.gradle.kts index 5e090b2f99..dcf0473c50 100644 --- a/libraries/mediaplayer/api/build.gradle.kts +++ b/libraries/mediaplayer/api/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.mediaplayer.api" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(projects.libraries.matrix.api) diff --git a/libraries/mediaplayer/impl/build.gradle.kts b/libraries/mediaplayer/impl/build.gradle.kts index 1ef6cc084d..87340c314b 100644 --- a/libraries/mediaplayer/impl/build.gradle.kts +++ b/libraries/mediaplayer/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.mediaplayer.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { api(projects.libraries.mediaplayer.api) diff --git a/libraries/mediaupload/api/build.gradle.kts b/libraries/mediaupload/api/build.gradle.kts index d89e0d976f..34e409d0aa 100644 --- a/libraries/mediaupload/api/build.gradle.kts +++ b/libraries/mediaupload/api/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,34 +9,28 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } +setupAnvil() + android { namespace = "io.element.android.libraries.mediaupload.api" - - anvil { - generateDaggerFactories.set(true) - } - - dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) - - implementation(projects.libraries.architecture) - implementation(projects.libraries.androidutils) - implementation(projects.libraries.core) - implementation(projects.libraries.di) - api(projects.libraries.matrix.api) - implementation(libs.inject) - implementation(libs.coroutines.core) - - testImplementation(projects.libraries.matrix.test) - testImplementation(projects.libraries.mediaupload.test) - testImplementation(projects.tests.testutils) - testImplementation(libs.test.junit) - testImplementation(libs.test.truth) - testImplementation(libs.coroutines.test) - testImplementation(libs.test.robolectric) - } +} + +dependencies { + implementation(projects.libraries.architecture) + implementation(projects.libraries.androidutils) + implementation(projects.libraries.core) + implementation(projects.libraries.di) + api(projects.libraries.matrix.api) + implementation(libs.inject) + implementation(libs.coroutines.core) + + testImplementation(projects.libraries.matrix.test) + testImplementation(projects.libraries.mediaupload.test) + testImplementation(projects.tests.testutils) + testImplementation(libs.test.junit) + testImplementation(libs.test.truth) + testImplementation(libs.coroutines.test) + testImplementation(libs.test.robolectric) } diff --git a/libraries/mediaupload/impl/build.gradle.kts b/libraries/mediaupload/impl/build.gradle.kts index 0cebef2873..f2bdc6abaf 100644 --- a/libraries/mediaupload/impl/build.gradle.kts +++ b/libraries/mediaupload/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,44 +9,38 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.mediaupload.impl" - anvil { - generateDaggerFactories.set(true) - } - testOptions { unitTests { isIncludeAndroidResources = true } } - - dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) - - api(projects.libraries.mediaupload.api) - implementation(projects.libraries.architecture) - implementation(projects.libraries.androidutils) - implementation(projects.libraries.core) - implementation(projects.libraries.di) - implementation(projects.libraries.matrix.api) - implementation(projects.services.toolbox.api) - implementation(libs.inject) - implementation(libs.androidx.exifinterface) - implementation(libs.coroutines.core) - implementation(libs.otaliastudios.transcoder) - implementation(libs.vanniktech.blurhash) - - testImplementation(libs.test.junit) - testImplementation(libs.test.robolectric) - testImplementation(libs.coroutines.test) - testImplementation(libs.test.truth) - testImplementation(projects.tests.testutils) - testImplementation(projects.services.toolbox.test) - } +} + +setupAnvil() + +dependencies { + api(projects.libraries.mediaupload.api) + implementation(projects.libraries.architecture) + implementation(projects.libraries.androidutils) + implementation(projects.libraries.core) + implementation(projects.libraries.di) + implementation(projects.libraries.matrix.api) + implementation(projects.services.toolbox.api) + implementation(libs.inject) + implementation(libs.androidx.exifinterface) + implementation(libs.coroutines.core) + implementation(libs.otaliastudios.transcoder) + implementation(libs.vanniktech.blurhash) + + testImplementation(libs.test.junit) + testImplementation(libs.test.robolectric) + testImplementation(libs.coroutines.test) + testImplementation(libs.test.truth) + testImplementation(projects.tests.testutils) + testImplementation(projects.services.toolbox.test) } diff --git a/libraries/mediaviewer/api/build.gradle.kts b/libraries/mediaviewer/api/build.gradle.kts index c37edb1781..d55528bbe3 100644 --- a/libraries/mediaviewer/api/build.gradle.kts +++ b/libraries/mediaviewer/api/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -19,14 +20,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(libs.coil.compose) implementation(libs.androidx.media3.exoplayer) implementation(libs.androidx.media3.ui) diff --git a/libraries/mediaviewer/impl/build.gradle.kts b/libraries/mediaviewer/impl/build.gradle.kts index f282064ec6..a814f64ab7 100644 --- a/libraries/mediaviewer/impl/build.gradle.kts +++ b/libraries/mediaviewer/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -14,14 +15,9 @@ android { namespace = "io.element.android.libraries.mediaviewer.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(libs.coroutines.core) implementation(libs.dagger) diff --git a/libraries/network/build.gradle.kts b/libraries/network/build.gradle.kts index 06fd48849c..b31a8ffce4 100644 --- a/libraries/network/build.gradle.kts +++ b/libraries/network/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { @@ -19,9 +20,7 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/libraries/oidc/impl/build.gradle.kts b/libraries/oidc/impl/build.gradle.kts index 10f7af2641..d99aff121e 100644 --- a/libraries/oidc/impl/build.gradle.kts +++ b/libraries/oidc/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") alias(libs.plugins.kotlin.serialization) } @@ -22,14 +23,10 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) implementation(projects.appconfig) - anvil(projects.anvilcodegen) implementation(projects.libraries.core) implementation(projects.libraries.androidutils) implementation(projects.libraries.architecture) diff --git a/libraries/permissions/impl/build.gradle.kts b/libraries/permissions/impl/build.gradle.kts index 4ce6eab894..64a67126c2 100644 --- a/libraries/permissions/impl/build.gradle.kts +++ b/libraries/permissions/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { @@ -20,14 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.anvilannotations) - implementation(libs.accompanist.permission) implementation(libs.androidx.datastore.preferences) diff --git a/libraries/preferences/impl/build.gradle.kts b/libraries/preferences/impl/build.gradle.kts index deb377cea7..5425a0b179 100644 --- a/libraries/preferences/impl/build.gradle.kts +++ b/libraries/preferences/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,16 +9,13 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.preferences.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { api(projects.libraries.preferences.api) diff --git a/libraries/push/impl/build.gradle.kts b/libraries/push/impl/build.gradle.kts index 51758bc928..74d6ba3182 100644 --- a/libraries/push/impl/build.gradle.kts +++ b/libraries/push/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) alias(libs.plugins.kotlin.serialization) } @@ -20,9 +21,7 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/libraries/pushproviders/firebase/build.gradle.kts b/libraries/pushproviders/firebase/build.gradle.kts index 00c8feb49e..91fdd91816 100644 --- a/libraries/pushproviders/firebase/build.gradle.kts +++ b/libraries/pushproviders/firebase/build.gradle.kts @@ -7,9 +7,10 @@ @file:Suppress("UnstableApiUsage") +import extension.setupAnvil + plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { @@ -55,9 +56,7 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index 489de1ac69..737660bed8 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) alias(libs.plugins.kotlin.serialization) } @@ -14,9 +15,7 @@ android { namespace = "io.element.android.libraries.pushproviders.unifiedpush" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/libraries/pushstore/impl/build.gradle.kts b/libraries/pushstore/impl/build.gradle.kts index 572d49fe4a..cca5f3445a 100644 --- a/libraries/pushstore/impl/build.gradle.kts +++ b/libraries/pushstore/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { @@ -18,9 +19,7 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/libraries/roomselect/impl/build.gradle.kts b/libraries/roomselect/impl/build.gradle.kts index 4d42fef311..8cd30963ef 100644 --- a/libraries/roomselect/impl/build.gradle.kts +++ b/libraries/roomselect/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,13 +16,9 @@ android { namespace = "io.element.android.libraries.roomselect.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(projects.libraries.core) implementation(projects.libraries.androidutils) implementation(projects.libraries.architecture) diff --git a/libraries/session-storage/impl/build.gradle.kts b/libraries/session-storage/impl/build.gradle.kts index 8d018147a3..3170b3dcaa 100644 --- a/libraries/session-storage/impl/build.gradle.kts +++ b/libraries/session-storage/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) alias(libs.plugins.sqldelight) } @@ -14,9 +15,7 @@ android { namespace = "io.element.android.libraries.sessionstorage.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/libraries/textcomposer/impl/build.gradle.kts b/libraries/textcomposer/impl/build.gradle.kts index e4afcc2004..67ad45d5a5 100644 --- a/libraries/textcomposer/impl/build.gradle.kts +++ b/libraries/textcomposer/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -18,12 +19,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) implementation(projects.libraries.architecture) implementation(projects.libraries.uiStrings) implementation(projects.libraries.androidutils) diff --git a/libraries/troubleshoot/impl/build.gradle.kts b/libraries/troubleshoot/impl/build.gradle.kts index 03e6cdb3d8..24f981d9c7 100644 --- a/libraries/troubleshoot/impl/build.gradle.kts +++ b/libraries/troubleshoot/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,7 +8,6 @@ */ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) alias(libs.plugins.kotlin.serialization) } @@ -20,13 +21,9 @@ android { } } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - implementation(projects.anvilannotations) - anvil(projects.anvilcodegen) implementation(libs.dagger) implementation(projects.libraries.architecture) implementation(projects.libraries.designsystem) diff --git a/libraries/usersearch/impl/build.gradle.kts b/libraries/usersearch/impl/build.gradle.kts index 028088db30..751d1b1672 100644 --- a/libraries/usersearch/impl/build.gradle.kts +++ b/libraries/usersearch/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,16 +9,13 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.usersearch.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(projects.libraries.core) diff --git a/libraries/voicerecorder/api/build.gradle.kts b/libraries/voicerecorder/api/build.gradle.kts index 031142916b..ccf8ea0168 100644 --- a/libraries/voicerecorder/api/build.gradle.kts +++ b/libraries/voicerecorder/api/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.voicerecorder.api" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.androidx.annotationjvm) diff --git a/libraries/voicerecorder/impl/build.gradle.kts b/libraries/voicerecorder/impl/build.gradle.kts index e7d9dd4489..6ffab72993 100644 --- a/libraries/voicerecorder/impl/build.gradle.kts +++ b/libraries/voicerecorder/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.libraries.voicerecorder.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { api(projects.libraries.voicerecorder.api) diff --git a/plugins/build.gradle.kts b/plugins/build.gradle.kts index cadcc1bcad..edfd1428da 100644 --- a/plugins/build.gradle.kts +++ b/plugins/build.gradle.kts @@ -22,4 +22,5 @@ dependencies { implementation(libs.firebase.appdistribution.gradle) implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) implementation(libs.autonomousapps.dependencyanalysis.plugin) + implementation(libs.anvil.gradle.plugin) } diff --git a/plugins/src/main/kotlin/extension/AnvilExtensions.kt b/plugins/src/main/kotlin/extension/AnvilExtensions.kt new file mode 100644 index 0000000000..33f058d25e --- /dev/null +++ b/plugins/src/main/kotlin/extension/AnvilExtensions.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package extension + +import com.squareup.anvil.plugin.AnvilExtension +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.api.Project +import org.gradle.api.provider.Provider +import org.gradle.kotlin.dsl.the +import org.gradle.plugin.use.PluginDependency + +/** + * Setup Anvil plugin with the given configuration. + * @param generateDaggerCode whether to enable general Dagger code generation using Kapt + * @param generateDaggerFactoriesUsingAnvil whether to generate Dagger factories using Anvil instead of Kapt + */ +fun Project.setupAnvil( + generateDaggerCode: Boolean = false, + generateDaggerFactoriesUsingAnvil: Boolean = true, +) { + val libs = the() + // Apply plugins and dependencies + applyPluginIfNeeded(libs.plugins.anvil) + + if (generateDaggerCode) { + applyPluginIfNeeded(libs.plugins.kapt) + // Needed at the top level since dagger code should be generated at a single point for performance + dependencies.implementation(libs.dagger) + dependencies.add("kapt", libs.dagger.compiler) + } + + // These dependencies are only needed for compose library or application modules + if (project.pluginManager.hasPlugin("io.element.android-compose-library") + || project.pluginManager.hasPlugin("io.element.android-compose-application")) { + // Annotations to generate DI code for Appyx nodes + dependencies.implementation(project.project(":anvilannotations")) + // Code generator for the annotations above + dependencies.add("anvil", project.project(":anvilcodegen")) + } + + project.pluginManager.withPlugin(libs.plugins.anvil.get().pluginId) { + // Setup extension + extensions.configure(AnvilExtension::class.java) { + this.generateDaggerFactories.set(generateDaggerFactoriesUsingAnvil) + } + } +} + +private fun Project.applyPluginIfNeeded(plugin: Provider) { + val pluginId = plugin.get().pluginId + if (!pluginManager.hasPlugin(pluginId)) { + pluginManager.apply(pluginId) + } +} diff --git a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt index fef1ea147a..554095323a 100644 --- a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt +++ b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt @@ -12,6 +12,7 @@ import ModulesConfig import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.api.Action import org.gradle.api.artifacts.ExternalModuleDependency +import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.logging.Logger import org.gradle.kotlin.dsl.DependencyHandlerScope import org.gradle.kotlin.dsl.closureOf @@ -19,6 +20,7 @@ import org.gradle.kotlin.dsl.project import java.io.File private fun DependencyHandlerScope.implementation(dependency: Any) = dependencies.add("implementation", dependency) +internal fun DependencyHandler.implementation(dependency: Any) = add("implementation", dependency) // Implementation + config block private fun DependencyHandlerScope.implementation( diff --git a/services/analytics/impl/build.gradle.kts b/services/analytics/impl/build.gradle.kts index 356197730d..d129ad7b13 100644 --- a/services/analytics/impl/build.gradle.kts +++ b/services/analytics/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -7,7 +9,6 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) id("kotlin-parcelize") } @@ -15,13 +16,9 @@ android { namespace = "io.element.android.services.analytics.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { - anvil(projects.anvilcodegen) - implementation(projects.libraries.androidutils) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/services/analytics/noop/build.gradle.kts b/services/analytics/noop/build.gradle.kts index 1b20650a92..ee475c0e51 100644 --- a/services/analytics/noop/build.gradle.kts +++ b/services/analytics/noop/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.services.analytics.noop" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/services/analyticsproviders/posthog/build.gradle.kts b/services/analyticsproviders/posthog/build.gradle.kts index 2297094cd3..dbd620b40b 100644 --- a/services/analyticsproviders/posthog/build.gradle.kts +++ b/services/analyticsproviders/posthog/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.services.analyticsproviders.posthog" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/services/analyticsproviders/sentry/build.gradle.kts b/services/analyticsproviders/sentry/build.gradle.kts index fb7dc36292..25c6953a2e 100644 --- a/services/analyticsproviders/sentry/build.gradle.kts +++ b/services/analyticsproviders/sentry/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.services.analyticsproviders.sentry" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger) diff --git a/services/apperror/impl/build.gradle.kts b/services/apperror/impl/build.gradle.kts index 83e6cca33e..e20709ef9d 100644 --- a/services/apperror/impl/build.gradle.kts +++ b/services/apperror/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,19 +9,15 @@ plugins { id("io.element.android-compose-library") - alias(libs.plugins.anvil) } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() android { namespace = "io.element.android.services.apperror.impl" } dependencies { - anvil(projects.anvilcodegen) implementation(libs.dagger) implementation(projects.libraries.core) implementation(projects.libraries.di) diff --git a/services/appnavstate/impl/build.gradle.kts b/services/appnavstate/impl/build.gradle.kts index 6f7df870de..b26cc8dc5b 100644 --- a/services/appnavstate/impl/build.gradle.kts +++ b/services/appnavstate/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -7,24 +9,19 @@ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() android { namespace = "io.element.android.services.appnavstate.impl" } dependencies { - anvil(projects.anvilcodegen) implementation(libs.dagger) implementation(projects.libraries.core) implementation(projects.libraries.di) implementation(projects.libraries.matrix.api) - implementation(projects.anvilannotations) implementation(libs.coroutines.core) implementation(libs.androidx.corektx) diff --git a/services/toolbox/impl/build.gradle.kts b/services/toolbox/impl/build.gradle.kts index 27d5f43bf4..917437f50a 100644 --- a/services/toolbox/impl/build.gradle.kts +++ b/services/toolbox/impl/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -6,16 +8,13 @@ */ plugins { id("io.element.android-library") - alias(libs.plugins.anvil) } android { namespace = "io.element.android.services.toolbox.impl" } -anvil { - generateDaggerFactories.set(true) -} +setupAnvil() dependencies { implementation(libs.dagger)