Skip to content

Commit fd9521e

Browse files
authored
Fixed support of KSP plugin
The compiler output reading was removed at the Gradle configuration stage, which caused the ConcurrentModificationException, because after reading the directories with Kover, they were modified by KSP Fixes #766 PR #767
1 parent 90c305a commit fd9521e

File tree

7 files changed

+51
-10
lines changed

7 files changed

+51
-10
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package kotlinx.kover.gradle.plugin.test.functional.cases
2+
3+
import kotlinx.kover.gradle.plugin.test.functional.framework.checker.CheckerContext
4+
import kotlinx.kover.gradle.plugin.test.functional.framework.starter.TemplateTest
5+
6+
internal class AndroidKspTests {
7+
@TemplateTest("android-ksp", ["koverXmlReport"])
8+
fun CheckerContext.testUnitTestsAreDisabledInAgp() {
9+
10+
}
11+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
plugins {
2+
id("com.android.library") version "8.13.0"
3+
id("org.jetbrains.kotlin.android") version "2.2.20"
4+
id("com.google.devtools.ksp") version "2.2.20-2.0.4"
5+
id("org.jetbrains.kotlinx.kover") version "0.9.3-SNAPSHOT"
6+
}
7+
8+
android {
9+
namespace = "com.example.lib"
10+
compileSdk = 36
11+
defaultConfig.minSdk = 24
12+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
pluginManagement {
2+
repositories {
3+
google()
4+
mavenCentral()
5+
gradlePluginPortal()
6+
}
7+
}
8+
9+
dependencyResolutionManagement {
10+
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
11+
repositories {
12+
google()
13+
mavenCentral()
14+
gradlePluginPortal()
15+
}
16+
}
17+

kover-gradle-plugin/src/main/kotlin/kotlinx/kover/gradle/plugin/appliers/artifacts/AbstractVariantArtifacts.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,12 @@ internal sealed class AbstractVariantArtifacts(
9090

9191
// local files and compile tasks
9292
val kotlinCompileTasks = compilations.map { compilation -> compilation.mapNotNull { it.kotlin.compileTask } }
93-
val kotlinOutputs = compilations.map { compilation -> compilation.flatMap { it.kotlin.outputs } }
93+
val kotlinOutputs = compilations.map { compilation -> compilation.map { it.kotlin.outputs } }
9494

9595
val javaCompileTasks =
9696
compilations.map { compilation -> if (variantConfig.sources.excludeJava.get()) emptyList() else compilation.mapNotNull { it.java.compileTask } }
9797
val javaOutputs =
98-
compilations.map { compilation -> if (variantConfig.sources.excludeJava.get()) emptyList() else compilation.flatMap { it.java.outputs } }
98+
compilations.map { compilation -> if (variantConfig.sources.excludeJava.get()) emptyList() else compilation.map { it.java.outputs } }
9999

100100

101101
val sources = compilations.map { unit -> unit.flatMap { it.sources } }

kover-gradle-plugin/src/main/kotlin/kotlinx/kover/gradle/plugin/appliers/origin/VariantOrigin.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package kotlinx.kover.gradle.plugin.appliers.origin
66

77
import kotlinx.kover.gradle.plugin.commons.AndroidBuildVariant
88
import org.gradle.api.Task
9+
import org.gradle.api.file.FileCollection
910
import org.gradle.api.provider.Provider
1011
import org.gradle.api.tasks.TaskCollection
1112
import org.gradle.api.tasks.testing.Test
@@ -53,7 +54,7 @@ internal class LanguageCompilation(
5354
/**
5455
* Directories with compiled classes, outputs of [compileTasks].
5556
*/
56-
val outputs: Set<File>,
57+
val outputs: FileCollection,
5758

5859
/**
5960
* In case when no one compile tasks will be triggered,

kover-gradle-plugin/src/main/kotlin/kotlinx/kover/gradle/plugin/locators/Jvm.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ private fun extractJvmCompilation(
2929
it["kotlin"].valueCollection("srcDirs")
3030
}.toSet()
3131

32-
val kotlinOutputs = compilation["output"].value<ConfigurableFileCollection>("classesDirs").files.filterNot<File> {
33-
isJavaOutput(it)
34-
}.toSet()
32+
val kotlinOutputs = compilation["output"]
33+
.value<ConfigurableFileCollection>("classesDirs")
34+
.filter { file -> !isJavaOutput(file) }
3535

36-
val javaOutputs = compilation["output"].value<ConfigurableFileCollection>("classesDirs").files.filter<File> {
37-
isJavaOutput(it)
38-
}.toSet()
36+
val javaOutputs = compilation["output"]
37+
.value<ConfigurableFileCollection>("classesDirs")
38+
.filter { file -> isJavaOutput(file) }
3939

4040
val kotlinCompileTask = compilation.value<Task>("compileKotlinTask")
4141
val javaCompileTask = compilation.valueOrNull<TaskProvider<Task>?>("compileJavaTaskProvider")?.orNull

kover-gradle-plugin/src/main/kotlin/kotlinx/kover/gradle/plugin/locators/KotlinMultiPlatformLocator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ private fun DynamicBean.extractKmpAndroidLibraryVariant(): Map<String, Compilati
124124
it["kotlin"].valueCollection("srcDirs")
125125
}.toSet()
126126

127-
val kotlinOutputs = compilation["output"].value<ConfigurableFileCollection>("classesDirs").files.toSet()
127+
val kotlinOutputs = compilation["output"].value<ConfigurableFileCollection>("classesDirs")
128128
val kotlinCompileTask = compilation.valueOrNull<TaskProvider<Task>?>("compileTaskProvider")?.orNull
129129
val kotlin = LanguageCompilation(kotlinOutputs, kotlinCompileTask)
130130
// at the moment, there is no way to get a task and directives for javac from the compilation

0 commit comments

Comments
 (0)