FIR: check visibility properly for CANNOT_CHANGE_ACCESS_PRIVILEGE

This commit is contained in:
Jinseong Jeon
2021-02-25 23:39:10 -08:00
committed by Mikhail Glukhikh
parent f45af5ea0e
commit c5cabce2d5
3 changed files with 7 additions and 7 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.analysis.checkers.declaration package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.descriptors.Modality 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.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
@@ -114,14 +115,13 @@ object FirOverrideChecker : FirClassChecker() {
it to (it.fir as FirMemberDeclaration).visibility it to (it.fir as FirMemberDeclaration).visibility
}.sortedBy { pair -> }.sortedBy { pair ->
// Regard `null` compare as Int.MIN so that we can report CANNOT_CHANGE_... first deterministically // 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) { for ((overridden, overriddenVisibility) in visibilities) {
val compare = visibility.compareTo(overriddenVisibility) val compare = Visibilities.compare(visibility, overriddenVisibility)
if (compare == null) { 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, context)
// reporter.reportCannotChangeAccessPrivilege(this, overridden.fir)
return return
} else if (compare < 0) { } else if (compare < 0) {
reporter.reportCannotWeakenAccessPrivilege(this, overridden.fir, context) reporter.reportCannotWeakenAccessPrivilege(this, overridden.fir, context)
@@ -5,7 +5,7 @@ open class A {
} }
class B : A() { class B : A() {
protected override fun foo() {} <!CANNOT_CHANGE_ACCESS_PRIVILEGE!>protected<!> override fun foo() {}
} }
class C : A() { class C : A() {
@@ -48,7 +48,7 @@ class I : H() {
} }
class J : H() { class J : H() {
internal override fun pi_fun() {} <!CANNOT_CHANGE_ACCESS_PRIVILEGE!>internal<!> override fun pi_fun() {}
} }
class K : H() { class K : H() {
+1 -1
View File
@@ -24,7 +24,7 @@ interface T {
} }
class D : C(), T { class D : C(), T {
protected override fun foo() {} <!CANNOT_CHANGE_ACCESS_PRIVILEGE!>protected<!> override fun foo() {}
} }
class E : C(), T { class E : C(), T {