diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataSerializerExtension.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataSerializerExtension.kt index 4bc9ca7751d..e18deff283d 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataSerializerExtension.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataSerializerExtension.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTabl import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.isInlineClass import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.serialization.DescriptorSerializer import org.jetbrains.kotlin.serialization.DescriptorSerializer.Companion.sort @@ -41,7 +42,7 @@ class KlibMetadataSerializerExtension( DescriptorUtils.getAllDescriptors(classDescriptor.defaultType.memberScope) .filterIsInstance() .filter { it.kind != CallableMemberDescriptor.Kind.FAKE_OVERRIDE } - .filter { it.visibility.isPublicAPI } + .filter { it.visibility.isPublicAPI || classDescriptor.isInlineClass() } ) } else super.customClassMembersProducer diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index e7c4d55ac69..f218c38bbae 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -163,15 +163,10 @@ class DescriptorSerializer private constructor( classDescriptor.inlineClassRepresentation?.let { inlineClassRepresentation -> builder.inlineClassUnderlyingPropertyName = getSimpleNameIndex(inlineClassRepresentation.underlyingPropertyName) - // The underlying property might be missing from `callableMembers` if we are producing a header klib and - // the inline class is a part of the public API but the underlying property is not. - val property = callableMembers.singleOrNull { candidate -> - candidate is PropertyDescriptor - && candidate.extensionReceiverParameter == null - && candidate.name == inlineClassRepresentation.underlyingPropertyName - } ?: return@let - - if (property.visibility.isPublicAPI) { + val property = callableMembers.single { + it is PropertyDescriptor && it.extensionReceiverParameter == null && it.name == inlineClassRepresentation.underlyingPropertyName + } + if (!property.visibility.isPublicAPI) { if (useTypeTable()) { builder.inlineClassUnderlyingTypeId = typeId(inlineClassRepresentation.underlyingType) } else { diff --git a/native/native.tests/testData/klib/header-klibs/compilation/classes/lib/classes.kt b/native/native.tests/testData/klib/header-klibs/compilation/classes/lib/classes.kt index c26a85c3556..a373a9d8574 100644 --- a/native/native.tests/testData/klib/header-klibs/compilation/classes/lib/classes.kt +++ b/native/native.tests/testData/klib/header-klibs/compilation/classes/lib/classes.kt @@ -28,4 +28,6 @@ class B : A() { companion object { const val bConst: Int = 90 } -} \ No newline at end of file +} + +value class C(private val b: String) \ No newline at end of file diff --git a/native/native.tests/testData/klib/header-klibs/compilation/classes/main/main.kt b/native/native.tests/testData/klib/header-klibs/compilation/classes/main/main.kt index a0c7bd965a1..132858ea3e6 100644 --- a/native/native.tests/testData/klib/header-klibs/compilation/classes/main/main.kt +++ b/native/native.tests/testData/klib/header-klibs/compilation/classes/main/main.kt @@ -31,10 +31,15 @@ fun useB(b: B) { B.bConst } +fun useC(b: String) { + C(b) +} + fun runAppAndReturnOk(): String { useI(A()) useA(A()) useB(B()) + useC("test") return "OK" } \ No newline at end of file