[FIR] Run checkers for FirErrorResolvedQualifier
`INVISIBLE_REFERENCE` may be reported due to CandidateApplicability via a ConeDiagnostic, or in a checker. The former leads to `FirErrorResolvedQualifier`, so the checker is not called. This makes little sense, because CandidateApplicability may result in `NO_COMPANION_OBJECT`, which would prevent other more meaningful diagnostics from being reported (like `API_NOT_AVAILABLE`). If we run checkers for `FirErrorResolvedQualifier` we may get duplicate `INVISIBLE_REFERENCE`. The change in the checker prevents it.
This commit is contained in:
committed by
Space Team
parent
9be819087a
commit
e187c9272d
+6
-1
@@ -11,8 +11,10 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType
|
||||
import org.jetbrains.kotlin.fir.expressions.FirErrorResolvedQualifier
|
||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||
import org.jetbrains.kotlin.fir.getOwnerLookupTag
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeVisibilityError
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
@@ -38,7 +40,10 @@ object FirVisibilityQualifierChecker : FirResolvedQualifierChecker() {
|
||||
firClassLikeDeclaration, context.session, firFile, context.containingDeclarations,
|
||||
)
|
||||
) {
|
||||
reporter.reportOn(expression.source, FirErrors.INVISIBLE_REFERENCE, symbol, context)
|
||||
if (expression !is FirErrorResolvedQualifier || expression.diagnostic !is ConeVisibilityError) {
|
||||
reporter.reportOn(expression.source, FirErrors.INVISIBLE_REFERENCE, symbol, context)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
+4
@@ -68,6 +68,10 @@ class ExpressionCheckersDiagnosticComponent(
|
||||
checkers.allResolvedQualifierCheckers.check(resolvedQualifier, data)
|
||||
}
|
||||
|
||||
override fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier, data: CheckerContext) {
|
||||
checkers.allResolvedQualifierCheckers.check(errorResolvedQualifier, data)
|
||||
}
|
||||
|
||||
override fun visitWhenExpression(whenExpression: FirWhenExpression, data: CheckerContext) {
|
||||
checkers.allWhenExpressionCheckers.check(whenExpression, data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user