[Gradle] Replace provider by lazy in ProjectData
This commit is contained in:
committed by
Space Team
parent
0bee621b21
commit
5ec153822a
+14
-12
@@ -12,7 +12,6 @@ import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
|||||||
import org.gradle.api.attributes.AttributeContainer
|
import org.gradle.api.attributes.AttributeContainer
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.gradle.api.provider.Provider
|
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||||
@@ -116,13 +115,16 @@ internal class GranularMetadataTransformation(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
data class ProjectData(
|
class ProjectData(
|
||||||
val path: String,
|
val path: String,
|
||||||
val sourceSetMetadataOutputs: Provider<Map<String, SourceSetMetadataOutputs>>,
|
sourceSetMetadataOutputsProvider: () -> Map<String, SourceSetMetadataOutputs>,
|
||||||
val projectStructureMetadata: Provider<KotlinProjectStructureMetadata?>,
|
moduleIdProvider: () -> ModuleDependencyIdentifier
|
||||||
val moduleId: Provider<ModuleDependencyIdentifier>
|
) {
|
||||||
)
|
val sourceSetMetadataOutputs by lazy(sourceSetMetadataOutputsProvider)
|
||||||
|
val moduleId by lazy(moduleIdProvider)
|
||||||
|
|
||||||
|
override fun toString(): String = "ProjectData[path='$path']"
|
||||||
|
}
|
||||||
|
|
||||||
val metadataDependencyResolutions: Iterable<MetadataDependencyResolution> by lazy { doTransform() }
|
val metadataDependencyResolutions: Iterable<MetadataDependencyResolution> by lazy { doTransform() }
|
||||||
|
|
||||||
@@ -268,7 +270,7 @@ internal class GranularMetadataTransformation(
|
|||||||
|
|
||||||
val metadataProvider = when (mppDependencyMetadataExtractor) {
|
val metadataProvider = when (mppDependencyMetadataExtractor) {
|
||||||
is ProjectMppDependencyProjectStructureMetadataExtractor -> ProjectMetadataProvider(
|
is ProjectMppDependencyProjectStructureMetadataExtractor -> ProjectMetadataProvider(
|
||||||
sourceSetMetadataOutputs = params.projectData[mppDependencyMetadataExtractor.projectPath]?.sourceSetMetadataOutputs?.get()
|
sourceSetMetadataOutputs = params.projectData[mppDependencyMetadataExtractor.projectPath]?.sourceSetMetadataOutputs
|
||||||
?: error("Unexpected project path '${mppDependencyMetadataExtractor.projectPath}'")
|
?: error("Unexpected project path '${mppDependencyMetadataExtractor.projectPath}'")
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -302,7 +304,7 @@ internal class GranularMetadataTransformation(
|
|||||||
is ModuleComponentIdentifier -> ModuleDependencyIdentifier(componentId.group, componentId.module)
|
is ModuleComponentIdentifier -> ModuleDependencyIdentifier(componentId.group, componentId.module)
|
||||||
is ProjectComponentIdentifier -> {
|
is ProjectComponentIdentifier -> {
|
||||||
if (componentId.build.isCurrentBuild) {
|
if (componentId.build.isCurrentBuild) {
|
||||||
params.projectData[componentId.projectPath]?.moduleId?.get()
|
params.projectData[componentId.projectPath]?.moduleId
|
||||||
?: error("Cant find project Module ID by ${componentId.projectPath}")
|
?: error("Cant find project Module ID by ${componentId.projectPath}")
|
||||||
} else {
|
} else {
|
||||||
ModuleDependencyIdentifier(
|
ModuleDependencyIdentifier(
|
||||||
@@ -327,16 +329,16 @@ internal val ResolvedComponentResult.currentBuildProjectIdOrNull
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val Project.allProjectsData: Map<String, GranularMetadataTransformation.ProjectData> get() = extraProperties
|
private val Project.allProjectsData: Map<String, GranularMetadataTransformation.ProjectData> get() = rootProject
|
||||||
|
.extraProperties
|
||||||
.getOrPut("all${GranularMetadataTransformation.ProjectData::class.java.simpleName}") { collectAllProjectsData() }
|
.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(
|
||||||
path = path,
|
path = path,
|
||||||
sourceSetMetadataOutputs = provider { subProject.collectSourceSetMetadataOutputs() },
|
sourceSetMetadataOutputsProvider = { subProject.collectSourceSetMetadataOutputs() },
|
||||||
projectStructureMetadata = provider { subProject.multiplatformExtensionOrNull?.kotlinProjectStructureMetadata },
|
moduleIdProvider = { ModuleIds.idOfRootModule(subProject) }
|
||||||
moduleId = provider { ModuleIds.idOfRootModule(subProject) }
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user