[Gradle] MppDependencyProjectStructureMetadataExtractorFactory: Cache on rootProject...

Because composite builds might have isolated classloaders,
therefore caching the MppDependencyProjectStructureMetadataExtractorFactory
on a compositeBuildRoot will lead to ClassCastExceptions

^KT-56712 Verification Pending
This commit is contained in:
Sebastian Sellmair
2023-02-16 10:21:55 +01:00
committed by Space Team
parent 70a44ccc67
commit b83a490034
@@ -11,7 +11,6 @@ import org.gradle.api.artifacts.result.ResolvedArtifactResult
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
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
@@ -58,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.compositeBuildRootProject.extraProperties.getOrPut(extensionName) { project.rootProject.extraProperties.getOrPut(extensionName) {
MppDependencyProjectStructureMetadataExtractorFactory( MppDependencyProjectStructureMetadataExtractorFactory(
lazy { GlobalProjectStructureMetadataStorage.getProjectStructureMetadataProvidersFromAllGradleBuilds(project) }, lazy { GlobalProjectStructureMetadataStorage.getProjectStructureMetadataProvidersFromAllGradleBuilds(project) },
collectAllProjectStructureMetadataInCurrentBuild(project) collectAllProjectStructureMetadataInCurrentBuild(project)