diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.fir.txt index daed56be777..2742e68027d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.fir.txt @@ -171,3 +171,12 @@ FILE: RedundantVisibilityModifierChecker.kt } } + private final class Foo : R|kotlin/Any| { + public constructor(): R|Foo| { + super() + } + + internal final fun barBarian(): R|kotlin/Unit| { + } + + } diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt index e385a637065..25aae578b4c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt @@ -84,3 +84,7 @@ open class J { get() = 3.1415926535 set(value) {} } + +private class Foo { + internal fun barBarian() {} +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt index 0c60122694f..db4bf29fa9f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt @@ -20,10 +20,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirDeclarationSyntaxChe import org.jetbrains.kotlin.fir.analysis.checkers.toVisibilityOrNull import org.jetbrains.kotlin.fir.analysis.diagnostics.* import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass -import org.jetbrains.kotlin.fir.declarations.utils.isOverride -import org.jetbrains.kotlin.fir.declarations.utils.isSealed -import org.jetbrains.kotlin.fir.declarations.utils.visibility +import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.psi.KtDeclaration @@ -51,7 +48,7 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker implicitVisibility - explicitVisibility == Visibilities.Internal && containingMemberDeclaration?.isLocalMember == true -> Visibilities.Internal + explicitVisibility.isEffectivelyHiddenBy(containingMemberDeclaration) -> explicitVisibility else -> return } @@ -66,6 +63,17 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker 0 + } + private fun FirDeclaration.implicitVisibility(context: CheckerContext): Visibility { return when { this is FirPropertyAccessor && isSetter && status.isOverride -> this.visibility