[FIR] Properly calculate visibilities
`testIntersectionOfPrimitiveBasedFunctions` is fine, because we deprecate this already in ^KT-63243. `CANNOT_INFER_VISIBILITY` is positioned as `DECLARATION_NAME`, just in case we decide for some reason that we do want to report it along with `MANY_*_NOT_IMPLEMENTED`. In that case, we'd get a problem that their bounds overlap, but not completely contain one another. ^KT-63741 Fixed ^KT-59400 Fixed
This commit is contained in:
committed by
Space Team
parent
7056ad5325
commit
8f8c7fe7cf
+3
@@ -926,6 +926,9 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
parameter<FirCallableSymbol<*>>("overridden")
|
||||
parameter<Name>("containingClassName")
|
||||
}
|
||||
val CANNOT_INFER_VISIBILITY by error<KtDeclaration>(PositioningStrategy.DECLARATION_NAME) {
|
||||
parameter<FirCallableSymbol<*>>("callable")
|
||||
}
|
||||
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
|
||||
parameter<Name>("name")
|
||||
|
||||
@@ -517,6 +517,7 @@ object FirErrors {
|
||||
val DATA_CLASS_OVERRIDE_DEFAULT_VALUES: KtDiagnosticFactory2<FirCallableSymbol<*>, FirClassSymbol<*>> by error2<KtElement, FirCallableSymbol<*>, FirClassSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER)
|
||||
val CANNOT_WEAKEN_ACCESS_PRIVILEGE: KtDiagnosticFactory3<Visibility, FirCallableSymbol<*>, Name> by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val CANNOT_CHANGE_ACCESS_PRIVILEGE: KtDiagnosticFactory3<Visibility, FirCallableSymbol<*>, Name> by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val CANNOT_INFER_VISIBILITY: KtDiagnosticFactory1<FirCallableSymbol<*>> by error1<KtDeclaration, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES: KtDiagnosticFactory3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE: KtDiagnosticFactory3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION: KtDiagnosticFactoryForDeprecation3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by deprecationError3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
|
||||
+1
@@ -335,6 +335,7 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set<String> = setOf(
|
||||
"DATA_CLASS_OVERRIDE_DEFAULT_VALUES",
|
||||
"CANNOT_WEAKEN_ACCESS_PRIVILEGE",
|
||||
"CANNOT_CHANGE_ACCESS_PRIVILEGE",
|
||||
"CANNOT_INFER_VISIBILITY",
|
||||
"MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES",
|
||||
"MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE",
|
||||
"TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS",
|
||||
|
||||
+10
-5
@@ -25,10 +25,6 @@ import org.jetbrains.kotlin.fir.declarations.CallToPotentiallyHiddenSymbolResult
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.originalOrSelf
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isFinal
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isOverride
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
@@ -46,7 +42,6 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.typeContext
|
||||
import org.jetbrains.kotlin.fir.visibilityChecker
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
||||
import org.jetbrains.kotlin.resolve.deprecation.SimpleDeprecationInfo
|
||||
@@ -183,6 +178,16 @@ sealed class FirOverrideChecker(mppKind: MppCheckerKind) : FirAbstractOverrideCh
|
||||
overriddenSymbols: List<FirCallableSymbol<*>>,
|
||||
context: CheckerContext
|
||||
) {
|
||||
if (visibility == Visibilities.Unknown) {
|
||||
// MANY_*_NOT_IMPLEMENTED implies CANNOT_INFER_VISIBILITY as per KT-63741
|
||||
val isManyNotImplementedDiagnosticReported = overriddenSymbols.count { !it.isAbstract } != 1
|
||||
val isSimpleToReasonAboutSituation = overriddenSymbols.none { it.isIntersectionOverride }
|
||||
if (!(isManyNotImplementedDiagnosticReported && isSimpleToReasonAboutSituation)) {
|
||||
reporter.reportOn(source, FirErrors.CANNOT_INFER_VISIBILITY, this, context)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (overriddenSymbols.isEmpty()) return
|
||||
val visibilities = overriddenSymbols.map {
|
||||
it to it.visibility
|
||||
|
||||
+6
@@ -124,6 +124,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_BE_IMPORTE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_CHECK_FOR_ERASED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_INFER_PARAMETER_TYPE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_INFER_VISIBILITY
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_OVERRIDE_INVISIBLE_MEMBER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_WEAKEN_ACCESS_PRIVILEGE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT
|
||||
@@ -1652,6 +1653,11 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
DECLARATION_NAME,
|
||||
TO_STRING
|
||||
)
|
||||
map.put(
|
||||
CANNOT_INFER_VISIBILITY,
|
||||
"Cannot infer visibility for ''{0}''. Please specify it explicitly",
|
||||
DECLARATION_NAME,
|
||||
)
|
||||
|
||||
map.put(
|
||||
ABSTRACT_MEMBER_NOT_IMPLEMENTED,
|
||||
|
||||
Reference in New Issue
Block a user