diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt index 5caa7e4c98b..3e039d25d2d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt @@ -27,6 +27,7 @@ import org.junit.Test import java.io.File import java.util.regex.Pattern import java.util.zip.ZipFile +import java.util.zip.ZipOutputStream import kotlin.test.assertNotNull import kotlin.test.assertNull import kotlin.test.assertTrue @@ -817,4 +818,30 @@ open class Kapt3IT : Kapt3BaseIT() { } } } + + /* Regression test for https://youtrack.jetbrains.com/issue/KT-47347. */ + @Test + fun testChangesToKaptConfigurationDoNotTriggerStubGeneration() { + val project = Project("localAnnotationProcessor", directoryPrefix = "kapt2") + + project.build("build") { + assertSuccessful() + } + + ZipOutputStream(project.projectDir.resolve("fake_processor.jar").outputStream()).close() + project.projectDir.resolve("example/build.gradle").appendText( + """ + + dependencies { + kapt files("../fake_processor.jar") + } + """.trimIndent() + ) + + project.build("build") { + assertSuccessful() + assertTasksExecuted(":example:kaptKotlin") + assertTasksUpToDate(":example:kaptGenerateStubsKotlin") + } + } } 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 0dc993fd193..aab23a252d7 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 @@ -292,8 +292,6 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To val kaptTaskProvider: TaskProvider = context.createKaptKotlinTask(useWorkerApi = project.isUseWorkerApi()) kaptGenerateStubsTaskProvider.configure { kaptGenerateStubsTask -> - kaptGenerateStubsTask.source(*kaptConfigurations.toTypedArray()) - kaptGenerateStubsTask.dependsOn(*buildDependencies.toTypedArray()) kaptGenerateStubsTask.dependsOn( project.provider { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt index 989c990e7ce..ee6055bf643 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt @@ -76,10 +76,13 @@ abstract class KaptGenerateStubsTask : KotlinCompile(KotlinJvmOptionsImpl()) { @get:Internal lateinit var generatedSourcesDirs: List - @get:Classpath - @get:InputFiles + @get:Internal("Not an input, just passed as kapt args. ") abstract val kaptClasspath: ConfigurableFileCollection + /* Used as input as empty kapt classpath should not trigger stub generation, but a non-empty one should. */ + @Input + fun getIfKaptClasspathIsPresent() = !kaptClasspath.isEmpty + @get:Classpath @get:InputFiles @Suppress("unused")