diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt index 45ab3f6d3f8..8db06e822cc 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt @@ -176,6 +176,10 @@ class IncrementalJvmCompilerRunner( is ChangesEither.Unknown -> return CompilationMode.Rebuild { "Could not get changes for java files" } } + if ((changedFiles.modified + changedFiles.removed).any { it.extension.toLowerCase() == "xml" }) { + return CompilationMode.Rebuild { "XML resource files were changed" } + } + markDirtyBy(affectedJavaSymbols) markDirtyBy(classpathChanges.lookupSymbols) markDirtyBy(classpathChanges.fqNames) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt index 82e4514e838..91afba707f1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt @@ -99,7 +99,7 @@ class AndroidSubplugin : KotlinGradleSubplugin { val androidExtensionsExtension = project.extensions.getByType(AndroidExtensionsExtension::class.java) if (androidExtensionsExtension.isExperimental) { - return applyExperimental(androidExtension, androidExtensionsExtension, + return applyExperimental(kotlinCompile, androidExtension, androidExtensionsExtension, project, variantData, androidProjectHandler) } @@ -119,6 +119,7 @@ class AndroidSubplugin : KotlinGradleSubplugin { fun addVariant(sourceSet: AndroidSourceSet) { pluginOptions += SubpluginOption("variant", sourceSet.name + ';' + sourceSet.res.srcDirs.joinToString(";") { it.absolutePath }) + kotlinCompile.source(project.files(getLayoutDirectories(sourceSet.res.srcDirs))) } addVariant(mainSourceSet) @@ -131,7 +132,16 @@ class AndroidSubplugin : KotlinGradleSubplugin { return pluginOptions } + private fun getLayoutDirectories(resDirectories: Collection): List { + fun isLayoutDirectory(file: File) = file.name == "layout" || file.name.startsWith("layout-") + + return resDirectories.flatMap { resDir -> + (resDir.listFiles(::isLayoutDirectory)).asList() + } + } + private fun applyExperimental( + kotlinCompile: KotlinCompile, androidExtension: BaseExtension, androidExtensionsExtension: AndroidExtensionsExtension, project: Project, @@ -144,7 +154,8 @@ class AndroidSubplugin : KotlinGradleSubplugin { val pluginOptions = arrayListOf() pluginOptions += SubpluginOption("experimental", "true") - pluginOptions += SubpluginOption("defaultCacheImplementation", androidExtensionsExtension.defaultCacheImplementation.optionName) + pluginOptions += SubpluginOption("defaultCacheImplementation", + androidExtensionsExtension.defaultCacheImplementation.optionName) val mainSourceSet = androidExtension.sourceSets.getByName("main") pluginOptions += SubpluginOption("package", getApplicationPackage(project, mainSourceSet)) @@ -155,6 +166,8 @@ class AndroidSubplugin : KotlinGradleSubplugin { append(';') resDirectories.joinTo(this, separator = ";") { it.canonicalPath } }) + + kotlinCompile.source(project.files(getLayoutDirectories(resDirectories))) } fun addSourceSetAsVariant(name: String) {