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 ConeFunctionExpectedError -> FirErrors.FUNCTION_EXPECTED.createOn(source, this.expression, this.type)
|
||||||
is ConeResolutionToClassifierError -> FirErrors.RESOLUTION_TO_CLASSIFIER.createOn(source, this.candidateSymbol)
|
is ConeResolutionToClassifierError -> FirErrors.RESOLUTION_TO_CLASSIFIER.createOn(source, this.candidateSymbol)
|
||||||
is ConeHiddenCandidateError -> FirErrors.INVISIBLE_REFERENCE.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 ConeInapplicableWrongReceiver -> FirErrors.UNRESOLVED_REFERENCE_WRONG_RECEIVER.createOn(source, this.candidateSymbols)
|
||||||
is ConeNoCompanionObject -> FirErrors.NO_COMPANION_OBJECT.createOn(source, this.candidateSymbol)
|
is ConeNoCompanionObject -> FirErrors.NO_COMPANION_OBJECT.createOn(source, this.candidateSymbol)
|
||||||
is ConeAmbiguityError -> when {
|
is ConeAmbiguityError -> when {
|
||||||
|
|||||||
@@ -704,6 +704,7 @@ class FirCallResolver(
|
|||||||
val candidate = candidates.single()
|
val candidate = candidates.single()
|
||||||
val diagnostic = when (applicability) {
|
val diagnostic = when (applicability) {
|
||||||
CandidateApplicability.HIDDEN -> ConeHiddenCandidateError(candidate.symbol)
|
CandidateApplicability.HIDDEN -> ConeHiddenCandidateError(candidate.symbol)
|
||||||
|
CandidateApplicability.VISIBILITY_ERROR -> ConeVisibilityError(candidate.symbol)
|
||||||
CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER -> ConeInapplicableWrongReceiver(listOf(candidate.symbol))
|
CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER -> ConeInapplicableWrongReceiver(listOf(candidate.symbol))
|
||||||
CandidateApplicability.NO_COMPANION_OBJECT -> ConeNoCompanionObject(candidate.symbol as FirRegularClassSymbol)
|
CandidateApplicability.NO_COMPANION_OBJECT -> ConeNoCompanionObject(candidate.symbol as FirRegularClassSymbol)
|
||||||
else -> ConeInapplicableCandidateError(applicability, candidate)
|
else -> ConeInapplicableCandidateError(applicability, candidate)
|
||||||
|
|||||||
+2
@@ -63,6 +63,8 @@ object InapplicableCandidate : ResolutionDiagnostic(INAPPLICABLE)
|
|||||||
|
|
||||||
object HiddenCandidate : ResolutionDiagnostic(HIDDEN)
|
object HiddenCandidate : ResolutionDiagnostic(HIDDEN)
|
||||||
|
|
||||||
|
object VisibilityError : ResolutionDiagnostic(VISIBILITY_ERROR)
|
||||||
|
|
||||||
object ResolvedWithLowPriority : ResolutionDiagnostic(RESOLVED_LOW_PRIORITY)
|
object ResolvedWithLowPriority : ResolutionDiagnostic(RESOLVED_LOW_PRIORITY)
|
||||||
|
|
||||||
class InapplicableWrongReceiver(
|
class InapplicableWrongReceiver(
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ internal object CheckVisibility : CheckerStage() {
|
|||||||
|
|
||||||
if (classSymbol is FirRegularClassSymbol) {
|
if (classSymbol is FirRegularClassSymbol) {
|
||||||
if (classSymbol.fir.classKind.isSingleton) {
|
if (classSymbol.fir.classKind.isSingleton) {
|
||||||
sink.yieldDiagnostic(HiddenCandidate)
|
sink.yieldDiagnostic(VisibilityError)
|
||||||
}
|
}
|
||||||
checkVisibility(classSymbol.fir, sink, candidate, visibilityChecker)
|
checkVisibility(classSymbol.fir, sink, candidate, visibilityChecker)
|
||||||
}
|
}
|
||||||
@@ -251,7 +251,7 @@ internal object CheckVisibility : CheckerStage() {
|
|||||||
visibilityChecker: FirVisibilityChecker
|
visibilityChecker: FirVisibilityChecker
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (!visibilityChecker.isVisible(declaration, candidate)) {
|
if (!visibilityChecker.isVisible(declaration, candidate)) {
|
||||||
sink.yieldDiagnostic(HiddenCandidate)
|
sink.yieldDiagnostic(VisibilityError)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|||||||
+6
@@ -72,6 +72,12 @@ class ConeResolutionToClassifierError(override val candidateSymbol: FirRegularCl
|
|||||||
|
|
||||||
class ConeHiddenCandidateError(
|
class ConeHiddenCandidateError(
|
||||||
override val candidateSymbol: FirBasedSymbol<*>
|
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 {
|
) : ConeDiagnosticWithSingleCandidate {
|
||||||
override val reason: String get() = "HIDDEN: ${describeSymbol(candidateSymbol)} is invisible"
|
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 {
|
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)
|
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
|
HIDDEN, // removed from resolve
|
||||||
|
VISIBILITY_ERROR, // problems with visibility
|
||||||
UNSUPPORTED, // unsupported feature
|
UNSUPPORTED, // unsupported feature
|
||||||
INAPPLICABLE_WRONG_RECEIVER, // receiver not matched
|
INAPPLICABLE_WRONG_RECEIVER, // receiver not matched
|
||||||
INAPPLICABLE_ARGUMENTS_MAPPING_ERROR, // arguments not mapped to parameters (i.e. different size of arguments and parameters)
|
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)
|
INAPPLICABLE_MODIFIER, // no expected modifier (eg infix call on non-infix function)
|
||||||
NO_COMPANION_OBJECT, // Classifier does not have a companion object
|
NO_COMPANION_OBJECT, // Classifier does not have a companion object
|
||||||
IMPOSSIBLE_TO_GENERATE, // access to outer class from nested
|
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
|
UNSAFE_CALL, // receiver or argument nullability doesn't match
|
||||||
UNSTABLE_SMARTCAST, // unstable smart cast
|
UNSTABLE_SMARTCAST, // unstable smart cast
|
||||||
CONVENTION_ERROR, // missing infix, operator etc
|
CONVENTION_ERROR, // missing infix, operator etc
|
||||||
|
|||||||
Reference in New Issue
Block a user