K2: copy explicit receiver to dispatch receiver for static member accesses

Related to KT-55116
This commit is contained in:
Mikhail Glukhikh
2023-01-17 16:37:08 +01:00
committed by Space Team
parent 4167a69e30
commit 938e1d5ce8
5 changed files with 22 additions and 5 deletions
@@ -13,12 +13,14 @@ import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
import org.jetbrains.kotlin.fir.declarations.utils.visibility
import org.jetbrains.kotlin.fir.resolve.SupertypeSupplier
import org.jetbrains.kotlin.fir.resolve.calls.FirSimpleSyntheticPropertySymbol
import org.jetbrains.kotlin.fir.resolve.calls.ReceiverValue
import org.jetbrains.kotlin.fir.resolve.isSubclassOf
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.utils.addToStdlib.lastIsInstanceOrNull
@@ -41,7 +43,13 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() {
} else {
val ownerLookupTag = symbol.getOwnerLookupTag() ?: return false
if (canSeeProtectedMemberOf(
symbol, containingDeclarations, dispatchReceiver, ownerLookupTag, session,
symbol,
containingDeclarations,
// Note: dispatch receiver isn't relevant for Java protected static
// See e.g. diagnostics/tests/visibility/packagePrivateStatic.kt
dispatchReceiver.takeUnless { symbol is FirCallableSymbol && symbol.isStatic },
ownerLookupTag,
session,
isVariableOrNamedFunction = symbol.isVariableOrNamedFunction(),
isSyntheticProperty = symbol.fir is FirSyntheticPropertyAccessor,
supertypeSupplier