diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/utils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/utils.kt index d8861e0176c..ee1aecd1471 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/utils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/utils.kt @@ -7,9 +7,10 @@ package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution +import org.jetbrains.kotlin.gradle.plugin.mpp.metadataDependencyResolutionsOrEmpty import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet internal inline fun KotlinSourceSet.resolveMetadata(): List { if (this !is DefaultKotlinSourceSet) return emptyList() - return compileDependenciesTransformation.metadataDependencyResolutions.filterIsInstance() + return compileDependenciesTransformation.metadataDependencyResolutionsOrEmpty.filterIsInstance() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt index 6833a290cef..49c55ad5929 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt @@ -364,3 +364,5 @@ private val KotlinMultiplatformExtension.platformCompilationSourceSets: Set target.compilations } .flatMap { it.kotlinSourceSets } .toSet() + +internal val GranularMetadataTransformation?.metadataDependencyResolutionsOrEmpty get() = this?.metadataDependencyResolutions ?: emptyList() \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt index a3609345632..56233f5d3a3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt @@ -118,20 +118,11 @@ abstract class DefaultKotlinSourceSet @Inject constructor( explicitlyAddedCustomSourceFilesExtensions.addAll(extensions) } - private var _compileDependenciesTransformation: GranularMetadataTransformation? = null - - internal fun setCompileDependenciesTransformation(value: GranularMetadataTransformation) { - _compileDependenciesTransformation = value - } - /** * Returns [GranularMetadataTransformation] for all requested compile dependencies * scopes: API, IMPLEMENTATION, COMPILE_ONLY; See [KotlinDependencyScope.compileScopes] */ - internal val compileDependenciesTransformation: GranularMetadataTransformation - get() = _compileDependenciesTransformation - ?: error("Accessing Compile Dependencies Transformations is not yet initialised; " + - "Check when setCompileDependenciesTransformation is called") + internal var compileDependenciesTransformation: GranularMetadataTransformation? = null private val _requiresVisibilityOf = mutableSetOf() @@ -164,7 +155,7 @@ abstract class DefaultKotlinSourceSet @Inject constructor( internal fun getDependenciesTransformation(): Iterable { val metadataDependencyResolutionByModule = - compileDependenciesTransformation.metadataDependencyResolutions + compileDependenciesTransformation.metadataDependencyResolutionsOrEmpty .associateBy { ModuleIds.fromComponent(project, it.dependency) } return metadataDependencyResolutionByModule.mapNotNull { (groupAndName, resolution) -> @@ -231,3 +222,8 @@ val Iterable.withDependsOnClosure: Set fun KotlinMultiplatformExtension.findSourceSetsDependingOn(sourceSet: KotlinSourceSet): Set { return sourceSet.closure { seedSourceSet -> sourceSets.filter { otherSourceSet -> seedSourceSet in otherSourceSet.dependsOn } } } + +internal val DefaultKotlinSourceSet.compileDependenciesTransformationOrFail: GranularMetadataTransformation + get() = compileDependenciesTransformation + ?: error("Accessing Compile Dependencies Transformations that is not yet initialised; " + + "Check when compileDependenciesTransformation is set") \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt index b765a9d425d..3a1fbd09361 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt @@ -367,12 +367,12 @@ class KotlinMetadataTargetConfigurator : sourceSetRequestedScopes = dependencyScopesToTransform, parentTransformations = lazy { dependsOnClosureWithInterCompilationDependencies(sourceSet).filterIsInstance() - .map { it.compileDependenciesTransformation } + .map { it.compileDependenciesTransformationOrFail } } ) if (sourceSet is DefaultKotlinSourceSet) - sourceSet.setCompileDependenciesTransformation(granularMetadataTransformation) + sourceSet.compileDependenciesTransformation = granularMetadataTransformation dependencyScopesToTransform.forEach { scope -> val sourceSetDependencyConfigurationByScope = project.configurations.sourceSetDependencyConfigurationByScope(sourceSet, scope) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyClasspath.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyClasspath.kt index ad4d818b5b4..4b4d7f8d42c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyClasspath.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyClasspath.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.Choos import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ProjectMetadataProvider import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ProjectMetadataProvider.MetadataConsumer.Cli import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ProjectMetadataProvider.MetadataConsumer.Ide +import org.jetbrains.kotlin.gradle.plugin.mpp.metadataDependencyResolutionsOrEmpty import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet import org.jetbrains.kotlin.gradle.utils.filesProvider import java.io.File @@ -51,7 +52,7 @@ private fun Project.createCInteropMetadataDependencyClasspathFromProjectDependen ): FileCollection { return filesProvider { sourceSet.compileDependenciesTransformation - .metadataDependencyResolutions + .metadataDependencyResolutionsOrEmpty .filterIsInstance() .flatMap { chooseVisibleSourceSets -> /* We only want to access resolutions that provide metadata from dependency projects */ diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyTransformationTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyTransformationTask.kt index 2c58d1fccfd..74185191bf0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyTransformationTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyTransformationTask.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.Choos import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ProjectMetadataProvider import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleIdentifiers import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.sources.compileDependenciesTransformationOrFail import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.withType @@ -83,7 +84,7 @@ internal fun Project.locateOrRegisterCInteropMetadataDependencyTransformationTas } /** - * The transformation tasks will internally access the lazy [GranularMetadataTransformation.metadataDependencyResolutions] property + * The transformation tasks will internally access the lazy [GranularMetadataTransformation.metadataDependencyResolutionsOrEmpty] property * which internally will potentially resolve dependencies. Having multiple tasks accessing this synchronized lazy property * during execution and/or configuration phase will result in an internal deadlock in Gradle * `DefaultResourceLockCoordinationService.withStateLock` @@ -180,14 +181,14 @@ internal open class CInteropMetadataDependencyTransformationTask @Inject constru @Suppress("unused") @get:Classpath protected val inputArtifactFiles: FileCollection get() = sourceSet - .compileDependenciesTransformation + .compileDependenciesTransformationOrFail .configurationToResolve .withoutProjectDependencies() @get:Internal protected val chooseVisibleSourceSets get() = sourceSet - .compileDependenciesTransformation + .compileDependenciesTransformationOrFail .metadataDependencyResolutions .filterIsInstance()