[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 sourceSetContent = artifactContent.findSourceSet(visibleFragmentName) ?: return@mapNotNull null
val metadataBinary = sourceSetContent.metadataBinary ?: return@mapNotNull null val metadataBinary = sourceSetContent.metadataBinary ?: return@mapNotNull null
val libraryFile = fragment.project.layout.kotlinTransformedMetadataLibraryDirectoryForIde val libraryFile = fragment.project.kotlinTransformedMetadataLibraryDirectoryForIde
.resolve(metadataBinary.relativeFile) .resolve(metadataBinary.relativeFile)
.apply { if (!isFile) metadataBinary.copyTo(this) } .apply { if (!isFile) metadataBinary.copyTo(this) }
@@ -30,7 +30,7 @@ internal object IdeTransformedMetadataDependencyResolver : IdeDependencyResolver
val sourceSetContent = artifactContent.findSourceSet(visibleSourceSet) ?: return@mapNotNull null val sourceSetContent = artifactContent.findSourceSet(visibleSourceSet) ?: return@mapNotNull null
val sourceSetMetadataBinary = sourceSetContent.metadataBinary ?: 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) .resolve(sourceSetMetadataBinary.relativeFile)
metadataLibraryOutputFile.parentFile.mkdirs() metadataLibraryOutputFile.parentFile.mkdirs()
@@ -5,7 +5,9 @@
package org.jetbrains.kotlin.gradle.plugin.mpp package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Project
import org.gradle.api.file.ProjectLayout import org.gradle.api.file.ProjectLayout
import org.jetbrains.kotlin.gradle.utils.compositeBuildRootProject
import java.io.File import java.io.File
private const val kotlinTransformedMetadataLibraries = "kotlinTransformedMetadataLibraries" private const val kotlinTransformedMetadataLibraries = "kotlinTransformedMetadataLibraries"
@@ -14,11 +16,11 @@ private const val kotlinTransformedCInteropMetadataLibraries = "kotlinTransforme
internal fun ProjectLayout.kotlinTransformedMetadataLibraryDirectoryForBuild(sourceSetName: String): File = internal fun ProjectLayout.kotlinTransformedMetadataLibraryDirectoryForBuild(sourceSetName: String): File =
buildDirectory.get().asFile.resolve(kotlinTransformedMetadataLibraries).resolve(sourceSetName) buildDirectory.get().asFile.resolve(kotlinTransformedMetadataLibraries).resolve(sourceSetName)
internal val ProjectLayout.kotlinTransformedMetadataLibraryDirectoryForIde: File internal val Project.kotlinTransformedMetadataLibraryDirectoryForIde: File
get() = projectDirectory.asFile.resolve(".gradle").resolve("kotlin").resolve(kotlinTransformedMetadataLibraries) get() = compositeBuildRootProject.rootDir.resolve(".gradle").resolve("kotlin").resolve(kotlinTransformedMetadataLibraries)
internal fun ProjectLayout.kotlinTransformedCInteropMetadataLibraryDirectoryForBuild(sourceSetName: String): File = internal fun ProjectLayout.kotlinTransformedCInteropMetadataLibraryDirectoryForBuild(sourceSetName: String): File =
buildDirectory.get().asFile.resolve(kotlinTransformedCInteropMetadataLibraries).resolve(sourceSetName) buildDirectory.get().asFile.resolve(kotlinTransformedCInteropMetadataLibraries).resolve(sourceSetName)
internal val ProjectLayout.kotlinTransformedCInteropMetadataLibraryDirectoryForIde: File internal val Project.kotlinTransformedCInteropMetadataLibraryDirectoryForIde: File
get() = projectDirectory.asFile.resolve(".gradle").resolve("kotlin").resolve(kotlinTransformedCInteropMetadataLibraries) 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.getPublishedPlatformCompilations
import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerCompositeMetadataJarBundling.cinteropMetadataDirectoryPath 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.jetbrains.kotlin.gradle.utils.getOrPut
import org.w3c.dom.Document import org.w3c.dom.Document
import org.w3c.dom.Element import org.w3c.dom.Element
@@ -415,14 +416,14 @@ internal object GlobalProjectStructureMetadataStorage {
fun propertyName(buildName: String, projectPath: String) = "$propertyPrefix.$buildName.path.$projectPath" fun propertyName(buildName: String, projectPath: String) = "$propertyPrefix.$buildName.path.$projectPath"
fun registerProjectStructureMetadata(project: Project, metadataProvider: () -> KotlinProjectStructureMetadata) { fun registerProjectStructureMetadata(project: Project, metadataProvider: () -> KotlinProjectStructureMetadata) {
project.compositeBuildRoot.extensions.extraProperties.set( project.compositeBuildRootProject.extensions.extraProperties.set(
propertyName(project.rootProject.name, project.path), propertyName(project.rootProject.name, project.path),
{ metadataProvider().toJson() } { metadataProvider().toJson() }
) )
} }
fun getProjectStructureMetadataProvidersFromAllGradleBuilds(project: Project): Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>> { fun getProjectStructureMetadataProvidersFromAllGradleBuilds(project: Project): Map<ProjectPathWithBuildName, Lazy<KotlinProjectStructureMetadata?>> {
return project.compositeBuildRoot.extensions.extraProperties.properties return project.compositeBuildRootProject.extensions.extraProperties.properties
.filterKeys { it.startsWith(propertyPrefix) } .filterKeys { it.startsWith(propertyPrefix) }
.entries .entries
.associate { (propertyName, propertyValue) -> .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? { private fun Any.getProjectStructureMetadataOrNull(): KotlinProjectStructureMetadata? {
val jsonStringProvider = this as? Function0<*> ?: return null val jsonStringProvider = this as? Function0<*> ?: return null
val jsonString = jsonStringProvider.invoke() as? String ?: return null val jsonString = jsonStringProvider.invoke() as? String ?: return null
@@ -27,7 +27,7 @@ internal fun Project.transformMetadataLibrariesForIde(
} }
is ArtifactMetadataProvider -> transformMetadataLibrariesForIde( is ArtifactMetadataProvider -> transformMetadataLibrariesForIde(
layout.kotlinTransformedMetadataLibraryDirectoryForIde, resolution, metadataProvider kotlinTransformedMetadataLibraryDirectoryForIde, resolution, metadataProvider
) )
} }
} }
@@ -79,7 +79,7 @@ internal fun Project.locateOrRegisterCInteropMetadataDependencyTransformationTas
args = listOf( args = listOf(
sourceSet, sourceSet,
/* outputDirectory = */ /* outputDirectory = */
project.layout.kotlinTransformedCInteropMetadataLibraryDirectoryForIde, project.kotlinTransformedCInteropMetadataLibraryDirectoryForIde,
/* cleaning = */ /* cleaning = */
CInteropMetadataDependencyTransformationTask.Cleaning.None CInteropMetadataDependencyTransformationTask.Cleaning.None
), ),
@@ -5,7 +5,10 @@
package org.jetbrains.kotlin.gradle.utils package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project
import org.gradle.api.invocation.Gradle import org.gradle.api.invocation.Gradle
val Gradle.projectCacheDir 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