Fix empty Android layout directories are not ignored

Kotlin Android extensions plugin adds layout directories as input to
KotlinCompile task when experimental flag is enabled. This breaks
cache relocation.

^KT-48849 Fixed
This commit is contained in:
Yahor Berdnikau
2022-01-17 17:11:45 +01:00
parent efa09cbd80
commit b3fba1faad
2 changed files with 44 additions and 1 deletions
@@ -194,6 +194,39 @@ class BuildCacheRelocationIT : KGPBaseTest() {
)
}
@DisplayName("KT-48849: Kotlin compile should ignore empty layout resource directories added by kotlin android extensions")
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_8)
@GradleTest
fun compileIgnoreEmptyAndroidResLayoutDirs(gradleVersion: GradleVersion) {
val (firstProject, secondProject) = prepareTestProjects(
"AndroidExtensionsProject",
gradleVersion,
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
) {
it.subProject("app").buildGradle.append(
"""
|
|androidExtensions {
| experimental = true
|}
""".trimMargin()
)
}
firstProject
.subProject("app")
.projectPath
.resolve("src/main/res/layout-ar")
.createDirectory()
checkBuildCacheRelocation(
firstProject,
secondProject,
listOf("assembleDebug"),
listOf(":app:compileDebugKotlin")
)
}
@DisplayName("with native project")
@GradleTest
@DisabledOnOs(OS.WINDOWS, disabledReason = "remove after fix of KT-48283")
@@ -19,6 +19,7 @@ import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.AbstractCompile
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.model.builder.KotlinAndroidExtensionModelBuilder
import org.jetbrains.kotlin.gradle.plugin.*
@@ -200,7 +201,16 @@ class AndroidSubplugin :
)
kotlinCompile.configure {
it.inputs.files(getLayoutDirectories(project, resDirectories)).withPathSensitivity(PathSensitivity.RELATIVE)
it.inputs.files(getLayoutDirectories(project, resDirectories))
.withPathSensitivity(PathSensitivity.RELATIVE)
.withPropertyName("androidExtensionLayoutsFrom$name")
.run {
if (GradleVersion.current() >= GradleVersion.version("6.8")) {
ignoreEmptyDirectories()
} else {
this!!
}
}
}
}