From 339c69fef0508afec53cbf34dce1ebbece251dba Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 19 Nov 2021 18:04:01 +0300 Subject: [PATCH] [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 --- .../kotlin/fir/types/FirCorrespondingSupertypesCache.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/FirCorrespondingSupertypesCache.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/FirCorrespondingSupertypesCache.kt index aee30707906..7b138735d3b 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/FirCorrespondingSupertypesCache.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/FirCorrespondingSupertypesCache.kt @@ -56,8 +56,8 @@ class FirCorrespondingSupertypesCache(private val session: FirSession) : FirSess private fun computeSupertypesMap( subtypeLookupTag: ConeClassLikeLookupTag, state: TypeCheckerState - ): Map>? { - val resultingMap = HashMap>() + ): Map>? { + val resultingMap = HashMap>() 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>, + resultingMap: MutableMap>, 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 -> {