[Gradle] KotlinProjectStructureMetadata: Migrate to 'BuildIdentifier.getBuildPath'
^KT-58157 In Progress
This commit is contained in:
committed by
Space Team
parent
e07ae23df9
commit
9913ea2e20
+7
-6
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.gradle.targets.metadata.dependsOnClosureWithInterCom
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.getPublishedPlatformCompilations
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerCompositeMetadataJarBundling.cinteropMetadataDirectoryPath
|
||||
import org.jetbrains.kotlin.gradle.utils.buildPathCompat
|
||||
import org.jetbrains.kotlin.gradle.utils.compositeBuildRootProject
|
||||
import org.jetbrains.kotlin.gradle.utils.future
|
||||
import org.jetbrains.kotlin.gradle.utils.getOrPut
|
||||
@@ -421,13 +422,13 @@ internal object GlobalProjectStructureMetadataStorage {
|
||||
fun registerProjectStructureMetadata(project: Project, metadataProvider: () -> KotlinProjectStructureMetadata) {
|
||||
project.compositeBuildRootProject {
|
||||
(it as ExtensionAware).extensions.extraProperties.set(
|
||||
propertyName(project.currentBuildId().name, project.path),
|
||||
propertyName(project.currentBuildId().buildPathCompat, project.path),
|
||||
{ metadataProvider().toJson() }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun getProjectStructureMetadataProvidersFromAllGradleBuilds(project: Project): Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>> {
|
||||
fun getProjectStructureMetadataProvidersFromAllGradleBuilds(project: Project): Map<ProjectPathWithBuildPath, Lazy<KotlinProjectStructureMetadata?>> {
|
||||
return project.compositeBuildRootProject.extensions.extraProperties.properties
|
||||
.filterKeys { it.startsWith(propertyPrefix) }
|
||||
.entries
|
||||
@@ -445,11 +446,11 @@ internal object GlobalProjectStructureMetadataStorage {
|
||||
return parseKotlinSourceSetMetadataFromJson(jsonString)
|
||||
}
|
||||
|
||||
private fun String.toProjectPathWithBuildName(): ProjectPathWithBuildName {
|
||||
val (buildName, projectPath) = removePrefix("$propertyPrefix.").split(".path.")
|
||||
return ProjectPathWithBuildName(
|
||||
private fun String.toProjectPathWithBuildName(): ProjectPathWithBuildPath {
|
||||
val (buildPath, projectPath) = removePrefix("$propertyPrefix.").split(".path.")
|
||||
return ProjectPathWithBuildPath(
|
||||
projectPath = projectPath,
|
||||
buildName = buildName
|
||||
buildPath = buildPath
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+20
-7
@@ -11,23 +11,25 @@ import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.extraProperties
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleKpmModuleIdentifier
|
||||
import org.jetbrains.kotlin.gradle.utils.buildNameCompat
|
||||
import org.jetbrains.kotlin.gradle.utils.buildPathCompat
|
||||
import org.jetbrains.kotlin.gradle.utils.getOrPut
|
||||
|
||||
internal val Project.kotlinMppDependencyProjectStructureMetadataExtractorFactory: MppDependencyProjectStructureMetadataExtractorFactory
|
||||
get() = MppDependencyProjectStructureMetadataExtractorFactory.getOrCreate(this)
|
||||
|
||||
internal data class ProjectPathWithBuildName(
|
||||
internal data class ProjectPathWithBuildPath(
|
||||
val projectPath: String,
|
||||
val buildName: String
|
||||
val buildPath: String,
|
||||
)
|
||||
|
||||
internal class MppDependencyProjectStructureMetadataExtractorFactory
|
||||
private constructor(
|
||||
private val includedBuildsProjectStructureMetadataProviders: Lazy<Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>>>,
|
||||
private val currentBuildProjectStructureMetadataProviders: Map<String, Lazy<KotlinProjectStructureMetadata?>>
|
||||
private val includedBuildsProjectStructureMetadataProviders: Lazy<Map<ProjectPathWithBuildPath, Lazy<KotlinProjectStructureMetadata?>>>,
|
||||
private val currentBuildProjectStructureMetadataProviders: Map<String, Lazy<KotlinProjectStructureMetadata?>>,
|
||||
) {
|
||||
fun create(
|
||||
metadataArtifact: ResolvedArtifactResult
|
||||
metadataArtifact: ResolvedArtifactResult,
|
||||
): MppDependencyProjectStructureMetadataExtractor {
|
||||
val moduleId = metadataArtifact.variant.owner
|
||||
|
||||
@@ -42,11 +44,22 @@ private constructor(
|
||||
projectStructureMetadataProvider = projectStructureMetadataProvider::value
|
||||
)
|
||||
} else {
|
||||
val key = ProjectPathWithBuildName(moduleId.projectPath, moduleId.build.name)
|
||||
/*
|
||||
We switched to using 'buildPath' instead of 'buildName' in 1.9.20,
|
||||
(See: https://youtrack.jetbrains.com/issue/KT-58157/)
|
||||
|
||||
In order for 1.9.20 projects to consume included builds with lesser KGP versions,
|
||||
we will still query this 'legacy key' which is the key we expect older KGP versions to use.
|
||||
*/
|
||||
val pre1920Key = ProjectPathWithBuildPath(moduleId.projectPath, moduleId.build.buildNameCompat)
|
||||
val key = ProjectPathWithBuildPath(moduleId.projectPath, moduleId.build.buildPathCompat)
|
||||
IncludedBuildMppDependencyProjectStructureMetadataExtractor(
|
||||
componentId = moduleId,
|
||||
primaryArtifact = metadataArtifact.file,
|
||||
projectStructureMetadataProvider = { includedBuildsProjectStructureMetadataProviders.value[key]?.value }
|
||||
projectStructureMetadataProvider = {
|
||||
includedBuildsProjectStructureMetadataProviders.value[key]?.value
|
||||
?: includedBuildsProjectStructureMetadataProviders.value[pre1920Key]?.value
|
||||
}
|
||||
)
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user