1717package dagger.hilt.android.plugin.util
1818
1919import 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
2123import org.gradle.api.Project
2224import org.gradle.api.Task
2325import org.gradle.api.tasks.compile.JavaCompile
@@ -73,7 +75,7 @@ internal fun addKspTaskProcessorOptions(
7375 variantIdentity : ComponentIdentity ,
7476 produceArgProvider : (Task ) -> CommandLineArgumentProvider
7577) = project.plugins.withId(" com.google.devtools.ksp" ) {
76- checkClass( " com.google.devtools.ksp.gradle.KspTaskJvm " ) {
78+ check(kspOneTaskClass != null || kspTwoTaskClass != null ) {
7779 """
7880 The KSP plugin was detected to be applied but its task class could not be found.
7981
@@ -85,13 +87,25 @@ internal fun addKspTaskProcessorOptions(
8587 See https://github.com/google/dagger/issues/3965 for more details.
8688 """ .trimIndent()
8789 }
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" ||
9096 // Task names in shared/src/AndroidMain in KMP projects has a platform suffix.
9197 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+ }
93101 }
94102 }
103+ if (kspOneTaskClass != null ) {
104+ configureEach(KspTask ::class ) { commandLineArgumentProviders.add(it) }
105+ }
106+ if (kspTwoTaskClass != null ) {
107+ configureEach(KspAATask ::class ) { commandLineArgumentProviders.add(it) }
108+ }
95109}
96110
97111private inline fun checkClass (fqn : String , msg : () -> String ) {
@@ -102,10 +116,21 @@ private inline fun checkClass(fqn: String, msg: () -> String) {
102116 }
103117}
104118
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
111136
0 commit comments