[FIR] Explicit API mode: No REDUNDANT_VISIBILITY_MODIFIER for public
- In explicit API mode, the `public` visibility modifier is not redundant unless a declaration is hidden by a container. The `REDUNDANT_VISIBILITY_MODIFIER` diagnostic is now not reported in such cases. ^KTIJ-24485 fixed
This commit is contained in:
committed by
Space Team
parent
5909b191a5
commit
e86c877733
+16
-2
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.fir.analysis.checkers.extended
|
||||
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.config.AnalysisFlags
|
||||
import org.jetbrains.kotlin.config.ExplicitApiMode
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
@@ -121,11 +123,23 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker<Fi
|
||||
|
||||
val explicitVisibility = element.source?.explicitVisibility
|
||||
val isHidden = explicitVisibility.isEffectivelyHiddenBy(containingMemberDeclaration)
|
||||
|
||||
if (explicitVisibility != implicitVisibility && !isHidden) {
|
||||
if (isHidden) {
|
||||
reportElement(element, context, reporter)
|
||||
return
|
||||
}
|
||||
|
||||
// In explicit API mode, `public` is explicitly required.
|
||||
val explicitApiMode = context.languageVersionSettings.getFlag(AnalysisFlags.explicitApiMode)
|
||||
if (explicitApiMode != ExplicitApiMode.DISABLED && explicitVisibility == Visibilities.Public) {
|
||||
return
|
||||
}
|
||||
|
||||
if (explicitVisibility == implicitVisibility) {
|
||||
reportElement(element, context, reporter)
|
||||
}
|
||||
}
|
||||
|
||||
private fun reportElement(element: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
reporter.reportOn(element.source, FirErrors.REDUNDANT_VISIBILITY_MODIFIER, context)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user