[IDE] EXPOSED_RECEIVER_TYPE: add quickfix to decrease visibility on the use side

^KTIJ-23267 Fixed
This commit is contained in:
Toshiaki Kameyama
2023-04-20 17:17:58 +09:00
committed by Space Team
parent 088c25ea41
commit 833edfb209
@@ -144,7 +144,7 @@ class ExposedVisibilityChecker(
} }
} }
} }
return result and checkMemberReceiver(function.receiverTypeReference, functionDescriptor) return result and checkMemberReceiver(function.receiverTypeReference, functionDescriptor, visibility)
} }
fun checkProperty( fun checkProperty(
@@ -160,13 +160,17 @@ class ExposedVisibilityChecker(
reportExposure(EXPOSED_PROPERTY_TYPE, property.nameIdentifier ?: property, propertyVisibility, restricting) reportExposure(EXPOSED_PROPERTY_TYPE, property.nameIdentifier ?: property, propertyVisibility, restricting)
result = false result = false
} }
return result and checkMemberReceiver(property.receiverTypeReference, propertyDescriptor) return result and checkMemberReceiver(property.receiverTypeReference, propertyDescriptor, visibility)
} }
private fun checkMemberReceiver(typeReference: KtTypeReference?, memberDescriptor: CallableMemberDescriptor): Boolean { private fun checkMemberReceiver(
typeReference: KtTypeReference?,
memberDescriptor: CallableMemberDescriptor,
visibility: DescriptorVisibility,
): Boolean {
if (typeReference == null) return true if (typeReference == null) return true
val receiverParameterDescriptor = memberDescriptor.extensionReceiverParameter ?: return true val receiverParameterDescriptor = memberDescriptor.extensionReceiverParameter ?: return true
val memberVisibility = memberDescriptor.effectiveVisibility() val memberVisibility = memberDescriptor.effectiveVisibility(visibility)
val restricting = receiverParameterDescriptor.type.leastPermissiveDescriptor(memberVisibility) val restricting = receiverParameterDescriptor.type.leastPermissiveDescriptor(memberVisibility)
if (restricting != null) { if (restricting != null) {
reportExposure(EXPOSED_RECEIVER_TYPE, typeReference, memberVisibility, restricting) reportExposure(EXPOSED_RECEIVER_TYPE, typeReference, memberVisibility, restricting)