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) {}
|
processFunctionsByName(memberSymbol.name) {}
|
||||||
getDirectOverriddenFunctions(memberSymbol)
|
getDirectOverriddenFunctions(memberSymbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
is FirPropertySymbol -> {
|
is FirPropertySymbol -> {
|
||||||
processPropertiesByName(memberSymbol.name) {}
|
processPropertiesByName(memberSymbol.name) {}
|
||||||
getDirectOverriddenProperties(memberSymbol)
|
getDirectOverriddenProperties(memberSymbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> throw IllegalArgumentException("unexpected member kind $memberSymbol")
|
else -> throw IllegalArgumentException("unexpected member kind $memberSymbol")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -267,7 +269,22 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
|
|
||||||
if (kind !is KtRealSourceElementKind && kind !is KtFakeSourceElementKind.PropertyFromParameter) return
|
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
|
val originalContainingClassSymbol = overridden.containingClass()?.toSymbol(context.session) as? FirRegularClassSymbol ?: return
|
||||||
reporter.reportOn(
|
reporter.reportOn(
|
||||||
member.source,
|
member.source,
|
||||||
|
|||||||
+6
@@ -18073,6 +18073,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/fir/incorrectBytecodeWithEnhancedNullability.kt");
|
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
|
@Test
|
||||||
@TestMetadata("IrBuiltIns.kt")
|
@TestMetadata("IrBuiltIns.kt")
|
||||||
public void testIrBuiltIns() throws Exception {
|
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
|
// MODULE: m1
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
|
|
||||||
|
|||||||
+6
@@ -18073,6 +18073,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/fir/incorrectBytecodeWithEnhancedNullability.kt");
|
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
|
@Test
|
||||||
@TestMetadata("IrBuiltIns.kt")
|
@TestMetadata("IrBuiltIns.kt")
|
||||||
public void testIrBuiltIns() throws Exception {
|
public void testIrBuiltIns() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user