Minor: move "is box/unbox method" to InlineClassDescriptorResolver

This commit is contained in:
Dmitry Petrov
2018-09-05 15:01:53 +03:00
parent d24b0fd3b2
commit c86ee90bec
2 changed files with 15 additions and 7 deletions
@@ -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<KotlinType>) =
types.joinToString { getSignatureElementForMangling(it) }
@@ -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