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 23e618ed062..d8d6777356c 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 @@ -75,7 +75,7 @@ internal sealed class MetadataDependencyResolution( abstract class ProjectMetadataProvider : MetadataProvider() { enum class MetadataConsumer { Ide, Cli } - abstract fun getSourceSetCompiledMetadata(sourceSetName: String): FileCollection + abstract fun getSourceSetCompiledMetadata(sourceSetName: String): FileCollection? abstract fun getSourceSetCInteropMetadata(sourceSetName: String, consumer: MetadataConsumer): FileCollection? } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ProjectMetadataProviderImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ProjectMetadataProviderImpl.kt index e1402d127ea..b3f6e955abb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ProjectMetadataProviderImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ProjectMetadataProviderImpl.kt @@ -25,7 +25,7 @@ internal fun ProjectMetadataProvider( } internal class SourceSetMetadataOutputs( - val metadata: FileCollection, + val metadata: FileCollection?, val cinterop: CInterop? ) { class CInterop( @@ -38,8 +38,11 @@ private class ProjectMetadataProviderImpl( private val sourceSetMetadataOutputs: Map ) : ProjectMetadataProvider() { - override fun getSourceSetCompiledMetadata(sourceSetName: String): FileCollection = - sourceSetMetadataOutputs[sourceSetName]?.metadata ?: error("Unexpected source set '$sourceSetName'") + override fun getSourceSetCompiledMetadata(sourceSetName: String): FileCollection? { + val metadataOutputs = sourceSetMetadataOutputs[sourceSetName] ?: error("Unexpected source set '$sourceSetName'") + return metadataOutputs.metadata + } + override fun getSourceSetCInteropMetadata(sourceSetName: String, consumer: MetadataConsumer): FileCollection? { val metadataOutputs = sourceSetMetadataOutputs[sourceSetName] ?: error("Unexpected source set '$sourceSetName'") @@ -66,18 +69,17 @@ internal suspend fun Project.collectSourceSetMetadataOutputs(): Map { +private suspend fun KotlinMultiplatformExtension.sourceSetsMetadataOutputs(): Map { KotlinPluginLifecycle.Stage.AfterFinaliseDsl.await() - return sourceSets.mapNotNull { sourceSet -> - val destination = when (val compilation = project.findMetadataCompilation(sourceSet) ?: return@mapNotNull null) { + return sourceSets.associateWith { sourceSet -> + when (val compilation = project.findMetadataCompilation(sourceSet)) { + null -> null is KotlinCommonCompilation -> compilation.output.classesDirs is KotlinSharedNativeCompilation -> compilation.output.classesDirs else -> error("Unexpected compilation type: $compilation") } - - Pair(sourceSet, destination) - }.toMap() + } } private suspend fun KotlinMultiplatformExtension.cInteropMetadataOfSourceSets( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/transformMetadataLibraries.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/transformMetadataLibraries.kt index 4d77ca2070a..9d297ecf7a1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/transformMetadataLibraries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/transformMetadataLibraries.kt @@ -23,7 +23,7 @@ internal fun Project.transformMetadataLibrariesForIde( ): Map> { return when (val metadataProvider = resolution.metadataProvider) { is ProjectMetadataProvider -> resolution.visibleSourceSetNamesExcludingDependsOn.associateWith { visibleSourceSetName -> - metadataProvider.getSourceSetCompiledMetadata(visibleSourceSetName) + metadataProvider.getSourceSetCompiledMetadata(visibleSourceSetName) ?: emptyList() } is ArtifactMetadataProvider -> transformMetadataLibrariesForIde(