Skip to content

Commit 2c885af

Browse files
hfmehmedKSP Auto Pick
authored andcommitted
Fix regression related to no class found in AGP 8.7 and below
(cherry picked from commit 6975c18)
1 parent e90daa5 commit 2c885af

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.google.devtools.ksp.gradle
22

3-
import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget
43
import com.google.devtools.ksp.gradle.AndroidPluginIntegration.useLegacyVariantApi
54
import org.gradle.api.InvalidUserCodeException
65
import org.gradle.api.Project
76
import org.gradle.api.artifacts.Configuration
87
import org.jetbrains.kotlin.gradle.dsl.*
98
import org.jetbrains.kotlin.gradle.plugin.*
9+
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
1010
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCommonCompilation
1111
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
1212

@@ -148,9 +148,7 @@ class KspConfigurations(private val project: Project) {
148148
* and things get worse when you add product flavors. So, we use AGP sets as the source of truth.
149149
*/
150150
private fun decorateKotlinTarget(target: KotlinTarget, isKotlinMultiplatform: Boolean) {
151-
if (target.platformType == KotlinPlatformType.androidJvm &&
152-
target !is KotlinMultiplatformAndroidLibraryTarget
153-
) {
151+
if (isPlainAndroidTarget(target) || isOldKmpAndroidTarget(target)) {
154152
if (project.useLegacyVariantApi() || isKotlinMultiplatform) {
155153
createAndroidSourceSetConfigurations(target.project, target)
156154
}
@@ -166,6 +164,24 @@ class KspConfigurations(private val project: Project) {
166164
}
167165
}
168166

167+
// check if this target is the old implementation of android kmp target (using com.android.library)
168+
// org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
169+
private fun isOldKmpAndroidTarget(target: KotlinTarget): Boolean {
170+
val isKotlinAndroidTargetClass = try {
171+
target is KotlinAndroidTarget
172+
} catch (e: Throwable) {
173+
false
174+
}
175+
return target.platformType == KotlinPlatformType.androidJvm &&
176+
isMppProject() && isKotlinAndroidTargetClass
177+
}
178+
179+
private fun isPlainAndroidTarget(target: KotlinTarget): Boolean {
180+
return target.platformType == KotlinPlatformType.androidJvm && !isMppProject()
181+
}
182+
183+
private fun isMppProject() = project.pluginManager.hasPlugin("kotlin-multiplatform")
184+
169185
/**
170186
* Returns the user-facing configurations involved in the given compilation.
171187
* We use [KotlinCompilation.kotlinSourceSets], not [KotlinCompilation.allKotlinSourceSets] for a few reasons:
@@ -184,9 +200,8 @@ class KspConfigurations(private val project: Project) {
184200
compilation.kotlinSourceSets.mapTo(results) {
185201
getKotlinConfigurationName(compilation, it)
186202
}
187-
if (compilation.platformType == KotlinPlatformType.androidJvm &&
188-
compilation.target !is KotlinMultiplatformAndroidLibraryTarget
189-
) {
203+
204+
if (isPlainAndroidTarget(compilation.target) || isOldKmpAndroidTarget(compilation.target)) {
190205
compilation as KotlinJvmAndroidCompilation
191206
AndroidPluginIntegration.getCompilationSourceSets(compilation).mapTo(results) {
192207
getAndroidConfigurationName(compilation.target, it)

integration-tests/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ tasks.test {
6161
maxParallelForks = max(1, Runtime.getRuntime().availableProcessors() / 2)
6262

6363
// Exclude test classes from agpCompatibilityTest
64-
exclude(agpCompatibilityTestClasses)
64+
// exclude(agpCompatibilityTestClasses)
6565

6666
// Apply common settings
6767
configureCommonSettings()

integration-tests/src/test/kotlin/com/google/devtools/ksp/test/BuiltInKotlinAGP900IT.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class BuiltInKotlinAGP900IT {
1717
fun testRunsKSP() {
1818
val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("9.0.0")
1919

20-
File(project.root, "gradle.properties").appendText("\nagpVersion=9.0.0-alpha03")
20+
File(project.root, "gradle.properties").appendText("\nagpVersion=9.0.0-alpha12")
2121
gradleRunner.withArguments(":workload:compileDebugKotlin").build().let { result ->
2222
Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspDebugKotlin")?.outcome)
2323
}

0 commit comments

Comments
 (0)