From d3dfbec01a6b60348a2ba3aad64c2899dfb67b40 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Wed, 6 Mar 2024 16:08:29 +0200 Subject: [PATCH] [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 --- .../diagnostics/KtFirDataClassConverters.kt | 25 ++++++++++++ .../api/fir/diagnostics/KtFirDiagnostics.kt | 19 ++++++++++ .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 22 +++++++++++ ...CompilerTestFE10TestdataTestGenerated.java | 6 +++ ...sticCompilerFE10TestDataTestGenerated.java | 6 +++ ...eeOldFrontendDiagnosticsTestGenerated.java | 6 +++ ...siOldFrontendDiagnosticsTestGenerated.java | 6 +++ .../diagnostics/FirDiagnosticsList.kt | 13 +++++++ .../fir/analysis/diagnostics/FirErrors.kt | 3 ++ .../declaration/FirOverrideChecker.kt | 24 ++++++++++-- .../diagnostics/FirErrorsDefaultMessages.kt | 24 +++++++++++- ...tiesForNonAbstractPropertyAccessors.fir.kt | 2 +- ...PropertyAccessorsAdditionalWarnigns.fir.kt | 38 +++++++++++++++++++ ...tiesPropertyAccessorsAdditionalWarnigns.kt | 38 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++ 15 files changed, 233 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.fir.kt create mode 100644 compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.kt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index cc5a2bee939..7a1e73add17 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -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, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 1c8403467e9..a468cb58e3f 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -1925,6 +1925,13 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { val containingClassName: Name } + interface CannotWeakenAccessPrivilegeWarning : KtFirDiagnostic { + override val diagnosticClass get() = CannotWeakenAccessPrivilegeWarning::class + val overridingVisibility: Visibility + val overridden: KtCallableSymbol + val containingClassName: Name + } + interface CannotChangeAccessPrivilege : KtFirDiagnostic { override val diagnosticClass get() = CannotChangeAccessPrivilege::class val overridingVisibility: Visibility @@ -1932,11 +1939,23 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { val containingClassName: Name } + interface CannotChangeAccessPrivilegeWarning : KtFirDiagnostic { + override val diagnosticClass get() = CannotChangeAccessPrivilegeWarning::class + val overridingVisibility: Visibility + val overridden: KtCallableSymbol + val containingClassName: Name + } + interface CannotInferVisibility : KtFirDiagnostic { override val diagnosticClass get() = CannotInferVisibility::class val callable: KtCallableSymbol } + interface CannotInferVisibilityWarning : KtFirDiagnostic { + override val diagnosticClass get() = CannotInferVisibilityWarning::class + val callable: KtCallableSymbol + } + interface MultipleDefaultsInheritedFromSupertypes : KtFirDiagnostic { override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypes::class val name: Name diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 81693a99474..bc7734318a2 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -2313,6 +2313,14 @@ internal class CannotWeakenAccessPrivilegeImpl( token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.CannotWeakenAccessPrivilege +internal class CannotWeakenAccessPrivilegeWarningImpl( + override val overridingVisibility: Visibility, + override val overridden: KtCallableSymbol, + override val containingClassName: Name, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(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(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilege +internal class CannotChangeAccessPrivilegeWarningImpl( + override val overridingVisibility: Visibility, + override val overridden: KtCallableSymbol, + override val containingClassName: Name, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilegeWarning + internal class CannotInferVisibilityImpl( override val callable: KtCallableSymbol, firDiagnostic: KtPsiDiagnostic, token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.CannotInferVisibility +internal class CannotInferVisibilityWarningImpl( + override val callable: KtCallableSymbol, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.CannotInferVisibilityWarning + internal class MultipleDefaultsInheritedFromSupertypesImpl( override val name: Name, override val valueParameter: KtSymbol, diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 41e7c0511ae..2eaca26a956 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -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() { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index 434279a9680..10e0a9d506c 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -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() { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index dd62db15604..ec736c5c84e 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -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() { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 9c5f13a5df0..851bc85f14e 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -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() { diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 0a8c6d6d9e1..27816c021e8 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -924,14 +924,27 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter>("overridden") parameter("containingClassName") } + val CANNOT_WEAKEN_ACCESS_PRIVILEGE_WARNING by warning(PositioningStrategy.VISIBILITY_MODIFIER) { + parameter("overridingVisibility") + parameter>("overridden") + parameter("containingClassName") + } val CANNOT_CHANGE_ACCESS_PRIVILEGE by error(PositioningStrategy.VISIBILITY_MODIFIER) { parameter("overridingVisibility") parameter>("overridden") parameter("containingClassName") } + val CANNOT_CHANGE_ACCESS_PRIVILEGE_WARNING by warning(PositioningStrategy.VISIBILITY_MODIFIER) { + parameter("overridingVisibility") + parameter>("overridden") + parameter("containingClassName") + } val CANNOT_INFER_VISIBILITY by error(PositioningStrategy.DECLARATION_NAME) { parameter>("callable") } + val CANNOT_INFER_VISIBILITY_WARNING by warning(PositioningStrategy.DECLARATION_NAME) { + parameter>("callable") + } val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) { parameter("name") diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 085352b9dad..2ab8e4c6e20 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -518,8 +518,11 @@ object FirErrors { val DATA_CLASS_OVERRIDE_CONFLICT: KtDiagnosticFactory2, FirCallableSymbol<*>> by error2, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER) val DATA_CLASS_OVERRIDE_DEFAULT_VALUES: KtDiagnosticFactory2, FirClassSymbol<*>> by error2, FirClassSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER) val CANNOT_WEAKEN_ACCESS_PRIVILEGE: KtDiagnosticFactory3, Name> by error3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) + val CANNOT_WEAKEN_ACCESS_PRIVILEGE_WARNING: KtDiagnosticFactory3, Name> by warning3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val CANNOT_CHANGE_ACCESS_PRIVILEGE: KtDiagnosticFactory3, Name> by error3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) + val CANNOT_CHANGE_ACCESS_PRIVILEGE_WARNING: KtDiagnosticFactory3, Name> by warning3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val CANNOT_INFER_VISIBILITY: KtDiagnosticFactory1> by error1>(SourceElementPositioningStrategies.DECLARATION_NAME) + val CANNOT_INFER_VISIBILITY_WARNING: KtDiagnosticFactory1> by warning1>(SourceElementPositioningStrategies.DECLARATION_NAME) val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES: KtDiagnosticFactory3>> by error3>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE: KtDiagnosticFactory3>> by error3>>(SourceElementPositioningStrategies.DECLARATION_NAME) val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION: KtDiagnosticFactoryForDeprecation3>> by deprecationError3>>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt index 162a339730a..edd9a081128 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt @@ -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<*>? { @@ -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, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index f7c40d33258..275845a376e 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -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, ) diff --git a/compiler/testData/diagnostics/tests/intersectedVisibilitiesForNonAbstractPropertyAccessors.fir.kt b/compiler/testData/diagnostics/tests/intersectedVisibilitiesForNonAbstractPropertyAccessors.fir.kt index bafcdb63bcc..34f0a7106eb 100644 --- a/compiler/testData/diagnostics/tests/intersectedVisibilitiesForNonAbstractPropertyAccessors.fir.kt +++ b/compiler/testData/diagnostics/tests/intersectedVisibilitiesForNonAbstractPropertyAccessors.fir.kt @@ -9,7 +9,7 @@ interface I1 { var a: Int } -abstract class B1 : A1(), I1 +abstract class B1 : A1(), I1 open class A2 { protected fun foo(): Int = 10 diff --git a/compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.fir.kt b/compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.fir.kt new file mode 100644 index 00000000000..3f377c7140b --- /dev/null +++ b/compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.fir.kt @@ -0,0 +1,38 @@ +// ISSUE: KT-66046 + +open class A1 { + var a: Int = 10 + protected set +} + +interface I1 { + var a: Int +} + +interface I12 { + internal var a: Int +} + +abstract class B1 : A1(), I1 +abstract class B12 : A1(), I12 + +open class A2 { + protected fun foo(): Int = 10 +} + +interface I2 { + fun foo(): Int +} + +abstract class B2 : A2(), I2 + +interface I3 { + internal var bar: String +} + +interface I4 { + var bar: String + protected set +} + +abstract class B3 : I3, I4 diff --git a/compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.kt b/compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.kt new file mode 100644 index 00000000000..dceb0dce796 --- /dev/null +++ b/compiler/testData/diagnostics/tests/intersectedVisibilitiesPropertyAccessorsAdditionalWarnigns.kt @@ -0,0 +1,38 @@ +// ISSUE: KT-66046 + +open class A1 { + var a: Int = 10 + protected set +} + +interface I1 { + var a: Int +} + +interface I12 { + internal var a: Int +} + +abstract class B1 : A1(), I1 +abstract class B12 : A1(), I12 + +open class A2 { + protected fun foo(): Int = 10 +} + +interface I2 { + fun foo(): Int +} + +abstract class B2 : A2(), I2 + +interface I3 { + internal var bar: String +} + +interface I4 { + var bar: String + protected set +} + +abstract class B3 : I3, I4 diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 7fa5d12c01d..1afcd244096 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -657,6 +657,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { 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() {