FirOverrideChecker: don't report VIRTUAL_MEMBER_HIDDEN with invisible
#KT-53197 Fixed
This commit is contained in:
+18
-1
@@ -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,
|
||||
|
||||
+6
@@ -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()
|
||||
|
||||
-21
@@ -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
|
||||
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user