Skip to content

Commit 137e12a

Browse files
trexemDagger Team
authored andcommitted
Allow to override the enableFastInit flag via command line for Hilt.
RELNOTES=Allowed overriding enableFastInit via command line PiperOrigin-RevId: 877472982
1 parent 1990bd1 commit 137e12a

3 files changed

Lines changed: 64 additions & 36 deletions

File tree

java/dagger/hilt/android/plugin/main/src/main/kotlin/dagger/hilt/android/plugin/HiltCommandLineArgumentProvider.kt

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,39 +20,38 @@ import dagger.hilt.processor.internal.optionvalues.GradleProjectType
2020
import org.gradle.api.tasks.Input
2121
import org.gradle.process.CommandLineArgumentProvider
2222

23-
/**
24-
* Plugin configured annotation processor options provider.
25-
*/
23+
/** Plugin configured annotation processor options provider. */
2624
internal class HiltCommandLineArgumentProvider(
27-
@get:Input
28-
val forKsp: Boolean,
29-
@get:Input
30-
val projectType: GradleProjectType,
31-
@get:Input
32-
val enableAggregatingTask: Boolean,
33-
@get:Input
34-
val disableCrossCompilationRootValidation: Boolean
35-
): CommandLineArgumentProvider {
25+
@get:Input val forKsp: Boolean,
26+
@get:Input val projectType: GradleProjectType,
27+
@get:Input val enableAggregatingTask: Boolean,
28+
@get:Input val disableCrossCompilationRootValidation: Boolean,
29+
@get:Input val enableFastInit: Boolean,
30+
) : CommandLineArgumentProvider {
3631

3732
private val prefix = if (forKsp) "" else "-A"
3833

39-
override fun asArguments() = buildMap {
40-
// Enable Dagger's fast-init, the best mode for Hilt.
41-
put("dagger.fastInit", "enabled")
42-
// Disable @AndroidEntryPoint superclass validation.
43-
put("dagger.hilt.android.internal.disableAndroidSuperclassValidation", "true")
44-
// Report project type for root validation.
45-
put("dagger.hilt.android.internal.projectType", projectType.toString())
34+
override fun asArguments() =
35+
buildMap {
36+
// Enable Dagger's fast-init, the best mode for Hilt.
37+
if (enableFastInit) {
38+
put("dagger.fastInit", "enabled")
39+
}
40+
// Disable @AndroidEntryPoint superclass validation.
41+
put("dagger.hilt.android.internal.disableAndroidSuperclassValidation", "true")
42+
// Report project type for root validation.
43+
put("dagger.hilt.android.internal.projectType", projectType.toString())
4644

47-
// Disable the aggregating processor if aggregating task is enabled.
48-
if (enableAggregatingTask) {
49-
put("dagger.hilt.internal.useAggregatingRootProcessor", "false")
50-
}
51-
// Disable cross compilation root validation.
52-
// The plugin option duplicates the processor flag because it is an input of the
53-
// aggregating task.
54-
if (disableCrossCompilationRootValidation) {
55-
put("dagger.hilt.disableCrossCompilationRootValidation", "true")
56-
}
57-
}.map { (key, value) -> "$prefix$key=$value" }
58-
}
45+
// Disable the aggregating processor if aggregating task is enabled.
46+
if (enableAggregatingTask) {
47+
put("dagger.hilt.internal.useAggregatingRootProcessor", "false")
48+
}
49+
// Disable cross compilation root validation.
50+
// The plugin option duplicates the processor flag because it is an input of the
51+
// aggregating task.
52+
if (disableCrossCompilationRootValidation) {
53+
put("dagger.hilt.disableCrossCompilationRootValidation", "true")
54+
}
55+
}
56+
.map { (key, value) -> "$prefix$key=$value" }
57+
}

java/dagger/hilt/android/plugin/main/src/main/kotlin/dagger/hilt/android/plugin/HiltExtension.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@ interface HiltExtension {
3939
*
4040
* This flag is not necessary when com.android.tools.build:gradle:4.2.0+ is used.
4141
*/
42-
@Deprecated("Since Hilt Android Gradle plugin requires the usage of the Android " +
42+
@Deprecated(
43+
"Since Hilt Android Gradle plugin requires the usage of the Android " +
4344
"Gradle plugin (AGP) version 7.0 or higher this option is no longer necessary and has no " +
44-
"effect in the configuration.")
45+
"effect in the configuration."
46+
)
4547
var enableTransformForLocalTests: Boolean
4648

4749
/**
@@ -66,9 +68,11 @@ interface HiltExtension {
6668

6769
internal open class HiltExtensionImpl : HiltExtension {
6870
override var enableExperimentalClasspathAggregation: Boolean = false
69-
@Deprecated("Since Hilt Android Gradle plugin requires the usage of the Android " +
71+
@Deprecated(
72+
"Since Hilt Android Gradle plugin requires the usage of the Android " +
7073
"Gradle plugin (AGP) version 7.0 or higher this option is no longer necessary and has no " +
71-
"effect in the configuration.")
74+
"effect in the configuration."
75+
)
7276
override var enableTransformForLocalTests: Boolean = false
7377
override var enableAggregatingTask: Boolean = true
7478
override var disableCrossCompilationRootValidation: Boolean = false

java/dagger/hilt/android/plugin/main/src/main/kotlin/dagger/hilt/android/plugin/HiltGradlePlugin.kt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,6 @@ class HiltGradlePlugin @Inject constructor(private val providers: ProviderFactor
353353
if (commonExtension.compileOptions.isJava8Compatible()) {
354354
compilerArgs.add("-parameters")
355355
}
356-
compilerArgs.add("-Adagger.fastInit=enabled")
357356
compilerArgs.add("-Adagger.hilt.internal.useAggregatingRootProcessor=false")
358357
compilerArgs.add("-Adagger.hilt.android.internal.disableAndroidSuperclassValidation=true")
359358
encoding = commonExtension.compileOptions.encoding
@@ -403,6 +402,19 @@ class HiltGradlePlugin @Inject constructor(private val providers: ProviderFactor
403402
}
404403

405404
androidExtension.onAllVariants { variant, _ ->
405+
// Error if the user is trying to set the fastInit flag via build file.
406+
if (
407+
variant.javaCompilation
408+
?.annotationProcessor
409+
?.arguments
410+
?.get()
411+
?.containsKey("dagger.fastInit") ?: false
412+
) {
413+
error(
414+
"[Hilt]: The flag 'dagger.fastInit' can only be set via command line. i.e. " +
415+
"add '-Pdagger.fastInit=enabled' to your command line."
416+
)
417+
}
406418
// Pass annotation processor flags via a CommandLineArgumentProvider so that plugin
407419
// options defined in the extension are populated from the user's build file.
408420
val argsProducer: (Task) -> CommandLineArgumentProvider = { task ->
@@ -411,6 +423,7 @@ class HiltGradlePlugin @Inject constructor(private val providers: ProviderFactor
411423
projectType = projectType,
412424
enableAggregatingTask = isAggregatingTaskEnabled(),
413425
disableCrossCompilationRootValidation = !isCrossCompilationRootValidationEnabled(),
426+
enableFastInit = isFastInitEnabled(),
414427
)
415428
}
416429
addJavaTaskProcessorOptions(project, variant, argsProducer)
@@ -530,4 +543,16 @@ private class HiltPluginEnvironment(
530543

531544
fun isCrossCompilationRootValidationEnabled() =
532545
!hiltExtension.disableCrossCompilationRootValidation
546+
547+
fun isFastInitEnabled(): Boolean {
548+
// Always allow overriding from the command line.
549+
val cmdOverride = project.findProperty("dagger.hilt.fastInit")?.toString()?.toBoolean()
550+
if (cmdOverride != null) {
551+
project.logger.info(
552+
"[Hilt] Overriding dagger.hilt.fastInit to $cmdOverride from command line."
553+
)
554+
return cmdOverride
555+
}
556+
return true
557+
}
533558
}

0 commit comments

Comments
 (0)