FIR: set substituteTypes value explicitly in calls inside providers

This commit is contained in:
Mikhail Glukhikh
2021-10-19 16:17:47 +03:00
parent 3483bc41fd
commit 98d34b40ab
3 changed files with 9 additions and 6 deletions
@@ -88,7 +88,9 @@ object JavaScopeProvider : FirScopeProvider() {
if (regularClass.isThereLoopInSupertypes(useSiteSession)) if (regularClass.isThereLoopInSupertypes(useSiteSession))
listOf(StandardClassIds.Any.constructClassLikeType(emptyArray(), isNullable = false)) listOf(StandardClassIds.Any.constructClassLikeType(emptyArray(), isNullable = false))
else else
lookupSuperTypes(regularClass, lookupInterfaces = true, deep = false, useSiteSession = useSiteSession) lookupSuperTypes(
regularClass, lookupInterfaces = true, deep = false, useSiteSession = useSiteSession, substituteTypes = true
)
val superTypeScopes = superTypes.mapNotNull { val superTypeScopes = superTypes.mapNotNull {
it.scopeForSupertype(useSiteSession, scopeSession, subClass = regularClass) it.scopeForSupertype(useSiteSession, scopeSession, subClass = regularClass)
@@ -49,8 +49,8 @@ fun lookupSuperTypes(
lookupInterfaces: Boolean, lookupInterfaces: Boolean,
deep: Boolean, deep: Boolean,
useSiteSession: FirSession, useSiteSession: FirSession,
substituteTypes: Boolean,
supertypeSupplier: SupertypeSupplier = SupertypeSupplier.Default, supertypeSupplier: SupertypeSupplier = SupertypeSupplier.Default,
substituteTypes: Boolean = false
): List<ConeClassLikeType> { ): List<ConeClassLikeType> {
return SmartList<ConeClassLikeType>().also { return SmartList<ConeClassLikeType>().also {
klass.symbol.collectSuperTypes(it, SmartSet.create(), deep, lookupInterfaces, substituteTypes, useSiteSession, supertypeSupplier) klass.symbol.collectSuperTypes(it, SmartSet.create(), deep, lookupInterfaces, substituteTypes, useSiteSession, supertypeSupplier)
@@ -51,10 +51,11 @@ class FirKotlinScopeProvider(
} }
val scopes = lookupSuperTypes(klass, lookupInterfaces = true, deep = false, useSiteSession = useSiteSession) val scopes = lookupSuperTypes(
.mapNotNull { useSiteSuperType -> klass, lookupInterfaces = true, deep = false, useSiteSession = useSiteSession, substituteTypes = true
useSiteSuperType.scopeForSupertype(useSiteSession, scopeSession, klass) ).mapNotNull { useSiteSuperType ->
} useSiteSuperType.scopeForSupertype(useSiteSession, scopeSession, klass)
}
FirClassUseSiteMemberScope( FirClassUseSiteMemberScope(
useSiteSession, useSiteSession,
FirTypeIntersectionScope.prepareIntersectionScope( FirTypeIntersectionScope.prepareIntersectionScope(