FIR: Add ConeVisibilityError to distinguish between candidates that are
invisible versus hidden due to deprecation.
This commit is contained in:
committed by
TeamCityServer
parent
58eb329fb9
commit
41a1fa25e2
+1
@@ -45,6 +45,7 @@ private fun ConeDiagnostic.toFirDiagnostic(
|
||||
is ConeFunctionExpectedError -> FirErrors.FUNCTION_EXPECTED.createOn(source, this.expression, this.type)
|
||||
is ConeResolutionToClassifierError -> FirErrors.RESOLUTION_TO_CLASSIFIER.createOn(source, this.candidateSymbol)
|
||||
is ConeHiddenCandidateError -> FirErrors.INVISIBLE_REFERENCE.createOn(source, this.candidateSymbol)
|
||||
is ConeVisibilityError -> FirErrors.INVISIBLE_REFERENCE.createOn(source, this.candidateSymbol)
|
||||
is ConeInapplicableWrongReceiver -> FirErrors.UNRESOLVED_REFERENCE_WRONG_RECEIVER.createOn(source, this.candidateSymbols)
|
||||
is ConeNoCompanionObject -> FirErrors.NO_COMPANION_OBJECT.createOn(source, this.candidateSymbol)
|
||||
is ConeAmbiguityError -> when {
|
||||
|
||||
@@ -704,6 +704,7 @@ class FirCallResolver(
|
||||
val candidate = candidates.single()
|
||||
val diagnostic = when (applicability) {
|
||||
CandidateApplicability.HIDDEN -> ConeHiddenCandidateError(candidate.symbol)
|
||||
CandidateApplicability.VISIBILITY_ERROR -> ConeVisibilityError(candidate.symbol)
|
||||
CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER -> ConeInapplicableWrongReceiver(listOf(candidate.symbol))
|
||||
CandidateApplicability.NO_COMPANION_OBJECT -> ConeNoCompanionObject(candidate.symbol as FirRegularClassSymbol)
|
||||
else -> ConeInapplicableCandidateError(applicability, candidate)
|
||||
|
||||
+2
@@ -63,6 +63,8 @@ object InapplicableCandidate : ResolutionDiagnostic(INAPPLICABLE)
|
||||
|
||||
object HiddenCandidate : ResolutionDiagnostic(HIDDEN)
|
||||
|
||||
object VisibilityError : ResolutionDiagnostic(VISIBILITY_ERROR)
|
||||
|
||||
object ResolvedWithLowPriority : ResolutionDiagnostic(RESOLVED_LOW_PRIORITY)
|
||||
|
||||
class InapplicableWrongReceiver(
|
||||
|
||||
@@ -237,7 +237,7 @@ internal object CheckVisibility : CheckerStage() {
|
||||
|
||||
if (classSymbol is FirRegularClassSymbol) {
|
||||
if (classSymbol.fir.classKind.isSingleton) {
|
||||
sink.yieldDiagnostic(HiddenCandidate)
|
||||
sink.yieldDiagnostic(VisibilityError)
|
||||
}
|
||||
checkVisibility(classSymbol.fir, sink, candidate, visibilityChecker)
|
||||
}
|
||||
@@ -251,7 +251,7 @@ internal object CheckVisibility : CheckerStage() {
|
||||
visibilityChecker: FirVisibilityChecker
|
||||
): Boolean {
|
||||
if (!visibilityChecker.isVisible(declaration, candidate)) {
|
||||
sink.yieldDiagnostic(HiddenCandidate)
|
||||
sink.yieldDiagnostic(VisibilityError)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
||||
+6
@@ -72,6 +72,12 @@ class ConeResolutionToClassifierError(override val candidateSymbol: FirRegularCl
|
||||
|
||||
class ConeHiddenCandidateError(
|
||||
override val candidateSymbol: FirBasedSymbol<*>
|
||||
) : ConeDiagnosticWithSingleCandidate {
|
||||
override val reason: String get() = "HIDDEN: ${describeSymbol(candidateSymbol)} is deprecated with DeprecationLevel.HIDDEN"
|
||||
}
|
||||
|
||||
class ConeVisibilityError(
|
||||
override val candidateSymbol: FirBasedSymbol<*>
|
||||
) : ConeDiagnosticWithSingleCandidate {
|
||||
override val reason: String get() = "HIDDEN: ${describeSymbol(candidateSymbol)} is invisible"
|
||||
}
|
||||
|
||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.resolve.calls.tower
|
||||
enum class CandidateApplicability {
|
||||
RESOLVED_TO_SAM_WITH_VARARG, // migration warning up to 1.5 (when resolve to function with SAM conversion and array without spread as vararg)
|
||||
HIDDEN, // removed from resolve
|
||||
VISIBILITY_ERROR, // problems with visibility
|
||||
UNSUPPORTED, // unsupported feature
|
||||
INAPPLICABLE_WRONG_RECEIVER, // receiver not matched
|
||||
INAPPLICABLE_ARGUMENTS_MAPPING_ERROR, // arguments not mapped to parameters (i.e. different size of arguments and parameters)
|
||||
@@ -15,7 +16,7 @@ enum class CandidateApplicability {
|
||||
INAPPLICABLE_MODIFIER, // no expected modifier (eg infix call on non-infix function)
|
||||
NO_COMPANION_OBJECT, // Classifier does not have a companion object
|
||||
IMPOSSIBLE_TO_GENERATE, // access to outer class from nested
|
||||
RUNTIME_ERROR, // problems with visibility
|
||||
RUNTIME_ERROR, // TODO: FE 1.0 uses this as catch-all for all other errors. Consider re-assigning those diagnostics.
|
||||
UNSAFE_CALL, // receiver or argument nullability doesn't match
|
||||
UNSTABLE_SMARTCAST, // unstable smart cast
|
||||
CONVENTION_ERROR, // missing infix, operator etc
|
||||
|
||||
Reference in New Issue
Block a user