From ed1751bbc670568142d0dc7f756246bf92c30307 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 18 Oct 2022 14:21:56 +0200 Subject: [PATCH] [fir] move mutable/base collection pair map do StandardClassIds to further reuse it --- .../types/ConeFlexibleTypeBoundsChecker.kt | 21 +++++-------------- .../jetbrains/kotlin/name/StandardClassIds.kt | 16 ++++++++++++++ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeFlexibleTypeBoundsChecker.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeFlexibleTypeBoundsChecker.kt index dc994ebdd17..0f0b8fe87a8 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeFlexibleTypeBoundsChecker.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeFlexibleTypeBoundsChecker.kt @@ -6,24 +6,13 @@ package org.jetbrains.kotlin.fir.types import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.name.StandardClassIds.Collections.baseCollectionToMutableEquivalent +import org.jetbrains.kotlin.name.StandardClassIds.Collections.mutableCollectionToBaseCollection object ConeFlexibleTypeBoundsChecker { - private val baseTypesToMutableEquivalent = mapOf( - StandardClassIds.Iterable to StandardClassIds.MutableIterable, - StandardClassIds.Iterator to StandardClassIds.MutableIterator, - StandardClassIds.ListIterator to StandardClassIds.MutableListIterator, - StandardClassIds.List to StandardClassIds.MutableList, - StandardClassIds.Collection to StandardClassIds.MutableCollection, - StandardClassIds.Set to StandardClassIds.MutableSet, - StandardClassIds.Map to StandardClassIds.MutableMap, - StandardClassIds.MapEntry to StandardClassIds.MutableMapEntry - ) - private val mutableToBaseMap = baseTypesToMutableEquivalent.entries.associateBy({ it.value }) { it.key } - fun areTypesMayBeLowerAndUpperBoundsOfSameFlexibleTypeByMutability(a: ConeKotlinType, b: ConeKotlinType): Boolean { val classId = a.classId ?: return false - val possiblePairBound = (baseTypesToMutableEquivalent[classId] ?: mutableToBaseMap[classId]) ?: return false + val possiblePairBound = (baseCollectionToMutableEquivalent[classId] ?: mutableCollectionToBaseCollection[classId]) ?: return false return possiblePairBound == b.classId } @@ -32,8 +21,8 @@ object ConeFlexibleTypeBoundsChecker { fun getBaseBoundFqNameByMutability(a: ConeKotlinType): ClassId? { val classId = a.classId ?: return null - if (classId in baseTypesToMutableEquivalent) return classId + if (classId in baseCollectionToMutableEquivalent) return classId - return mutableToBaseMap[classId] + return mutableCollectionToBaseCollection[classId] } } diff --git a/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt b/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt index 28affb65b73..638ee23b640 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt @@ -207,6 +207,22 @@ object StandardClassIds { object Java { val Record = "Record".javaLangId() } + + object Collections { + val baseCollectionToMutableEquivalent: Map = mapOf( + StandardClassIds.Iterable to StandardClassIds.MutableIterable, + StandardClassIds.Iterator to StandardClassIds.MutableIterator, + StandardClassIds.ListIterator to StandardClassIds.MutableListIterator, + StandardClassIds.List to StandardClassIds.MutableList, + StandardClassIds.Collection to StandardClassIds.MutableCollection, + StandardClassIds.Set to StandardClassIds.MutableSet, + StandardClassIds.Map to StandardClassIds.MutableMap, + StandardClassIds.MapEntry to StandardClassIds.MutableMapEntry + ) + + val mutableCollectionToBaseCollection: Map = + baseCollectionToMutableEquivalent.entries.associateBy({ it.value }) { it.key } + } } private fun String.baseId() = ClassId(StandardClassIds.BASE_KOTLIN_PACKAGE, Name.identifier(this))