17
17
package dagger.hilt.android.plugin.util
18
18
19
19
import com.android.build.api.variant.ComponentIdentity
20
- import com.google.devtools.ksp.gradle.KspTaskJvm
20
+ import com.google.devtools.ksp.gradle.KspAATask
21
+ import com.google.devtools.ksp.gradle.KspTask
22
+ import kotlin.reflect.KClass
21
23
import org.gradle.api.Project
22
24
import org.gradle.api.Task
23
25
import org.gradle.api.tasks.compile.JavaCompile
@@ -73,7 +75,7 @@ internal fun addKspTaskProcessorOptions(
73
75
variantIdentity : ComponentIdentity ,
74
76
produceArgProvider : (Task ) -> CommandLineArgumentProvider
75
77
) = project.plugins.withId(" com.google.devtools.ksp" ) {
76
- checkClass( " com.google.devtools.ksp.gradle.KspTaskJvm " ) {
78
+ check(kspOneTaskClass != null || kspTwoTaskClass != null ) {
77
79
"""
78
80
The KSP plugin was detected to be applied but its task class could not be found.
79
81
@@ -85,13 +87,25 @@ internal fun addKspTaskProcessorOptions(
85
87
See https://github.com/google/dagger/issues/3965 for more details.
86
88
""" .trimIndent()
87
89
}
88
- project.tasks.withType(KspTaskJvm ::class .java).configureEach { task ->
89
- if (task.name == " ksp${variantIdentity.name.capitalize()} Kotlin" ||
90
+ fun <T : Task > configureEach (
91
+ kclass : KClass <T >,
92
+ block : T .(CommandLineArgumentProvider ) -> Unit
93
+ ) {
94
+ project.tasks.withType(kclass.java).configureEach { task ->
95
+ if (task.name == " ksp${variantIdentity.name.capitalize()} Kotlin" ||
90
96
// Task names in shared/src/AndroidMain in KMP projects has a platform suffix.
91
97
task.name == " ksp${variantIdentity.name.capitalize()} KotlinAndroid" ) {
92
- task.commandLineArgumentProviders.add(produceArgProvider.invoke(task))
98
+ val argProvider = produceArgProvider.invoke(task)
99
+ task.block(argProvider)
100
+ }
93
101
}
94
102
}
103
+ if (kspOneTaskClass != null ) {
104
+ configureEach(KspTask ::class ) { commandLineArgumentProviders.add(it) }
105
+ }
106
+ if (kspTwoTaskClass != null ) {
107
+ configureEach(KspAATask ::class ) { commandLineArgumentProviders.add(it) }
108
+ }
95
109
}
96
110
97
111
private inline fun checkClass (fqn : String , msg : () -> String ) {
@@ -102,10 +116,21 @@ private inline fun checkClass(fqn: String, msg: () -> String) {
102
116
}
103
117
}
104
118
105
- internal fun Task.isKspTask (): Boolean = try {
106
- val kspTaskClass = Class .forName(" com.google.devtools.ksp.gradle.KspTask" )
107
- kspTaskClass.isAssignableFrom(this ::class .java)
108
- } catch (ex: ClassNotFoundException ) {
109
- false
110
- }
119
+ private val kspOneTaskClass =
120
+ try {
121
+ Class .forName(" com.google.devtools.ksp.gradle.KspTask" )
122
+ } catch (ex: ClassNotFoundException ) {
123
+ null
124
+ }
125
+
126
+ private val kspTwoTaskClass =
127
+ try {
128
+ Class .forName(" com.google.devtools.ksp.gradle.KspAATask" )
129
+ } catch (ex: ClassNotFoundException ) {
130
+ null
131
+ }
132
+
133
+ internal fun Task.isKspTask () =
134
+ kspOneTaskClass?.isAssignableFrom(this ::class .java) == true ||
135
+ kspTwoTaskClass?.isAssignableFrom(this ::class .java) == true
111
136
0 commit comments