diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt index 63da88993bf..1e59d75cf7e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.load.kotlin.getRepresentativeUpperBound import org.jetbrains.kotlin.resolve.DescriptorUtils.RESULT_FQ_NAME import org.jetbrains.kotlin.resolve.DescriptorUtils.SUCCESS_OR_FAILURE_FQ_NAME -import org.jetbrains.kotlin.resolve.InlineClassDescriptorResolver.BOX_METHOD_NAME +import org.jetbrains.kotlin.resolve.InlineClassDescriptorResolver import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.resolve.isInlineClassType @@ -19,7 +19,7 @@ import java.security.MessageDigest fun getInlineClassValueParametersManglingSuffix(descriptor: CallableMemberDescriptor): String? { if (descriptor !is FunctionDescriptor) return null if (descriptor is ConstructorDescriptor) return null - if (descriptor.isSynthesizedBoxMethod()) return null + if (InlineClassDescriptorResolver.isSynthesizedBoxMethod(descriptor)) return null val actualValueParameterTypes = listOfNotNull(descriptor.extensionReceiverParameter?.type) + descriptor.valueParameters.map { it.type } @@ -42,11 +42,6 @@ private fun KotlinType.isTypeParameterWithUpperBoundThatRequiresMangling(): Bool return getRepresentativeUpperBound(descriptor).requiresFunctionNameMangling() } -private fun FunctionDescriptor.isSynthesizedBoxMethod() = - kind == CallableMemberDescriptor.Kind.SYNTHESIZED && - containingDeclaration.let { it is ClassDescriptor && it.isInline } && - name == BOX_METHOD_NAME - private fun collectSignatureForMangling(types: List) = types.joinToString { getSignatureElementForMangling(it) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt index 090af4468ef..f3e95cfb3f8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt @@ -33,6 +33,19 @@ object InlineClassDescriptorResolver { fun createUnboxFunctionDescriptor(owner: ClassDescriptor): SimpleFunctionDescriptor? = createConversionFunctionDescriptor(false, owner) + @JvmStatic + fun isSynthesizedBoxMethod(descriptor: FunctionDescriptor) = + isSynthesizedInlineClassMethod(descriptor, BOX_METHOD_NAME) + + @JvmStatic + fun isSynthesizedUnboxMethod(descriptor: FunctionDescriptor) = + isSynthesizedInlineClassMethod(descriptor, UNBOX_METHOD_NAME) + + private fun isSynthesizedInlineClassMethod(descriptor: FunctionDescriptor, name: Name) = + descriptor.kind == CallableMemberDescriptor.Kind.SYNTHESIZED && + descriptor.containingDeclaration.isInlineClass() && + descriptor.name == name + fun createSpecializedEqualsDescriptor(owner: ClassDescriptor): SimpleFunctionDescriptor? { val inlinedValue = owner.underlyingRepresentation() ?: return null