[FIR] Collect all supertypes with same type constructor in corresponding supertypes cache

This is needed to fir behavior of cache with algorithm in
  abstract type checker
This commit is contained in:
Dmitriy Novozhilov
2021-11-19 18:04:01 +03:00
parent d72fcc92fe
commit 339c69fef0
@@ -56,8 +56,8 @@ class FirCorrespondingSupertypesCache(private val session: FirSession) : FirSess
private fun computeSupertypesMap(
subtypeLookupTag: ConeClassLikeLookupTag,
state: TypeCheckerState
): Map<ConeClassLikeLookupTag, List<ConeClassLikeType>>? {
val resultingMap = HashMap<ConeClassLikeLookupTag, List<ConeClassLikeType>>()
): Map<ConeClassLikeLookupTag, MutableList<ConeClassLikeType>>? {
val resultingMap = HashMap<ConeClassLikeLookupTag, MutableList<ConeClassLikeType>>()
val subtypeFirClass: FirClassLikeDeclaration = subtypeLookupTag.toSymbol(session)?.fir ?: return null
@@ -83,14 +83,15 @@ class FirCorrespondingSupertypesCache(private val session: FirSession) : FirSess
private fun computeSupertypePolicyAndPutInMap(
supertype: SimpleTypeMarker,
resultingMap: MutableMap<ConeClassLikeLookupTag, List<ConeClassLikeType>>,
resultingMap: MutableMap<ConeClassLikeLookupTag, MutableList<ConeClassLikeType>>,
state: TypeCheckerState
): TypeCheckerState.SupertypesPolicy {
val supertypeLookupTag = (supertype as ConeClassLikeType).lookupTag
val captured =
state.typeSystemContext.captureFromArguments(supertype, CaptureStatus.FOR_SUBTYPING) as ConeClassLikeType? ?: supertype
resultingMap[supertypeLookupTag] = listOf(captured)
val list = resultingMap.computeIfAbsent(supertypeLookupTag) { mutableListOf() }
list += captured
return when {
with(state.typeSystemContext) { captured.argumentsCount() } == 0 -> {