[Gradle] Collect project structure metadata for current build separately
^KT-49933
This commit is contained in:
committed by
Space Team
parent
244f742610
commit
3a02090ff3
+1
-1
@@ -420,7 +420,7 @@ internal object GlobalProjectStructureMetadataStorage {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAllProjectStructureMetadata(project: Project): Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>> {
|
fun getProjectStructureMetadataProvidersFromAllGradleBuilds(project: Project): Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>> {
|
||||||
return project.compositeBuildRoot.extensions.extraProperties.properties
|
return project.compositeBuildRoot.extensions.extraProperties.properties
|
||||||
.filterKeys { it.startsWith(propertyPrefix) }
|
.filterKeys { it.startsWith(propertyPrefix) }
|
||||||
.entries
|
.entries
|
||||||
|
|||||||
+21
-12
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||||
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
||||||
import org.gradle.api.provider.Provider
|
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||||
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
|
||||||
@@ -24,7 +23,8 @@ internal data class ProjectPathWithBuildName(
|
|||||||
|
|
||||||
internal class MppDependencyProjectStructureMetadataExtractorFactory
|
internal class MppDependencyProjectStructureMetadataExtractorFactory
|
||||||
private constructor(
|
private constructor(
|
||||||
private val allProjectStructureMetadataProviders: Lazy<Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>>>
|
private val includedBuildsProjectStructureMetadataProviders: Lazy<Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>>>,
|
||||||
|
private val currentBuildProjectStructureMetadataProviders: Map<String, Lazy<KotlinProjectStructureMetadata?>>
|
||||||
) {
|
) {
|
||||||
fun create(
|
fun create(
|
||||||
metadataArtifact: ResolvedArtifactResult
|
metadataArtifact: ResolvedArtifactResult
|
||||||
@@ -32,17 +32,20 @@ private constructor(
|
|||||||
val moduleId = metadataArtifact.variant.owner
|
val moduleId = metadataArtifact.variant.owner
|
||||||
|
|
||||||
return if (moduleId is ProjectComponentIdentifier) {
|
return if (moduleId is ProjectComponentIdentifier) {
|
||||||
val key = ProjectPathWithBuildName(moduleId.projectPath, moduleId.build.name)
|
|
||||||
val projectStructureMetadataProvider = allProjectStructureMetadataProviders.value[key]
|
|
||||||
?: error("Project structure metadata not found for project $key")
|
|
||||||
|
|
||||||
if (moduleId.build.isCurrentBuild) {
|
if (moduleId.build.isCurrentBuild) {
|
||||||
|
val projectStructureMetadataProvider = currentBuildProjectStructureMetadataProviders[moduleId.projectPath]
|
||||||
|
?: error("Project structure metadata not found for project '${moduleId.projectPath}'")
|
||||||
|
|
||||||
ProjectMppDependencyProjectStructureMetadataExtractor(
|
ProjectMppDependencyProjectStructureMetadataExtractor(
|
||||||
moduleIdentifier = metadataArtifact.variant.toSingleKpmModuleIdentifier(),
|
moduleIdentifier = metadataArtifact.variant.toSingleKpmModuleIdentifier(),
|
||||||
projectPath = moduleId.projectPath,
|
projectPath = moduleId.projectPath,
|
||||||
projectStructureMetadataProvider = projectStructureMetadataProvider::value
|
projectStructureMetadataProvider = projectStructureMetadataProvider::value
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
val key = ProjectPathWithBuildName(moduleId.projectPath, moduleId.build.name)
|
||||||
|
val projectStructureMetadataProvider = includedBuildsProjectStructureMetadataProviders.value[key]
|
||||||
|
?: error("Project structure metadata not found for project $key")
|
||||||
|
|
||||||
IncludedBuildMppDependencyProjectStructureMetadataExtractor(
|
IncludedBuildMppDependencyProjectStructureMetadataExtractor(
|
||||||
componentId = moduleId,
|
componentId = moduleId,
|
||||||
primaryArtifact = metadataArtifact.file,
|
primaryArtifact = metadataArtifact.file,
|
||||||
@@ -58,12 +61,18 @@ private constructor(
|
|||||||
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.extraProperties.getOrPut(extensionName) {
|
||||||
val allProjectStructureMetadataProviders = lazy {
|
MppDependencyProjectStructureMetadataExtractorFactory(
|
||||||
GlobalProjectStructureMetadataStorage
|
lazy { GlobalProjectStructureMetadataStorage.getProjectStructureMetadataProvidersFromAllGradleBuilds(project) },
|
||||||
.getAllProjectStructureMetadata(project)
|
collectAllProjectStructureMetadataInCurrentBuild(project)
|
||||||
}
|
)
|
||||||
|
|
||||||
MppDependencyProjectStructureMetadataExtractorFactory(allProjectStructureMetadataProviders)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun collectAllProjectStructureMetadataInCurrentBuild(project: Project): Map<String, Lazy<KotlinProjectStructureMetadata?>> {
|
||||||
|
return project
|
||||||
|
.rootProject
|
||||||
|
.allprojects
|
||||||
|
.associateBy { it.path }
|
||||||
|
.mapValues { (_, subProject) -> lazy { subProject.multiplatformExtensionOrNull?.kotlinProjectStructureMetadata } }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user