[Gradle] Cache data that collected from all projects in rootProject
This commit is contained in:
committed by
Space Team
parent
babd52e27a
commit
db6c6c736a
+6
-1
@@ -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(
|
||||
|
||||
+2
-1
@@ -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
-3
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user