提交 c5cabce2 编写于 作者: J Jinseong Jeon 提交者: Mikhail Glukhikh

FIR: check visibility properly for CANNOT_CHANGE_ACCESS_PRIVILEGE

上级 f45af5ea
......@@ -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)
......
......@@ -5,7 +5,7 @@ open class A {
}
class B : A() {
protected override fun foo() {}
<!CANNOT_CHANGE_ACCESS_PRIVILEGE!>protected<!> override fun foo() {}
}
class C : A() {
......@@ -48,7 +48,7 @@ class I : H() {
}
class J : H() {
internal override fun pi_fun() {}
<!CANNOT_CHANGE_ACCESS_PRIVILEGE!>internal<!> override fun pi_fun() {}
}
class K : H() {
......
......@@ -24,7 +24,7 @@ interface T {
}
class D : C(), T {
protected override fun foo() {}
<!CANNOT_CHANGE_ACCESS_PRIVILEGE!>protected<!> override fun foo() {}
}
class E : C(), T {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册