Determine underlying property of inline class by its name
Previous way to distinguish "primary constructor properties" from other properties wasn't correct for deserialized properties, because currently we don't have special information about this in metadata
This commit is contained in:
+5
-7
@@ -135,7 +135,7 @@ object ExpectedActualDeclarationChecker : DeclarationChecker {
|
||||
if (compatibility.allStrongIncompatibilities()) return
|
||||
|
||||
if (Compatible in compatibility) {
|
||||
if (checkActual && requireActualModifier(descriptor, trace)) {
|
||||
if (checkActual && requireActualModifier(descriptor)) {
|
||||
trace.report(Errors.ACTUAL_MISSING.on(reportOn))
|
||||
}
|
||||
|
||||
@@ -204,16 +204,14 @@ object ExpectedActualDeclarationChecker : DeclarationChecker {
|
||||
// - annotation constructors, because annotation classes can only have one constructor
|
||||
// - inline class primary constructors, because inline class must have primary constructor
|
||||
// - value parameter inside primary constructor of inline class, because inline class must have one value parameter
|
||||
private fun requireActualModifier(descriptor: MemberDescriptor, trace: BindingTrace): Boolean {
|
||||
private fun requireActualModifier(descriptor: MemberDescriptor): Boolean {
|
||||
return !descriptor.isAnnotationConstructor() &&
|
||||
!descriptor.isPrimaryConstructorOfInlineClass() &&
|
||||
!isMainPropertyOfInlineClass(descriptor, trace)
|
||||
!isUnderlyingPropertyOfInlineClass(descriptor)
|
||||
}
|
||||
|
||||
private fun isMainPropertyOfInlineClass(descriptor: MemberDescriptor, trace: BindingTrace): Boolean {
|
||||
if (descriptor !is PropertyDescriptor) return false
|
||||
if (!descriptor.containingDeclaration.isInlineClass()) return false
|
||||
return trace.bindingContext[BindingContext.BACKING_FIELD_REQUIRED, descriptor] == true
|
||||
private fun isUnderlyingPropertyOfInlineClass(descriptor: MemberDescriptor): Boolean {
|
||||
return descriptor is PropertyDescriptor && descriptor.isUnderlyingPropertyOfInlineClass()
|
||||
}
|
||||
|
||||
// This should ideally be handled by CallableMemberDescriptor.Kind, but default constructors have kind DECLARATION and non-empty source.
|
||||
|
||||
Reference in New Issue
Block a user