inlineClassUtils: Fix handling of inline classes without constructors
Fixes KT-50992 DeclarationDescriptor.isInlineClass misidentifies inline classes without constructors. This can happen for the ABI of inline classes with private constructors.
This commit is contained in:
committed by
Alexander Udalov
parent
aa6ba18c39
commit
78d80181e2
@@ -22,7 +22,7 @@ val JVM_INLINE_ANNOTATION_CLASS_ID = ClassId.topLevel(JVM_INLINE_ANNOTATION_FQ_N
|
||||
fun DeclarationDescriptor.isInlineClass(): Boolean = when {
|
||||
this !is ClassDescriptor -> false
|
||||
isInline -> true
|
||||
else -> isValue && unsubstitutedPrimaryConstructor?.valueParameters?.size == 1
|
||||
else -> isValue && unsubstitutedPrimaryConstructor?.valueParameters?.size?.let { it == 1 } ?: true
|
||||
}
|
||||
|
||||
fun DeclarationDescriptor.isValueClass(): Boolean =
|
||||
|
||||
+1
-1
@@ -177,7 +177,7 @@ class DeserializedClassDescriptor(
|
||||
override fun getInlineClassRepresentation(): InlineClassRepresentation<SimpleType>? = inlineClassRepresentation()
|
||||
|
||||
private fun computeInlineClassRepresentation(): InlineClassRepresentation<SimpleType>? {
|
||||
if (!isInlineClass()) return null
|
||||
if (!isInlineOrValueClass()) return null
|
||||
|
||||
val propertyName = when {
|
||||
classProto.hasInlineClassUnderlyingPropertyName() ->
|
||||
|
||||
Reference in New Issue
Block a user