diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 5df8380aea8..77785f1d09b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -325,10 +325,15 @@ class NewMultiplatformIT : BaseGradleIT() { jvm6MainImplementation("com.google.dagger:dagger:2.24") kapt("com.google.dagger:dagger-compiler:2.24") kapt(project(":sample-lib-gradle-kotlin-dsl")) + + // also check incremental Kapt class structure configurations, KT-33105 + jvm6MainImplementation(project(":sample-lib-gradle-kotlin-dsl")) } """.trimIndent() ) } + // also check incremental Kapt class structure configurations, KT-33105 + projectDir.resolve("gradle.properties").appendText("\nkapt.incremental.apt=true") // Check Kapt: projectDir.resolve("src/jvm6Main/kotlin/Main.kt").appendText( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt index 3967d1032d0..b5e72449081 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt @@ -396,7 +396,13 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { maybeRegisterTransform(project) val classStructure = project.configurations.create("_classStructure${taskName}") - project.dependencies.add(classStructure.name, kotlinCompile.classpath) + + // Wrap the `kotlinCompile.classpath` into a file collection, so that, if the classpath is represented by a configuration, + // the configuration is not extended (via extendsFrom, which normally happens when one configuration is _added_ into another) + // but is instead included as the (lazily) resolved files. This is needed because the class structure configuration doesn't have + // the attributes that are potentially needed to resolve dependencies on MPP modules, and the classpath configuration does. + project.dependencies.add(classStructure.name, project.files(project.provider { kotlinCompile.classpath })) + kaptTask.classpathStructure = classStructure.incoming.artifactView { viewConfig -> viewConfig.attributes.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE) }.files