[FIR] Support for FIR_EXPOSED_RECEIVER_TYPE

This commit is contained in:
rapturemain
2020-03-21 04:58:12 +03:00
committed by Mikhail Glukhikh
parent 15d4891c92
commit 0f16c88dd2
3 changed files with 22 additions and 0 deletions
@@ -38,11 +38,26 @@ object FirExposedVisibilityChecker : FirDeclarationChecker<FirMemberDeclaration>
if (restricting != null) {
reporter.reportExposure(Error.EXPOSED_PROPERTY_TYPE, declaration.source)
}
checkMemberReceiver(declaration.receiverTypeRef?.coneTypeSafe(), declaration, reporter)
}
private fun checkMemberReceiver(
typeRef: ConeClassLikeType?,
memberDeclaration: FirCallableMemberDeclaration<*>, reporter: DiagnosticReporter
) {
if (typeRef == null) return
val receiverParameterType = memberDeclaration.receiverTypeRef?.coneTypeSafe<ConeClassLikeType>()
val memberVisibility = memberDeclaration.effectiveVisibility
val restricting = receiverParameterType?.leastPermissiveDescriptor(memberDeclaration.session, memberVisibility)
if (restricting != null) {
reporter.reportExposure(Error.EXPOSED_RECEIVER_TYPE, memberDeclaration.source)
}
}
private enum class Error {
EXPOSED_TYPEALIAS_EXPANDED_TYPE,
EXPOSED_PROPERTY_TYPE,
EXPOSED_RECEIVER_TYPE,
}
private fun DiagnosticReporter.reportExposure(
@@ -60,6 +75,11 @@ object FirExposedVisibilityChecker : FirDeclarationChecker<FirMemberDeclaration>
report(Errors.FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE.onSource(it))
}
}
Error.EXPOSED_RECEIVER_TYPE -> {
source?.let {
report(Errors.FIR_EXPOSED_RECEIVER_TYPE.onSource(it))
}
}
}
}
}