From 6af6834966448f3ec4413124ec5b00f2805d914f Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Fri, 17 Aug 2018 03:22:30 +0300 Subject: [PATCH] (minor) Fix source set resources filtering broken by refactoring Before the last change in this logic, the resources filtering used the original Kotlin source directories, not those with Java filtered out. Make sure that the Java source directories that are added to the Kotlin source set are excluded from the resources, and all the related configuration works lazily, i.e. supports source sets modification after configuration took place. --- .../kotlin/gradle/NewMultiplatformIT.kt | 34 +++++++++++++++++++ .../kotlin/gradle/plugin/KotlinPlugin.kt | 20 ++++++----- 2 files changed, 46 insertions(+), 8 deletions(-) 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 } } }