Fix slow AndroidSubPlugin#getCommonResDirectories, KT-29538
Replace a functionally-built file collection that filters files against multiple original file collections upon each evaluation with a lazy file sets intersection that is evaluated only once. Issue #KT-29538 Fixed
This commit is contained in:
+13
-6
@@ -18,10 +18,10 @@ import org.gradle.api.file.FileCollection
|
|||||||
import org.gradle.api.tasks.PathSensitivity
|
import org.gradle.api.tasks.PathSensitivity
|
||||||
import org.gradle.api.tasks.compile.AbstractCompile
|
import org.gradle.api.tasks.compile.AbstractCompile
|
||||||
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||||
import org.jetbrains.kotlin.gradle.model.builder.KotlinAndroidExtensionModelBuilder
|
import org.jetbrains.kotlin.gradle.model.builder.KotlinAndroidExtensionModelBuilder
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -242,11 +242,18 @@ class AndroidSubplugin : KotlinGradleSubplugin<KotlinCompile> {
|
|||||||
|
|
||||||
private data class VariantComponentNames(val variantName: String, val flavorName: String, val buildTypeName: String)
|
private data class VariantComponentNames(val variantName: String, val flavorName: String, val buildTypeName: String)
|
||||||
|
|
||||||
private fun getCommonResDirectories(project: Project, resDirectories: List<FileCollection>): FileCollection =
|
private fun getCommonResDirectories(project: Project, resDirectories: List<FileCollection>): FileCollection {
|
||||||
if (resDirectories.isEmpty())
|
val lazyFiles = lazy {
|
||||||
project.files()
|
if (resDirectories.isEmpty()) {
|
||||||
else
|
emptySet<File>()
|
||||||
resDirectories.reduce { acc, other -> acc.filter { other.contains(it) } }
|
} else {
|
||||||
|
resDirectories.first().toMutableSet().apply {
|
||||||
|
resDirectories.drop(1).forEach { retainAll(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return project.files(Callable { lazyFiles.value })
|
||||||
|
}
|
||||||
|
|
||||||
private fun getApplicationPackage(project: Project, mainSourceSet: AndroidSourceSet): String {
|
private fun getApplicationPackage(project: Project, mainSourceSet: AndroidSourceSet): String {
|
||||||
val manifestFile = mainSourceSet.manifest.srcFile
|
val manifestFile = mainSourceSet.manifest.srcFile
|
||||||
|
|||||||
Reference in New Issue
Block a user