[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:
Nikolay Lunyak
2024-03-06 16:08:29 +02:00
committed by Space Team
parent 7ecbaf7d1e
commit d3dfbec01a
15 changed files with 233 additions and 5 deletions
@@ -2718,6 +2718,15 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.CANNOT_WEAKEN_ACCESS_PRIVILEGE_WARNING) { firDiagnostic ->
CannotWeakenAccessPrivilegeWarningImpl(
firDiagnostic.a,
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.b),
firDiagnostic.c,
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE) { firDiagnostic ->
CannotChangeAccessPrivilegeImpl(
firDiagnostic.a,
@@ -2727,6 +2736,15 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE_WARNING) { firDiagnostic ->
CannotChangeAccessPrivilegeWarningImpl(
firDiagnostic.a,
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.b),
firDiagnostic.c,
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.CANNOT_INFER_VISIBILITY) { firDiagnostic ->
CannotInferVisibilityImpl(
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a),
@@ -2734,6 +2752,13 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.CANNOT_INFER_VISIBILITY_WARNING) { firDiagnostic ->
CannotInferVisibilityWarningImpl(
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a),
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES) { firDiagnostic ->
MultipleDefaultsInheritedFromSupertypesImpl(
firDiagnostic.a,
@@ -1925,6 +1925,13 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val containingClassName: Name
}
interface CannotWeakenAccessPrivilegeWarning : KtFirDiagnostic<KtModifierListOwner> {
override val diagnosticClass get() = CannotWeakenAccessPrivilegeWarning::class
val overridingVisibility: Visibility
val overridden: KtCallableSymbol
val containingClassName: Name
}
interface CannotChangeAccessPrivilege : KtFirDiagnostic<KtModifierListOwner> {
override val diagnosticClass get() = CannotChangeAccessPrivilege::class
val overridingVisibility: Visibility
@@ -1932,11 +1939,23 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val containingClassName: Name
}
interface CannotChangeAccessPrivilegeWarning : KtFirDiagnostic<KtModifierListOwner> {
override val diagnosticClass get() = CannotChangeAccessPrivilegeWarning::class
val overridingVisibility: Visibility
val overridden: KtCallableSymbol
val containingClassName: Name
}
interface CannotInferVisibility : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = CannotInferVisibility::class
val callable: KtCallableSymbol
}
interface CannotInferVisibilityWarning : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = CannotInferVisibilityWarning::class
val callable: KtCallableSymbol
}
interface MultipleDefaultsInheritedFromSupertypes : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypes::class
val name: Name
@@ -2313,6 +2313,14 @@ internal class CannotWeakenAccessPrivilegeImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotWeakenAccessPrivilege
internal class CannotWeakenAccessPrivilegeWarningImpl(
override val overridingVisibility: Visibility,
override val overridden: KtCallableSymbol,
override val containingClassName: Name,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotWeakenAccessPrivilegeWarning
internal class CannotChangeAccessPrivilegeImpl(
override val overridingVisibility: Visibility,
override val overridden: KtCallableSymbol,
@@ -2321,12 +2329,26 @@ internal class CannotChangeAccessPrivilegeImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilege
internal class CannotChangeAccessPrivilegeWarningImpl(
override val overridingVisibility: Visibility,
override val overridden: KtCallableSymbol,
override val containingClassName: Name,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilegeWarning
internal class CannotInferVisibilityImpl(
override val callable: KtCallableSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.CannotInferVisibility
internal class CannotInferVisibilityWarningImpl(
override val callable: KtCallableSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.CannotInferVisibilityWarning
internal class MultipleDefaultsInheritedFromSupertypesImpl(
override val name: Name,
override val valueParameter: KtSymbol,
@@ -657,6 +657,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
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() {
@@ -657,6 +657,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
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() {