[Commonizer] Remove unnecessary nullability at CirKnownClassifiers.commonDependeeLibraries

This commit is contained in:
Dmitriy Dolovov
2020-12-03 13:37:29 +03:00
parent 984b3c2f30
commit daf42c1ee6
4 changed files with 10 additions and 5 deletions
@@ -128,7 +128,7 @@ internal class CommonizationVisitor(
val supertypesMap: MutableMap<CirType, CommonizedGroup<CirType>> = linkedMapOf() // preserve supertype order
for ((index, typeAlias) in targetDeclarations.withIndex()) {
val expandedClassId = typeAlias!!.expandedType.classifierId
if (classifiers.commonDependeeLibraries?.hasClassifier(expandedClassId) == true)
if (classifiers.commonDependeeLibraries.hasClassifier(expandedClassId))
return null // this case is not supported yet
val expandedClassNode = classifiers.commonized.classNode(expandedClassId) ?: return null
@@ -76,7 +76,7 @@ private class TypeAliasShortCircuitingCommonizer(
private tailrec fun computeCommonizedUnderlyingType(underlyingType: CirClassOrTypeAliasType): CirClassOrTypeAliasType {
return when (underlyingType) {
is CirClassType -> underlyingType
is CirTypeAliasType -> if (classifiers.commonDependeeLibraries?.hasClassifier(underlyingType.classifierId) == true)
is CirTypeAliasType -> if (classifiers.commonDependeeLibraries.hasClassifier(underlyingType.classifierId))
underlyingType
else
computeCommonizedUnderlyingType(underlyingType.underlyingType)
@@ -220,7 +220,7 @@ private class TypeArgumentListCommonizer(classifiers: CirKnownClassifiers) : Abs
)
private fun commonizeClass(classId: ClassId, classifiers: CirKnownClassifiers): Boolean {
if (classifiers.commonDependeeLibraries?.hasClassifier(classId) == true) {
if (classifiers.commonDependeeLibraries.hasClassifier(classId)) {
// The class is from common fragment of dependee library (ex: stdlib). Already commonized.
return true
} else if (classId.packageFqName.isUnderKotlinNativeSyntheticPackages) {
@@ -247,7 +247,7 @@ private fun commonizeClass(classId: ClassId, classifiers: CirKnownClassifiers):
}
private fun commonizeTypeAlias(typeAliasId: ClassId, classifiers: CirKnownClassifiers): CommonizedTypeAliasAnswer {
if (classifiers.commonDependeeLibraries?.hasClassifier(typeAliasId) == true) {
if (classifiers.commonDependeeLibraries.hasClassifier(typeAliasId)) {
// The type alias is from common fragment of dependee library (ex: stdlib). Already commonized.
return SUCCESS_FROM_DEPENDEE_LIBRARY
}
@@ -25,7 +25,8 @@ class CirKnownClassifiers(
val dependeeLibraries: Map<Target, CirProvidedClassifiers>
) {
// a shortcut for fast access
val commonDependeeLibraries: CirProvidedClassifiers? = dependeeLibraries.filterKeys { it is SharedTarget }.values.singleOrNull()
val commonDependeeLibraries: CirProvidedClassifiers =
dependeeLibraries.filterKeys { it is SharedTarget }.values.singleOrNull() ?: CirProvidedClassifiers.EMPTY
}
interface CirCommonizedClassifiers {
@@ -86,6 +87,10 @@ interface CirProvidedClassifiers {
//fun classifier(classifierId: ClassId): Any?
companion object {
internal val EMPTY = object : CirProvidedClassifiers {
override fun hasClassifier(classifierId: ClassId) = false
}
// N.B. This is suboptimal implementation. It will be replaced by another implementation that will
// retrieve classifier information directly from the metadata.
fun fromModules(storageManager: StorageManager, modules: () -> Collection<ModuleDescriptor>) = object : CirProvidedClassifiers {