diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt index 02c4b603db4..4365f93f766 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt @@ -285,7 +285,9 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { kaptTask.classesDir = classesOutputDir javaSourceSet?.output?.apply { - tryAddClassesDir { project.files(classesOutputDir).builtBy(kaptTask) } + if (tryAddClassesDir { project.files(classesOutputDir).builtBy(kaptTask) }) { + kotlinCompile.attachClassesDir { classesOutputDir } + } } kotlinCompile.source(sourcesOutputDir, kotlinSourcesOutputDir) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 00f3d24e1a5..df15a81cdf9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -139,8 +139,23 @@ abstract class AbstractKotlinCompile() : AbstractKo protected val friendTask: AbstractKotlinCompile? get() = friendTaskName?.let { project.tasks.findByName(it) } as? AbstractKotlinCompile + /** Classes directories that are not produced by this task but should be consumed by + * other tasks that have this one as a [friendTask]. */ + private val attachedClassesDirs: MutableList> = mutableListOf() + + /** Registers the directory provided by the [provider] as attached, meaning that the directory should + * be consumed as a friend classes directory by other tasks that have this task as a [friendTask]. */ + fun attachClassesDir(provider: () -> File?) { + attachedClassesDirs += lazy(provider) + } + var friendPaths: Lazy?> = lazy { - friendTask?.run { arrayOf((javaOutputDir ?: destinationDir).absolutePath) } + friendTask?.let { friendTask -> + mutableListOf().apply { + add((friendTask.javaOutputDir ?: friendTask.destinationDir).absolutePath) + addAll(friendTask.attachedClassesDirs.mapNotNull { it.value?.absolutePath }) + }.toTypedArray() + } } override fun compile() {