[FIR] Fix handling fake overrides in override visibility check

^KT-65432
This commit is contained in:
Pavel Kunyavskiy
2024-01-31 18:09:20 +01:00
committed by Space Team
parent 61f14374b9
commit 24f8da471f
14 changed files with 1503 additions and 4 deletions
@@ -163,6 +163,17 @@ abstract class FirVisibilityChecker : FirSessionComponent {
derivedClassModuleData: FirModuleData,
packageNameOfDerivedClass: FqName,
candidateInBaseClass: FirMemberDeclaration,
): Boolean = isSpecificDeclarationVisibleForOverriding(
derivedClassModuleData,
packageNameOfDerivedClass,
// It is important for package-private visiblity as fake override can be in another package
if (candidateInBaseClass is FirCallableDeclaration) candidateInBaseClass.originalOrSelf() else candidateInBaseClass,
)
private fun isSpecificDeclarationVisibleForOverriding(
derivedClassModuleData: FirModuleData,
packageNameOfDerivedClass: FqName,
candidateInBaseClass: FirMemberDeclaration,
): Boolean = when (candidateInBaseClass.visibility) {
Visibilities.Internal -> {
candidateInBaseClass.moduleData == derivedClassModuleData ||