From 07b811460a0c37fb3242d0250db97e1def1ff6b5 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 12 Mar 2018 21:54:03 +0300 Subject: [PATCH] Deal with unnamed Gradle inputs/outputs Fix the only unnamed input added to a Gradle task at runtime. Add a test that checks for unnamed task inputs. Issue #KT-23085 Fixed --- .../kotlin/gradle/KotlinGradlePluginIT.kt | 26 +++++++++++++++++++ .../kotlin/gradle/plugin/KotlinPlugin.kt | 4 ++- 2 files changed, 29 insertions(+), 1 deletion(-) 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 89b302c88b3..5186685a81c 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 @@ -729,4 +729,30 @@ class KotlinGradleIT: BaseGradleIT() { } } } + + @Test + fun testNoUnnamedInputsOutputs() { + // Use a new Gradle version to enable the usage of the input/output builders, which are new API: + val gradleVersionRequirement = GradleVersionRequired.AtLeast("4.4") + + val projects = listOf( + Project("simpleProject", gradleVersionRequirement), + Project("kotlin2JsProject", gradleVersionRequirement), + Project("multiplatformProject", gradleVersionRequirement), + Project("simple", gradleVersionRequirement, "kapt2") + ) + + projects.forEach { + it.apply { + // Enable caching to make sure Gradle reports the task inputs/outputs during key construction: + val options = defaultBuildOptions().copy(withBuildCache = true) + build("assemble", options = options) { + // Check that all inputs/outputs added at runtime have proper names + // (the unnamed ones are listed as $1, $2 etc.): + assertNotContains("Appending inputPropertyHash for '\\$\\d+'".toRegex()) + assertNotContains("Appending outputPropertyName to build cache key: \\$\\d+".toRegex()) + } + } + } + } } 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 d4c6ec19bed..31f582b0df5 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 @@ -690,7 +690,9 @@ internal fun configureJavaTask(kotlinTask: KotlinCompile, javaTask: AbstractComp // Make Gradle check if the javaTask is up-to-date based on the Kotlin classes javaTask.inputsCompatible.run { if (isBuildCacheSupported()) { - dir(kotlinTask.destinationDir).withNormalizer(CompileClasspathNormalizer::class.java) + dir(kotlinTask.destinationDir) + .withNormalizer(CompileClasspathNormalizer::class.java) + .withPropertyName("${kotlinTask.name} output classes") } else { dirCompatible(kotlinTask.destinationDir)