From c5cabce2d509801c2ee63e055a81d8288372f67f Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Thu, 25 Feb 2021 23:39:10 -0800 Subject: [PATCH] FIR: check visibility properly for CANNOT_CHANGE_ACCESS_PRIVILEGE --- .../analysis/checkers/declaration/FirOverrideChecker.kt | 8 ++++---- .../tests/scopes/VisibilityInheritModifier.fir.kt | 4 ++-- compiler/testData/diagnostics/tests/scopes/kt151.fir.kt | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) 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 9acf658006f..6e20a0ffff6 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 fe0830c44b9..9f2f655f395 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 6b2b2ef4735..3c7df5a8e6e 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 {