[FIR] Support for FIR_EXPOSED_RECEIVER_TYPE
This commit is contained in:
committed by
Mikhail Glukhikh
parent
15d4891c92
commit
0f16c88dd2
+20
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -138,6 +138,7 @@ public interface Errors {
|
||||
// (FIR) Exposed visibility group
|
||||
DiagnosticFactory0<PsiElement> FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> FIR_EXPOSED_PROPERTY_TYPE = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<KtTypeParameter> FIR_EXPOSED_RECEIVER_TYPE = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
DiagnosticFactory2<KtExpression, KotlinType, Collection<ClassDescriptor>> INACCESSIBLE_TYPE = DiagnosticFactory2.create(WARNING);
|
||||
|
||||
|
||||
+1
@@ -84,6 +84,7 @@ public class DefaultErrorMessages {
|
||||
|
||||
MAP.put(FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE, "FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE");
|
||||
MAP.put(FIR_EXPOSED_PROPERTY_TYPE, "FIR_EXPOSED_PROPERTY_TYPE");
|
||||
MAP.put(FIR_EXPOSED_RECEIVER_TYPE, "FIR_EXPOSED_RECEIVER_TYPE");
|
||||
|
||||
MAP.put(EXTENSION_SHADOWED_BY_MEMBER, "Extension is shadowed by a member: {0}", COMPACT_WITH_MODIFIERS);
|
||||
MAP.put(EXTENSION_FUNCTION_SHADOWED_BY_INNER_CLASS_CONSTRUCTOR,
|
||||
|
||||
Reference in New Issue
Block a user