[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.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet 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.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ArtifactMetadataProvider
import org.jetbrains.kotlin.gradle.plugin.sources.internal import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.utils.LazyResolvedConfiguration import org.jetbrains.kotlin.gradle.utils.LazyResolvedConfiguration
import org.jetbrains.kotlin.gradle.utils.getOrPut
import java.util.* import java.util.*
internal sealed class MetadataDependencyResolution( internal sealed class MetadataDependencyResolution(
@@ -109,7 +111,7 @@ internal class GranularMetadataTransformation(
resolvedMetadataConfiguration = LazyResolvedConfiguration(kotlinSourceSet.internal.resolvableMetadataConfiguration), resolvedMetadataConfiguration = LazyResolvedConfiguration(kotlinSourceSet.internal.resolvableMetadataConfiguration),
sourceSetVisibilityProvider = SourceSetVisibilityProvider(project), sourceSetVisibilityProvider = SourceSetVisibilityProvider(project),
projectStructureMetadataExtractorFactory = project.kotlinMppDependencyProjectStructureMetadataExtractorFactory, projectStructureMetadataExtractorFactory = project.kotlinMppDependencyProjectStructureMetadataExtractorFactory,
projectData = project.collectAllProjectsData(), projectData = project.allProjectsData,
platformCompilationSourceSets = project.multiplatformExtension.platformCompilationSourceSets 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> { private fun Project.collectAllProjectsData(): Map<String, GranularMetadataTransformation.ProjectData> {
return rootProject.allprojects.associateBy { it.path }.mapValues { (path, subProject) -> return rootProject.allprojects.associateBy { it.path }.mapValues { (path, subProject) ->
GranularMetadataTransformation.ProjectData( GranularMetadataTransformation.ProjectData(
@@ -10,6 +10,7 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.gradle.api.artifacts.result.ResolvedArtifactResult import org.gradle.api.artifacts.result.ResolvedArtifactResult
import org.jetbrains.kotlin.gradle.plugin.extraProperties import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleKpmModuleIdentifier import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleKpmModuleIdentifier
import org.jetbrains.kotlin.gradle.utils.compositeBuildRootProject
import org.jetbrains.kotlin.gradle.utils.getOrPut import org.jetbrains.kotlin.gradle.utils.getOrPut
internal val Project.kotlinMppDependencyProjectStructureMetadataExtractorFactory: MppDependencyProjectStructureMetadataExtractorFactory internal val Project.kotlinMppDependencyProjectStructureMetadataExtractorFactory: MppDependencyProjectStructureMetadataExtractorFactory
@@ -56,7 +57,7 @@ private constructor(
companion object { companion object {
private val extensionName = MppDependencyProjectStructureMetadataExtractorFactory::class.java.simpleName private val extensionName = MppDependencyProjectStructureMetadataExtractorFactory::class.java.simpleName
fun getOrCreate(project: Project): MppDependencyProjectStructureMetadataExtractorFactory = fun getOrCreate(project: Project): MppDependencyProjectStructureMetadataExtractorFactory =
project.extraProperties.getOrPut(extensionName) { project.compositeBuildRootProject.extraProperties.getOrPut(extensionName) {
MppDependencyProjectStructureMetadataExtractorFactory( MppDependencyProjectStructureMetadataExtractorFactory(
lazy { GlobalProjectStructureMetadataStorage.getProjectStructureMetadataProvidersFromAllGradleBuilds(project) }, lazy { GlobalProjectStructureMetadataStorage.getProjectStructureMetadataProvidersFromAllGradleBuilds(project) },
collectAllProjectStructureMetadataInCurrentBuild(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.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType 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.LazyResolvedConfiguration
import org.jetbrains.kotlin.gradle.utils.dependencyArtifactsOrNull import org.jetbrains.kotlin.gradle.utils.dependencyArtifactsOrNull
import org.jetbrains.kotlin.gradle.utils.getOrPut
import java.io.File import java.io.File
private typealias KotlinSourceSetName = String private typealias KotlinSourceSetName = String
@@ -29,7 +32,11 @@ internal data class SourceSetVisibilityResult(
val hostSpecificMetadataArtifactBySourceSet: Map<String, File> 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() val multiplatformExtension = multiplatformExtensionOrNull ?: return emptyList()
return multiplatformExtension return multiplatformExtension
.targets .targets
@@ -37,7 +44,7 @@ private fun Project.collectAllPlatformCompilationData(): List<SourceSetVisibilit
.flatMap { target -> target.compilations.map { it.toPlatformCompilationData() } } .flatMap { target -> target.compilations.map { it.toPlatformCompilationData() } }
} }
private fun KotlinCompilation<*>.toPlatformCompilationData() = SourceSetVisibilityProvider.PlatformCompilationData( private fun KotlinCompilation<*>.toPlatformCompilationData() = PlatformCompilationData(
allSourceSets = allKotlinSourceSets.map { it.name }.toSet(), allSourceSets = allKotlinSourceSets.map { it.name }.toSet(),
resolvedDependenciesConfiguration = LazyResolvedConfiguration(internal.configurations.compileDependencyConfiguration), resolvedDependenciesConfiguration = LazyResolvedConfiguration(internal.configurations.compileDependencyConfiguration),
hostSpecificMetadataConfiguration = internal hostSpecificMetadataConfiguration = internal
@@ -50,7 +57,7 @@ internal class SourceSetVisibilityProvider(
private val platformCompilations: List<PlatformCompilationData>, private val platformCompilations: List<PlatformCompilationData>,
) { ) {
constructor(project: Project) : this( constructor(project: Project) : this(
platformCompilations = project.collectAllPlatformCompilationData() platformCompilations = project.allPlatformCompilationData
) )
class PlatformCompilationData( class PlatformCompilationData(