[FIR] Use SupertypeSupplier in type resolver for calculating supertypes

This is needed to avoid problems with checking visibility of types which
  are used in supertypes during supertypes resolution in IDE, when
  supertypes of some class can be already computed, but not saved in
  class itself, but still lay in supertypeComputationSession

There were 4 failing tests before this changes (all in
  `DiagnosisCompilerTestFE10TestdataTestGenerated$Tests$Exposed`):
- testInternal
- testInternalAndProtected
- testProtected
- testProtectedSameWay
This commit is contained in:
Dmitriy Novozhilov
2021-11-16 10:43:10 +03:00
committed by TeamCityServer
parent 499b97d51e
commit e7c9d76163
6 changed files with 52 additions and 18 deletions
@@ -13,6 +13,7 @@ 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.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.symbols.FirBasedSymbol
@@ -30,6 +31,7 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() {
dispatchReceiver: ReceiverValue?,
session: FirSession,
isCallToPropertySetter: Boolean,
supertypeSupplier: SupertypeSupplier
): Boolean {
return when (declarationVisibility) {
JavaVisibilities.ProtectedAndPackage, JavaVisibilities.ProtectedStaticVisibility -> {
@@ -40,7 +42,8 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() {
if (canSeeProtectedMemberOf(
containingDeclarations, dispatchReceiver, ownerLookupTag, session,
isVariableOrNamedFunction = symbol is FirVariableSymbol || symbol is FirNamedFunctionSymbol || symbol is FirPropertyAccessorSymbol,
isSyntheticProperty = symbol.fir is FirSyntheticPropertyAccessor
isSyntheticProperty = symbol.fir is FirSyntheticPropertyAccessor,
supertypeSupplier
)
) return true