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 23eb74e6430..f042e8b10b7 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 @@ -292,4 +292,38 @@ class NewMultiplatformIT : BaseGradleIT() { assertSuccessful() } } + + @Test + fun testResourceFilteringAndSourceTrackingWithJava() = with(Project("simpleProject")) { + setupWorkingDir() + gradleBuildScript().appendText( + "\n" + """ + // Test 1 -- check that Kotlin sources are correctly filtered out of resources, even those added late at configuration time: + sourceSets.main.resources.srcDir('src/main/kotlin') + sourceSets.main.resources.srcDir('src/foo/kotlin') + kotlin.target.compilations.main.source(kotlin.sourceSets.create('foo')) + + // Test 2 -- check that Java sources from the Kotlin source directories are correctly tracked under `allJava` in the source set: + sourceSets.main.allJava.files.each { println "allJava:${'$'}{it.name}" } + """.trimIndent() + ) + listOf("src/foo/kotlin/foo.kt", "src/main/resources/foo.txt", "src/foo/kotlin/foo.java").forEach { path -> + projectDir.resolve(path).apply { parentFile.mkdirs(); writeText("foo") } + } + + build("processResources") { + assertSuccessful() + + // Test 1 (see above) + assertTasksExecuted(":processResources") + assertFileExists("build/resources/main/foo.txt") + assertNoSuchFile("build/resources/main/helloWorld.kt") + assertNoSuchFile("build/resources/main/foo.kt") + + // Test 2 (see above) + assertContains("allJava:Greeter.java") + assertContains("allJava:HelloWorld.java") + assertContains("allJava:foo.java") + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 4602395a8d3..82038462375 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -37,7 +37,6 @@ import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.utils.* import java.io.File import java.net.URL -import java.util.* import java.util.concurrent.Callable import java.util.jar.Manifest @@ -116,15 +115,20 @@ internal abstract class KotlinJavaSourceSetProcessor - javaSourceSet.allJava.srcDirs(kotlinSrcDirs) - javaSourceSet.allSource.srcDirs(kotlinSrcDirs) - javaSourceSet.resources.filter.exclude { it.file in kotlinSrcDirs } + javaSourceSet.allJava.srcDirs(kotlinSrcDirsToAdd) + javaSourceSet.allSource.srcDirs(kotlinSrcDirsToAdd) + + javaSourceSet.resources.filter.exclude { fileTreeElement -> + val file = fileTreeElement.file + kotlinDirSets.any { file in it.kotlin } } }