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 9acf658006fcaf6f59a77071cb66519155d5c3ba..6e20a0ffff6c1f23e6fbe076a6de678c11d262d1 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 @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors @@ -114,14 +115,13 @@ object FirOverrideChecker : FirClassChecker() { it to (it.fir as FirMemberDeclaration).visibility }.sortedBy { pair -> // Regard `null` compare as Int.MIN so that we can report CANNOT_CHANGE_... first deterministically - visibility.compareTo(pair.second) ?: Int.MIN_VALUE + Visibilities.compare(visibility, pair.second) ?: Int.MIN_VALUE } for ((overridden, overriddenVisibility) in visibilities) { - val compare = visibility.compareTo(overriddenVisibility) + val compare = Visibilities.compare(visibility, overriddenVisibility) if (compare == null) { - // TODO: not ready yet (even after determinism massage), e.g., a Kotlin class that extends a Java class - // reporter.reportCannotChangeAccessPrivilege(this, overridden.fir) + reporter.reportCannotChangeAccessPrivilege(this, overridden.fir, context) return } else if (compare < 0) { reporter.reportCannotWeakenAccessPrivilege(this, overridden.fir, context) diff --git a/compiler/testData/diagnostics/tests/scopes/VisibilityInheritModifier.fir.kt b/compiler/testData/diagnostics/tests/scopes/VisibilityInheritModifier.fir.kt index fe0830c44b97925f64f6600b68a7268969bb9ded..9f2f655f395ec35ada18dea7fb2f377c95a36d8f 100644 --- a/compiler/testData/diagnostics/tests/scopes/VisibilityInheritModifier.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/VisibilityInheritModifier.fir.kt @@ -5,7 +5,7 @@ open class A { } class B : A() { - protected override fun foo() {} + protected override fun foo() {} } class C : A() { @@ -48,7 +48,7 @@ class I : H() { } class J : H() { - internal override fun pi_fun() {} + internal override fun pi_fun() {} } class K : H() { diff --git a/compiler/testData/diagnostics/tests/scopes/kt151.fir.kt b/compiler/testData/diagnostics/tests/scopes/kt151.fir.kt index 6b2b2ef4735af2e64018f820f60116ffe0d4b87b..3c7df5a8e6e4f3517c6fc66dca36dee5619f9635 100644 --- a/compiler/testData/diagnostics/tests/scopes/kt151.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/kt151.fir.kt @@ -24,7 +24,7 @@ interface T { } class D : C(), T { - protected override fun foo() {} + protected override fun foo() {} } class E : C(), T {