From 216eea6a2087c2bbc6fecefeb5abcda660440c4a Mon Sep 17 00:00:00 2001 From: rapturemain Date: Sat, 21 Mar 2020 16:38:49 +0300 Subject: [PATCH] [FIR] Fix EXPOSED_RECEIVER_TYPE --- .../FirExposedVisibilityChecker.kt | 55 ++++++++++++++----- .../fir/analysis/diagnostics/FirErrors.kt | 3 + 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityChecker.kt index 2555121ca67..cad735546f1 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityChecker.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.onSource import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.types.ConeClassLikeType +import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.coneTypeSafe object FirExposedVisibilityChecker : FirDeclarationChecker() { @@ -30,7 +31,13 @@ object FirExposedVisibilityChecker : FirDeclarationChecker val typeAliasVisibility = declaration.firEffectiveVisibility(declaration.session) val restricting = expandedType?.leastPermissiveDescriptor(declaration.session, typeAliasVisibility) if (restricting != null) { - reporter.reportExposure(FirErrors.EXPOSED_TYPEALIAS_EXPANDED_TYPE, declaration, restricting) + reporter.reportExposure( + FirErrors.EXPOSED_TYPEALIAS_EXPANDED_TYPE, + restricting, + typeAliasVisibility, + restricting.firEffectiveVisibility(declaration.session), + declaration.source + ) } } @@ -40,7 +47,13 @@ object FirExposedVisibilityChecker : FirDeclarationChecker val restricting = declaration.returnTypeRef.coneTypeSafe() ?.leastPermissiveDescriptor(declaration.session, functionVisibility) if (restricting != null) { - reporter.reportExposure(FirErrors.EXPOSED_FUNCTION_RETURN_TYPE, declaration, restricting) + reporter.reportExposure( + FirErrors.EXPOSED_FUNCTION_RETURN_TYPE, + restricting, + functionVisibility, + restricting.firEffectiveVisibility(declaration.session), + declaration.source + ) } } } @@ -50,38 +63,50 @@ object FirExposedVisibilityChecker : FirDeclarationChecker val restricting = declaration.returnTypeRef.coneTypeSafe()?.leastPermissiveDescriptor(declaration.session, propertyVisibility) if (restricting != null) { - reporter.reportExposure(FirErrors.EXPOSED_PROPERTY_TYPE, declaration, restricting) + reporter.reportExposure( + FirErrors.EXPOSED_PROPERTY_TYPE, + restricting, + propertyVisibility, + restricting.firEffectiveVisibility(declaration.session), + declaration.source + ) } - checkMemberReceiver(declaration.receiverTypeRef?.coneTypeSafe(), declaration, reporter) + checkMemberReceiver(declaration.receiverTypeRef, declaration, reporter) } private fun checkMemberReceiver( - typeRef: ConeClassLikeType?, + typeRef: FirTypeRef?, memberDeclaration: FirCallableMemberDeclaration<*>, reporter: DiagnosticReporter ) { if (typeRef == null) return - val receiverParameterType = memberDeclaration.receiverTypeRef?.coneTypeSafe() - val memberVisibility = memberDeclaration.effectiveVisibility + val receiverParameterType = typeRef.coneTypeSafe() + val memberVisibility = memberDeclaration.firEffectiveVisibility(memberDeclaration.session) val restricting = receiverParameterType?.leastPermissiveDescriptor(memberDeclaration.session, memberVisibility) if (restricting != null) { - reporter.reportExposure(FirErrors.EXPOSED_RECEIVER_TYPE, memberDeclaration, restricting) + reporter.reportExposure( + FirErrors.EXPOSED_RECEIVER_TYPE, + restricting, + memberVisibility, + restricting.firEffectiveVisibility(memberDeclaration.session), + typeRef.source + ) } } - private inline fun DiagnosticReporter.reportExposure( - er: DiagnosticFactory3, - element: E, + private inline fun DiagnosticReporter.reportExposure( + error: DiagnosticFactory3, restrictingDeclaration: DeclarationWithRelation, - elementVisibility: FirEffectiveVisibility = element.effectiveVisibility, - source: FirSourceElement? = element.source + elementVisibility: FirEffectiveVisibility, + restrictingVisibility: FirEffectiveVisibility, + source: FirSourceElement? ) { source?.let { report( - er.onSource( + error.onSource( it, elementVisibility, restrictingDeclaration, - restrictingDeclaration.firEffectiveVisibility(element.session) + restrictingVisibility ) ) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 69298ce9407..30b3a263461 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -12,8 +12,11 @@ import org.jetbrains.kotlin.fir.FirEffectiveVisibility import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType +<<<<<<< HEAD import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.lexer.KtModifierKeywordToken +======= +>>>>>>> d43c780e5de... [FIR] Fixed EXPOSED_RECEIVER_TYPE object FirErrors { val UNRESOLVED_REFERENCE by error1()