Skip to content

Commit

Permalink
Improve the helper to include dagger code generation.
Browse files Browse the repository at this point in the history
Add it to `app` and `appnav` modules.
  • Loading branch information
jmartinesp committed Sep 30, 2024
1 parent b447275 commit 84465b3
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 26 deletions.
13 changes: 6 additions & 7 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -233,6 +232,11 @@ knit {
}
}

setupAnvil(
generateDaggerCode = true,
generateDaggerFactoriesUsingAnvil = false,
)

dependencies {
allLibrariesImpl()
allServicesImpl()
Expand All @@ -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)
Expand All @@ -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)
Expand Down
10 changes: 3 additions & 7 deletions appnav/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,20 @@
@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")
}

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)
Expand Down
48 changes: 36 additions & 12 deletions plugins/src/main/kotlin/extension/AnvilExtensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,48 @@ package extension

import org.gradle.api.Project
import com.squareup.anvil.plugin.AnvilExtension
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.kotlin.dsl.the

/**
* Setup Anvil plugin with the given configuration.
* @param generateDaggerFactories whether to generate Dagger factories using Anvil
* @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(generateDaggerFactories: Boolean = true) {
plugins.apply("com.squareup.anvil")
fun Project.setupAnvil(
generateDaggerCode: Boolean = false,
generateDaggerFactoriesUsingAnvil: Boolean = true,
) {
val libs = the<LibrariesForLibs>()
// Apply plugins and dependencies
applyPluginIfNeeded("com.squareup.anvil")

if (generateDaggerCode) {
applyPluginIfNeeded("org.jetbrains.kotlin.kapt")
// Needed at the top level since dagger code should be generated at a single point for performance
dependencies.add("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.add("implementation", project.project(":anvilannotations"))
// Code generator for the annotations above
dependencies.add("anvil", project.project(":anvilcodegen"))
}

project.pluginManager.withPlugin("com.squareup.anvil") {
// Setup extension
extensions.configure(AnvilExtension::class.java) {
this.generateDaggerFactories.set(generateDaggerFactories)

// These dependencies are only needed for compose libraries
if (project.pluginManager.hasPlugin("io.element.android-compose-library")) {
// Annotations to generate DI code for Appyx nodes
dependencies.add("implementation", project.project(":anvilannotations"))
// Code generator for the annotations above
dependencies.add("anvil", project.project(":anvilcodegen"))
}
this.generateDaggerFactories.set(generateDaggerFactoriesUsingAnvil)
}
}
}

private fun Project.applyPluginIfNeeded(pluginId: String) {
if (!pluginManager.hasPlugin(pluginId)) {
pluginManager.apply(pluginId)
}
}

0 comments on commit 84465b3

Please sign in to comment.