FirOverrideChecker: don't report VIRTUAL_MEMBER_HIDDEN with invisible

#KT-53197 Fixed
This commit is contained in:
Mikhail Glukhikh
2022-09-19 17:01:26 +02:00
committed by Space
parent 8281c166b1
commit 1ad2ec302b
6 changed files with 48 additions and 22 deletions
@@ -63,10 +63,12 @@ object FirOverrideChecker : FirClassChecker() {
processFunctionsByName(memberSymbol.name) {}
getDirectOverriddenFunctions(memberSymbol)
}
is FirPropertySymbol -> {
processPropertiesByName(memberSymbol.name) {}
getDirectOverriddenProperties(memberSymbol)
}
else -> throw IllegalArgumentException("unexpected member kind $memberSymbol")
}
}
@@ -267,7 +269,22 @@ object FirOverrideChecker : FirClassChecker() {
if (kind !is KtRealSourceElementKind && kind !is KtFakeSourceElementKind.PropertyFromParameter) return
val overridden = overriddenMemberSymbols.first().originalOrSelf()
val visibilityChecker = context.session.visibilityChecker
val file = context.findClosest<FirFile>() ?: return
val containingDeclarations = context.containingDeclarations + containingClass
@OptIn(SymbolInternals::class)
val overridden = overriddenMemberSymbols.firstOrNull {
it.lazyResolveToPhase(FirResolvePhase.STATUS)
visibilityChecker.isVisible(
it.originalOrSelf().fir,
context.session,
file,
containingDeclarations,
null,
skipCheckForContainingClassVisibility = true
)
}?.originalOrSelf() ?: return
val originalContainingClassSymbol = overridden.containingClass()?.toSymbol(context.session) as? FirRegularClassSymbol ?: return
reporter.reportOn(
member.source,
@@ -18073,6 +18073,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/fir/incorrectBytecodeWithEnhancedNullability.kt");
}
@Test
@TestMetadata("internalPotentialOverride.kt")
public void testInternalPotentialOverride() throws Exception {
runTest("compiler/testData/codegen/box/fir/internalPotentialOverride.kt");
}
@Test
@TestMetadata("IrBuiltIns.kt")
public void testIrBuiltIns() throws Exception {
@@ -0,0 +1,17 @@
// TARGET_BACKEND: JVM_IR
// MODULE: m1
// FILE: A.kt
open class A {
internal open fun foo() : Int = 1
}
// MODULE: m2(m1)
// FILE: B.kt
class B : A() {
fun foo() : String = "OK"
}
fun box() = B().foo()
@@ -1,21 +0,0 @@
// MODULE: m1
// FILE: A.kt
open class A {
internal open fun foo() : Int = 1
}
open class AG<T> {
internal open fun bar(arg: T) = arg
}
// MODULE: m2(m1)
// FILE: B.kt
class B : A() {
fun <!VIRTUAL_MEMBER_HIDDEN!>foo<!>() : String = ""
}
class BG : AG<String>() {
fun bar(arg: Int) = arg
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// MODULE: m1
// FILE: A.kt
@@ -18073,6 +18073,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/fir/incorrectBytecodeWithEnhancedNullability.kt");
}
@Test
@TestMetadata("internalPotentialOverride.kt")
public void testInternalPotentialOverride() throws Exception {
runTest("compiler/testData/codegen/box/fir/internalPotentialOverride.kt");
}
@Test
@TestMetadata("IrBuiltIns.kt")
public void testIrBuiltIns() throws Exception {