[FIR] Report warnings for inconsistent visibilities of accessors
K1 didn't report diagnostics for accessors of intersection overrides, so this change prevents a BC. ^KT-66046 Fixed
This commit is contained in:
committed by
Space Team
parent
7ecbaf7d1e
commit
d3dfbec01a
+6
@@ -657,6 +657,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
runTest("compiler/testData/diagnostics/tests/intersectedVisibilitiesForNonAbstractPropertyAccessors.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.kt")
|
||||
public void testIntersectedVisibilitiesPropertyAccessorsAdditionalWarnigns() {
|
||||
runTest("compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intersectionWithMultipleDefaultsInJava.kt")
|
||||
public void testIntersectionWithMultipleDefaultsInJava() {
|
||||
|
||||
+6
@@ -657,6 +657,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
runTest("compiler/testData/diagnostics/tests/intersectedVisibilitiesForNonAbstractPropertyAccessors.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.kt")
|
||||
public void testIntersectedVisibilitiesPropertyAccessorsAdditionalWarnigns() {
|
||||
runTest("compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intersectionWithMultipleDefaultsInJava.kt")
|
||||
public void testIntersectionWithMultipleDefaultsInJava() {
|
||||
|
||||
+13
@@ -924,14 +924,27 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
parameter<FirCallableSymbol<*>>("overridden")
|
||||
parameter<Name>("containingClassName")
|
||||
}
|
||||
val CANNOT_WEAKEN_ACCESS_PRIVILEGE_WARNING by warning<KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER) {
|
||||
parameter<Visibility>("overridingVisibility")
|
||||
parameter<FirCallableSymbol<*>>("overridden")
|
||||
parameter<Name>("containingClassName")
|
||||
}
|
||||
val CANNOT_CHANGE_ACCESS_PRIVILEGE by error<KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER) {
|
||||
parameter<Visibility>("overridingVisibility")
|
||||
parameter<FirCallableSymbol<*>>("overridden")
|
||||
parameter<Name>("containingClassName")
|
||||
}
|
||||
val CANNOT_CHANGE_ACCESS_PRIVILEGE_WARNING by warning<KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER) {
|
||||
parameter<Visibility>("overridingVisibility")
|
||||
parameter<FirCallableSymbol<*>>("overridden")
|
||||
parameter<Name>("containingClassName")
|
||||
}
|
||||
val CANNOT_INFER_VISIBILITY by error<KtDeclaration>(PositioningStrategy.DECLARATION_NAME) {
|
||||
parameter<FirCallableSymbol<*>>("callable")
|
||||
}
|
||||
val CANNOT_INFER_VISIBILITY_WARNING by warning<KtDeclaration>(PositioningStrategy.DECLARATION_NAME) {
|
||||
parameter<FirCallableSymbol<*>>("callable")
|
||||
}
|
||||
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
|
||||
parameter<Name>("name")
|
||||
|
||||
@@ -518,8 +518,11 @@ object FirErrors {
|
||||
val DATA_CLASS_OVERRIDE_CONFLICT: KtDiagnosticFactory2<FirCallableSymbol<*>, FirCallableSymbol<*>> by error2<KtClassOrObject, FirCallableSymbol<*>, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER)
|
||||
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_WEAKEN_ACCESS_PRIVILEGE_WARNING: KtDiagnosticFactory3<Visibility, FirCallableSymbol<*>, Name> by warning3<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_CHANGE_ACCESS_PRIVILEGE_WARNING: KtDiagnosticFactory3<Visibility, FirCallableSymbol<*>, Name> by warning3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val CANNOT_INFER_VISIBILITY: KtDiagnosticFactory1<FirCallableSymbol<*>> by error1<KtDeclaration, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||
val CANNOT_INFER_VISIBILITY_WARNING: KtDiagnosticFactory1<FirCallableSymbol<*>> by warning1<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)
|
||||
|
||||
+21
-3
@@ -166,9 +166,27 @@ sealed class FirOverrideChecker(mppKind: MppCheckerKind) : FirAbstractOverrideCh
|
||||
source: KtSourceElement? = this.source,
|
||||
) = when {
|
||||
visibility != Visibilities.Unknown -> true
|
||||
else -> false.also { reporter.reportOn(source, FirErrors.CANNOT_INFER_VISIBILITY, this, context) }
|
||||
else -> false.also { reporter.reportOn(source, chooseCannotInferVisibilityFor(this), this, context) }
|
||||
}
|
||||
|
||||
private fun chooseCannotInferVisibilityFor(symbol: FirCallableSymbol<*>) = when {
|
||||
!symbol.wouldMissDiagnosticInK1 -> FirErrors.CANNOT_INFER_VISIBILITY
|
||||
else -> FirErrors.CANNOT_INFER_VISIBILITY_WARNING
|
||||
}
|
||||
|
||||
private fun chooseCannotChangeAccessPrivilegeFor(symbol: FirCallableSymbol<*>) = when {
|
||||
!symbol.wouldMissDiagnosticInK1 -> FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE
|
||||
else -> FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE_WARNING
|
||||
}
|
||||
|
||||
private fun chooseCannotWeakenAccessPrivilegeFor(symbol: FirCallableSymbol<*>) = when {
|
||||
!symbol.wouldMissDiagnosticInK1 -> FirErrors.CANNOT_WEAKEN_ACCESS_PRIVILEGE
|
||||
else -> FirErrors.CANNOT_WEAKEN_ACCESS_PRIVILEGE_WARNING
|
||||
}
|
||||
|
||||
private val FirCallableSymbol<*>.wouldMissDiagnosticInK1 get() =
|
||||
this is FirPropertyAccessorSymbol && propertySymbol.isIntersectionOverride
|
||||
|
||||
private fun checkModality(
|
||||
overriddenSymbols: List<FirCallableSymbol<*>>,
|
||||
): FirCallableSymbol<*>? {
|
||||
@@ -494,7 +512,7 @@ sealed class FirOverrideChecker(mppKind: MppCheckerKind) : FirAbstractOverrideCh
|
||||
val containingClass = overridden.containingClassLookupTag() ?: return
|
||||
reportOn(
|
||||
overriding.source,
|
||||
FirErrors.CANNOT_WEAKEN_ACCESS_PRIVILEGE,
|
||||
chooseCannotWeakenAccessPrivilegeFor(overriding),
|
||||
overriding.visibility,
|
||||
overridden,
|
||||
containingClass.name,
|
||||
@@ -510,7 +528,7 @@ sealed class FirOverrideChecker(mppKind: MppCheckerKind) : FirAbstractOverrideCh
|
||||
val containingClass = overridden.containingClassLookupTag() ?: return
|
||||
reportOn(
|
||||
overriding.source,
|
||||
FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE,
|
||||
chooseCannotChangeAccessPrivilegeFor(overriding),
|
||||
overriding.visibility,
|
||||
overridden,
|
||||
containingClass.name,
|
||||
|
||||
+23
-1
@@ -122,11 +122,14 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CALLABLE_REFERENC
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_BE_IMPORTED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE_WARNING
|
||||
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_INFER_VISIBILITY_WARNING
|
||||
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.CANNOT_WEAKEN_ACCESS_PRIVILEGE_WARNING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CAN_BE_VAL
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CAPTURED_MEMBER_VAL_INITIALIZATION
|
||||
@@ -1655,6 +1658,13 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
DECLARATION_NAME,
|
||||
TO_STRING
|
||||
)
|
||||
map.put(
|
||||
CANNOT_WEAKEN_ACCESS_PRIVILEGE_WARNING,
|
||||
"Cannot weaken access privilege {0} for ''{1}'' in ''{2}''. This will be prohibited in the future.",
|
||||
VISIBILITY,
|
||||
DECLARATION_NAME,
|
||||
TO_STRING
|
||||
)
|
||||
map.put(
|
||||
CANNOT_CHANGE_ACCESS_PRIVILEGE,
|
||||
"Cannot change access privilege {0} for ''{1}'' in ''{2}''.",
|
||||
@@ -1662,9 +1672,21 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
DECLARATION_NAME,
|
||||
TO_STRING
|
||||
)
|
||||
map.put(
|
||||
CANNOT_CHANGE_ACCESS_PRIVILEGE_WARNING,
|
||||
"Cannot change access privilege {0} for ''{1}'' in ''{2}''. This will be prohibited in the future.",
|
||||
VISIBILITY,
|
||||
DECLARATION_NAME,
|
||||
TO_STRING
|
||||
)
|
||||
map.put(
|
||||
CANNOT_INFER_VISIBILITY,
|
||||
"Cannot infer visibility for ''{0}''. Please specify it explicitly",
|
||||
"Cannot infer visibility for ''{0}''. Please specify it explicitly.",
|
||||
DECLARATION_NAME,
|
||||
)
|
||||
map.put(
|
||||
CANNOT_INFER_VISIBILITY_WARNING,
|
||||
"Cannot infer visibility for ''{0}''. Please specify it explicitly. This will be prohibited in the future.",
|
||||
DECLARATION_NAME,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user