[Gradle] Cache data that collected from all projects in rootProject

This commit is contained in:
Anton Lakotka
2023-01-30 19:45:41 +01:00
committed by Space Team
parent babd52e27a
commit db6c6c736a
3 changed files with 18 additions and 5 deletions
@@ -18,9 +18,11 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ArtifactMetadataProvider
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.utils.LazyResolvedConfiguration
import org.jetbrains.kotlin.gradle.utils.getOrPut
import java.util.*
internal sealed class MetadataDependencyResolution(
@@ -109,7 +111,7 @@ internal class GranularMetadataTransformation(
resolvedMetadataConfiguration = LazyResolvedConfiguration(kotlinSourceSet.internal.resolvableMetadataConfiguration),
sourceSetVisibilityProvider = SourceSetVisibilityProvider(project),
projectStructureMetadataExtractorFactory = project.kotlinMppDependencyProjectStructureMetadataExtractorFactory,
projectData = project.collectAllProjectsData(),
projectData = project.allProjectsData,
platformCompilationSourceSets = project.multiplatformExtension.platformCompilationSourceSets
)
}
@@ -325,6 +327,9 @@ internal val ResolvedComponentResult.currentBuildProjectIdOrNull
}
}
private val Project.allProjectsData: Map<String, GranularMetadataTransformation.ProjectData> get() = extraProperties
.getOrPut("all${GranularMetadataTransformation.ProjectData::class.java.simpleName}") { collectAllProjectsData() }
private fun Project.collectAllProjectsData(): Map<String, GranularMetadataTransformation.ProjectData> {
return rootProject.allprojects.associateBy { it.path }.mapValues { (path, subProject) ->
GranularMetadataTransformation.ProjectData(
@@ -10,6 +10,7 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.gradle.api.artifacts.result.ResolvedArtifactResult
import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleKpmModuleIdentifier
import org.jetbrains.kotlin.gradle.utils.compositeBuildRootProject
import org.jetbrains.kotlin.gradle.utils.getOrPut
internal val Project.kotlinMppDependencyProjectStructureMetadataExtractorFactory: MppDependencyProjectStructureMetadataExtractorFactory
@@ -56,7 +57,7 @@ private constructor(
companion object {
private val extensionName = MppDependencyProjectStructureMetadataExtractorFactory::class.java.simpleName
fun getOrCreate(project: Project): MppDependencyProjectStructureMetadataExtractorFactory =
project.extraProperties.getOrPut(extensionName) {
project.compositeBuildRootProject.extraProperties.getOrPut(extensionName) {
MppDependencyProjectStructureMetadataExtractorFactory(
lazy { GlobalProjectStructureMetadataStorage.getProjectStructureMetadataProvidersFromAllGradleBuilds(project) },
collectAllProjectStructureMetadataInCurrentBuild(project)
@@ -10,8 +10,11 @@ import org.gradle.api.artifacts.result.ResolvedDependencyResult
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.plugin.mpp.SourceSetVisibilityProvider.PlatformCompilationData
import org.jetbrains.kotlin.gradle.utils.LazyResolvedConfiguration
import org.jetbrains.kotlin.gradle.utils.dependencyArtifactsOrNull
import org.jetbrains.kotlin.gradle.utils.getOrPut
import java.io.File
private typealias KotlinSourceSetName = String
@@ -29,7 +32,11 @@ internal data class SourceSetVisibilityResult(
val hostSpecificMetadataArtifactBySourceSet: Map<String, File>
)
private fun Project.collectAllPlatformCompilationData(): List<SourceSetVisibilityProvider.PlatformCompilationData> {
private val Project.allPlatformCompilationData: List<PlatformCompilationData>
get() = extraProperties
.getOrPut("all${PlatformCompilationData::class.java.simpleName}") { collectAllPlatformCompilationData() }
private fun Project.collectAllPlatformCompilationData(): List<PlatformCompilationData> {
val multiplatformExtension = multiplatformExtensionOrNull ?: return emptyList()
return multiplatformExtension
.targets
@@ -37,7 +44,7 @@ private fun Project.collectAllPlatformCompilationData(): List<SourceSetVisibilit
.flatMap { target -> target.compilations.map { it.toPlatformCompilationData() } }
}
private fun KotlinCompilation<*>.toPlatformCompilationData() = SourceSetVisibilityProvider.PlatformCompilationData(
private fun KotlinCompilation<*>.toPlatformCompilationData() = PlatformCompilationData(
allSourceSets = allKotlinSourceSets.map { it.name }.toSet(),
resolvedDependenciesConfiguration = LazyResolvedConfiguration(internal.configurations.compileDependencyConfiguration),
hostSpecificMetadataConfiguration = internal
@@ -50,7 +57,7 @@ internal class SourceSetVisibilityProvider(
private val platformCompilations: List<PlatformCompilationData>,
) {
constructor(project: Project) : this(
platformCompilations = project.collectAllPlatformCompilationData()
platformCompilations = project.allPlatformCompilationData
)
class PlatformCompilationData(