[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:
+5
-4
@@ -56,8 +56,8 @@ class FirCorrespondingSupertypesCache(private val session: FirSession) : FirSess
|
|||||||
private fun computeSupertypesMap(
|
private fun computeSupertypesMap(
|
||||||
subtypeLookupTag: ConeClassLikeLookupTag,
|
subtypeLookupTag: ConeClassLikeLookupTag,
|
||||||
state: TypeCheckerState
|
state: TypeCheckerState
|
||||||
): Map<ConeClassLikeLookupTag, List<ConeClassLikeType>>? {
|
): Map<ConeClassLikeLookupTag, MutableList<ConeClassLikeType>>? {
|
||||||
val resultingMap = HashMap<ConeClassLikeLookupTag, List<ConeClassLikeType>>()
|
val resultingMap = HashMap<ConeClassLikeLookupTag, MutableList<ConeClassLikeType>>()
|
||||||
|
|
||||||
val subtypeFirClass: FirClassLikeDeclaration = subtypeLookupTag.toSymbol(session)?.fir ?: return null
|
val subtypeFirClass: FirClassLikeDeclaration = subtypeLookupTag.toSymbol(session)?.fir ?: return null
|
||||||
|
|
||||||
@@ -83,14 +83,15 @@ class FirCorrespondingSupertypesCache(private val session: FirSession) : FirSess
|
|||||||
|
|
||||||
private fun computeSupertypePolicyAndPutInMap(
|
private fun computeSupertypePolicyAndPutInMap(
|
||||||
supertype: SimpleTypeMarker,
|
supertype: SimpleTypeMarker,
|
||||||
resultingMap: MutableMap<ConeClassLikeLookupTag, List<ConeClassLikeType>>,
|
resultingMap: MutableMap<ConeClassLikeLookupTag, MutableList<ConeClassLikeType>>,
|
||||||
state: TypeCheckerState
|
state: TypeCheckerState
|
||||||
): TypeCheckerState.SupertypesPolicy {
|
): TypeCheckerState.SupertypesPolicy {
|
||||||
val supertypeLookupTag = (supertype as ConeClassLikeType).lookupTag
|
val supertypeLookupTag = (supertype as ConeClassLikeType).lookupTag
|
||||||
val captured =
|
val captured =
|
||||||
state.typeSystemContext.captureFromArguments(supertype, CaptureStatus.FOR_SUBTYPING) as ConeClassLikeType? ?: supertype
|
state.typeSystemContext.captureFromArguments(supertype, CaptureStatus.FOR_SUBTYPING) as ConeClassLikeType? ?: supertype
|
||||||
|
|
||||||
resultingMap[supertypeLookupTag] = listOf(captured)
|
val list = resultingMap.computeIfAbsent(supertypeLookupTag) { mutableListOf() }
|
||||||
|
list += captured
|
||||||
|
|
||||||
return when {
|
return when {
|
||||||
with(state.typeSystemContext) { captured.argumentsCount() } == 0 -> {
|
with(state.typeSystemContext) { captured.argumentsCount() } == 0 -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user