diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/NativeLibrary.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/NativeLibrary.kt index 713fac0af6e..00bdcbff32f 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/NativeLibrary.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/NativeLibrary.kt @@ -68,6 +68,8 @@ internal class CommonNativeManifestDataProvider( packageFqName = rawManifests.first().packageFqName, exportForwardDeclarations = if (isInterop) rawManifests.map { it.exportForwardDeclarations } .reduce { acc, list -> acc.intersect(list).toList() } else emptyList(), + includedForwardDeclarations = if (isInterop) rawManifests.map { it.includedForwardDeclarations } + .reduce { acc, list -> acc.intersect(list).toList() } else emptyList(), nativeTargets = rawManifests.flatMapTo(mutableSetOf()) { it.nativeTargets }, shortName = rawManifests.first().shortName, commonizerTarget = target diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/NativeSensitiveManifestData.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/NativeSensitiveManifestData.kt index eb98c08b657..6db484f1322 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/NativeSensitiveManifestData.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/NativeSensitiveManifestData.kt @@ -22,6 +22,7 @@ data class NativeSensitiveManifestData( val isInterop: Boolean, val packageFqName: String?, val exportForwardDeclarations: List, + val includedForwardDeclarations: List, val nativeTargets: Collection, val shortName: String?, val commonizerTarget: CommonizerTarget?, @@ -35,6 +36,7 @@ data class NativeSensitiveManifestData( isInterop = library.isInterop, packageFqName = library.packageFqName, exportForwardDeclarations = library.exportForwardDeclarations, + includedForwardDeclarations = library.includedForwardDeclarations, nativeTargets = library.nativeTargets, shortName = library.shortName, commonizerTarget = library.commonizerTarget?.let(::parseCommonizerTargetOrNull), @@ -62,6 +64,10 @@ fun BaseWriterImpl.addManifest(manifest: NativeSensitiveManifestData) { manifest.exportForwardDeclarations.sorted().joinToString(" ") } + addOptionalProperty(KLIB_PROPERTY_INCLUDED_FORWARD_DECLARATIONS, manifest.includedForwardDeclarations.isNotEmpty() || manifest.isInterop) { + manifest.includedForwardDeclarations.sorted().joinToString(" ") + } + addOptionalProperty(KLIB_PROPERTY_NATIVE_TARGETS, manifest.nativeTargets.isNotEmpty()) { manifest.nativeTargets.sorted().joinToString(" ") } diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/mocks.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/mocks.kt index 308b9fd4b19..0d03a3b8e22 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/mocks.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/mocks.kt @@ -179,6 +179,7 @@ fun MockNativeManifestDataProvider( isInterop: Boolean = true, packageFqName: String? = "mock", exportForwardDeclarations: List = emptyList(), + includedForwardDeclarations: List = emptyList(), nativeTargets: Collection = emptyList(), shortName: String? = "mock" ): NativeManifestDataProvider = object : NativeManifestDataProvider { @@ -190,6 +191,7 @@ fun MockNativeManifestDataProvider( isInterop = isInterop, packageFqName = packageFqName, exportForwardDeclarations = exportForwardDeclarations, + includedForwardDeclarations = includedForwardDeclarations, nativeTargets = nativeTargets, shortName = shortName, commonizerTarget = target,