diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index c3ce460b7eb..4172d830d54 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -815,4 +815,12 @@ class KotlinGradleIT : BaseGradleIT() { assertContains("Kotlin build report is written to") } } + + @Test + fun testKt29971() = with(Project("kt-29971", GradleVersionRequired.AtLeast("5.0"))) { + build("jvm-app:build") { + assertSuccessful() + assertTasksExecuted(":jvm-app:compileKotlin") + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/build.gradle new file mode 100644 index 00000000000..4c3a5a95781 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/build.gradle @@ -0,0 +1,16 @@ +buildscript { + repositories { + mavenLocal() + jcenter() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + mavenLocal() + jcenter() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/jvm-app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/jvm-app/build.gradle new file mode 100644 index 00000000000..f2f3c27fb6d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/jvm-app/build.gradle @@ -0,0 +1,6 @@ +plugins { + id "org.jetbrains.kotlin.jvm" +} + +group = "com.example.jvm" +version = "1.0" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/jvm-app/src/main/kotlin/A.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/jvm-app/src/main/kotlin/A.kt new file mode 100644 index 00000000000..83cee9f7e6d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/jvm-app/src/main/kotlin/A.kt @@ -0,0 +1 @@ +fun main() = Unit \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/mpp-lib/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/mpp-lib/build.gradle new file mode 100644 index 00000000000..10db9ae526c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/mpp-lib/build.gradle @@ -0,0 +1,24 @@ +plugins { + id "org.jetbrains.kotlin.multiplatform" +} + +kotlin { + js() + + sourceSets { + commonMain { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-stdlib-common' + } + } + jsMain { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-stdlib-js' + } + } + } +} + +// While this plugin seems not to do anything in this setup, IT IS needed to reproduce KT-29971 +apply plugin: "application" +mainClassName = "foo" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/settings.gradle new file mode 100644 index 00000000000..15f80947a8f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-29971/settings.gradle @@ -0,0 +1,3 @@ +enableFeaturePreview('GRADLE_METADATA') + +include(":mpp-lib", ":jvm-app") \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index 40dd68088d7..f78378c24ba 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -31,13 +31,15 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.daemon.client.CompileServiceSession import org.jetbrains.kotlin.daemon.common.* import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers import org.jetbrains.kotlin.gradle.logging.kotlinDebug +import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.utils.newTmpFile import org.jetbrains.kotlin.gradle.utils.relativeToRoot -import org.jetbrains.kotlin.incremental.* +import org.jetbrains.kotlin.incremental.classpathAsList +import org.jetbrains.kotlin.incremental.destinationAsFile +import org.jetbrains.kotlin.incremental.makeModuleFile import java.io.File import java.lang.ref.WeakReference @@ -194,7 +196,7 @@ internal open class GradleCompilerRunner(protected val task: Task) { val jarToModule = HashMap() for (project in gradle.rootProject.allprojects) { - project.tasks.withType(AbstractKotlinCompile::class.java).forEach { task -> + project.tasks.withType(AbstractKotlinCompile::class.java).toList().forEach { task -> val module = IncrementalModuleEntry(project.path, task.moduleName, project.buildDir, task.buildHistoryFile) dirToModule[task.destinationDir] = module task.javaOutputDir?.let { dirToModule[it] = module }