[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) {
|
if (restricting != null) {
|
||||||
reporter.reportExposure(Error.EXPOSED_PROPERTY_TYPE, declaration.source)
|
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 {
|
private enum class Error {
|
||||||
EXPOSED_TYPEALIAS_EXPANDED_TYPE,
|
EXPOSED_TYPEALIAS_EXPANDED_TYPE,
|
||||||
EXPOSED_PROPERTY_TYPE,
|
EXPOSED_PROPERTY_TYPE,
|
||||||
|
EXPOSED_RECEIVER_TYPE,
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DiagnosticReporter.reportExposure(
|
private fun DiagnosticReporter.reportExposure(
|
||||||
@@ -60,6 +75,11 @@ object FirExposedVisibilityChecker : FirDeclarationChecker<FirMemberDeclaration>
|
|||||||
report(Errors.FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE.onSource(it))
|
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
|
// (FIR) Exposed visibility group
|
||||||
DiagnosticFactory0<PsiElement> FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<PsiElement> FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE = DiagnosticFactory0.create(ERROR);
|
||||||
DiagnosticFactory0<PsiElement> FIR_EXPOSED_PROPERTY_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);
|
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_TYPEALIAS_EXPANDED_TYPE, "FIR_EXPOSED_TYPEALIAS_EXPANDED_TYPE");
|
||||||
MAP.put(FIR_EXPOSED_PROPERTY_TYPE, "FIR_EXPOSED_PROPERTY_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_SHADOWED_BY_MEMBER, "Extension is shadowed by a member: {0}", COMPACT_WITH_MODIFIERS);
|
||||||
MAP.put(EXTENSION_FUNCTION_SHADOWED_BY_INNER_CLASS_CONSTRUCTOR,
|
MAP.put(EXTENSION_FUNCTION_SHADOWED_BY_INNER_CLASS_CONSTRUCTOR,
|
||||||
|
|||||||
Reference in New Issue
Block a user