[fir] move mutable/base collection pair map do StandardClassIds to further reuse it
This commit is contained in:
+5
-16
@@ -6,24 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.fir.types
|
package org.jetbrains.kotlin.fir.types
|
||||||
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
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 {
|
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 {
|
fun areTypesMayBeLowerAndUpperBoundsOfSameFlexibleTypeByMutability(a: ConeKotlinType, b: ConeKotlinType): Boolean {
|
||||||
val classId = a.classId ?: return false
|
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
|
return possiblePairBound == b.classId
|
||||||
}
|
}
|
||||||
@@ -32,8 +21,8 @@ object ConeFlexibleTypeBoundsChecker {
|
|||||||
fun getBaseBoundFqNameByMutability(a: ConeKotlinType): ClassId? {
|
fun getBaseBoundFqNameByMutability(a: ConeKotlinType): ClassId? {
|
||||||
val classId = a.classId ?: return null
|
val classId = a.classId ?: return null
|
||||||
|
|
||||||
if (classId in baseTypesToMutableEquivalent) return classId
|
if (classId in baseCollectionToMutableEquivalent) return classId
|
||||||
|
|
||||||
return mutableToBaseMap[classId]
|
return mutableCollectionToBaseCollection[classId]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -207,6 +207,22 @@ object StandardClassIds {
|
|||||||
object Java {
|
object Java {
|
||||||
val Record = "Record".javaLangId()
|
val Record = "Record".javaLangId()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object Collections {
|
||||||
|
val baseCollectionToMutableEquivalent: Map<ClassId, ClassId> = 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<ClassId, ClassId> =
|
||||||
|
baseCollectionToMutableEquivalent.entries.associateBy({ it.value }) { it.key }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun String.baseId() = ClassId(StandardClassIds.BASE_KOTLIN_PACKAGE, Name.identifier(this))
|
private fun String.baseId() = ClassId(StandardClassIds.BASE_KOTLIN_PACKAGE, Name.identifier(this))
|
||||||
|
|||||||
Reference in New Issue
Block a user