[Gradle] KotlinMetadataLibraryDirectories: Use composite build root for IDE directories

KT-49933
This commit is contained in:
Sebastian Sellmair
2023-01-20 11:48:59 +01:00
committed by Space Team
parent 61748f4016
commit 6849804941
7 changed files with 17 additions and 13 deletions
@@ -44,7 +44,7 @@ internal class IdeaKpmMetadataBinaryDependencyResolver(
val sourceSetContent = artifactContent.findSourceSet(visibleFragmentName) ?: return@mapNotNull null
val metadataBinary = sourceSetContent.metadataBinary ?: return@mapNotNull null
val libraryFile = fragment.project.layout.kotlinTransformedMetadataLibraryDirectoryForIde
val libraryFile = fragment.project.kotlinTransformedMetadataLibraryDirectoryForIde
.resolve(metadataBinary.relativeFile)
.apply { if (!isFile) metadataBinary.copyTo(this) }
@@ -30,7 +30,7 @@ internal object IdeTransformedMetadataDependencyResolver : IdeDependencyResolver
val sourceSetContent = artifactContent.findSourceSet(visibleSourceSet) ?: return@mapNotNull null
val sourceSetMetadataBinary = sourceSetContent.metadataBinary ?: return@mapNotNull null
val metadataLibraryOutputFile = sourceSet.internal.project.layout.kotlinTransformedMetadataLibraryDirectoryForIde
val metadataLibraryOutputFile = sourceSet.internal.project.kotlinTransformedMetadataLibraryDirectoryForIde
.resolve(sourceSetMetadataBinary.relativeFile)
metadataLibraryOutputFile.parentFile.mkdirs()
@@ -5,7 +5,9 @@
package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Project
import org.gradle.api.file.ProjectLayout
import org.jetbrains.kotlin.gradle.utils.compositeBuildRootProject
import java.io.File
private const val kotlinTransformedMetadataLibraries = "kotlinTransformedMetadataLibraries"
@@ -14,11 +16,11 @@ private const val kotlinTransformedCInteropMetadataLibraries = "kotlinTransforme
internal fun ProjectLayout.kotlinTransformedMetadataLibraryDirectoryForBuild(sourceSetName: String): File =
buildDirectory.get().asFile.resolve(kotlinTransformedMetadataLibraries).resolve(sourceSetName)
internal val ProjectLayout.kotlinTransformedMetadataLibraryDirectoryForIde: File
get() = projectDirectory.asFile.resolve(".gradle").resolve("kotlin").resolve(kotlinTransformedMetadataLibraries)
internal val Project.kotlinTransformedMetadataLibraryDirectoryForIde: File
get() = compositeBuildRootProject.rootDir.resolve(".gradle").resolve("kotlin").resolve(kotlinTransformedMetadataLibraries)
internal fun ProjectLayout.kotlinTransformedCInteropMetadataLibraryDirectoryForBuild(sourceSetName: String): File =
buildDirectory.get().asFile.resolve(kotlinTransformedCInteropMetadataLibraries).resolve(sourceSetName)
internal val ProjectLayout.kotlinTransformedCInteropMetadataLibraryDirectoryForIde: File
get() = projectDirectory.asFile.resolve(".gradle").resolve("kotlin").resolve(kotlinTransformedCInteropMetadataLibraries)
internal val Project.kotlinTransformedCInteropMetadataLibraryDirectoryForIde: File
get() = compositeBuildRootProject.rootDir.resolve(".gradle").resolve("kotlin").resolve(kotlinTransformedCInteropMetadataLibraries)
@@ -22,6 +22,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.compositeBuildRootProject
import org.jetbrains.kotlin.gradle.utils.getOrPut
import org.w3c.dom.Document
import org.w3c.dom.Element
@@ -415,14 +416,14 @@ internal object GlobalProjectStructureMetadataStorage {
fun propertyName(buildName: String, projectPath: String) = "$propertyPrefix.$buildName.path.$projectPath"
fun registerProjectStructureMetadata(project: Project, metadataProvider: () -> KotlinProjectStructureMetadata) {
project.compositeBuildRoot.extensions.extraProperties.set(
project.compositeBuildRootProject.extensions.extraProperties.set(
propertyName(project.rootProject.name, project.path),
{ metadataProvider().toJson() }
)
}
fun getProjectStructureMetadataProvidersFromAllGradleBuilds(project: Project): Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>> {
return project.compositeBuildRoot.extensions.extraProperties.properties
return project.compositeBuildRootProject.extensions.extraProperties.properties
.filterKeys { it.startsWith(propertyPrefix) }
.entries
.associate { (propertyName, propertyValue) ->
@@ -433,8 +434,6 @@ internal object GlobalProjectStructureMetadataStorage {
}
}
private val Project.compositeBuildRoot: Project get() = generateSequence(project.gradle) { it.parent }.last().rootProject
private fun Any.getProjectStructureMetadataOrNull(): KotlinProjectStructureMetadata? {
val jsonStringProvider = this as? Function0<*> ?: return null
val jsonString = jsonStringProvider.invoke() as? String ?: return null
@@ -27,7 +27,7 @@ internal fun Project.transformMetadataLibrariesForIde(
}
is ArtifactMetadataProvider -> transformMetadataLibrariesForIde(
layout.kotlinTransformedMetadataLibraryDirectoryForIde, resolution, metadataProvider
kotlinTransformedMetadataLibraryDirectoryForIde, resolution, metadataProvider
)
}
}
@@ -79,7 +79,7 @@ internal fun Project.locateOrRegisterCInteropMetadataDependencyTransformationTas
args = listOf(
sourceSet,
/* outputDirectory = */
project.layout.kotlinTransformedCInteropMetadataLibraryDirectoryForIde,
project.kotlinTransformedCInteropMetadataLibraryDirectoryForIde,
/* cleaning = */
CInteropMetadataDependencyTransformationTask.Cleaning.None
),
@@ -5,7 +5,10 @@
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project
import org.gradle.api.invocation.Gradle
val Gradle.projectCacheDir
get() = startParameter.projectCacheDir ?: this.rootProject.projectDir.resolve(".gradle")
get() = startParameter.projectCacheDir ?: this.rootProject.projectDir.resolve(".gradle")
internal val Project.compositeBuildRootProject: Project get() = generateSequence(project.gradle) { it.parent }.last().rootProject