FIR: make ConeSimpleKotlinType the only original for definitely not-null
This commit is contained in:
committed by
TeamCityServer
parent
434213f416
commit
81ff9b820a
+3
-1
@@ -135,7 +135,9 @@ internal class KtFirTypeProvider(
|
||||
return when (this) {
|
||||
// We also need to collect those on `upperBound` due to nullability.
|
||||
is ConeFlexibleType -> lowerBound.getDirectSuperTypes(shouldApproximate) + upperBound.getDirectSuperTypes(shouldApproximate)
|
||||
is ConeDefinitelyNotNullType -> original.getDirectSuperTypes(shouldApproximate).map { ConeDefinitelyNotNullType(it) }
|
||||
is ConeDefinitelyNotNullType -> original.getDirectSuperTypes(shouldApproximate).map {
|
||||
ConeDefinitelyNotNullType.create(it, analysisSession.rootModuleSession.typeContext) ?: it
|
||||
}
|
||||
is ConeIntersectionType -> intersectedTypes.asSequence().flatMap { it.getDirectSuperTypes(shouldApproximate) }
|
||||
is ConeClassErrorType -> emptySequence()
|
||||
is ConeLookupTagBasedType -> getSubstitutedSuperTypes(shouldApproximate)
|
||||
|
||||
@@ -256,7 +256,7 @@ class ConeTypeVariableType(
|
||||
|
||||
}
|
||||
|
||||
data class ConeDefinitelyNotNullType(val original: ConeKotlinType) : ConeSimpleKotlinType(), DefinitelyNotNullTypeMarker {
|
||||
data class ConeDefinitelyNotNullType(val original: ConeSimpleKotlinType) : ConeSimpleKotlinType(), DefinitelyNotNullTypeMarker {
|
||||
override val typeArguments: Array<out ConeTypeProjection>
|
||||
get() = original.typeArguments
|
||||
|
||||
|
||||
@@ -324,7 +324,7 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo
|
||||
|
||||
override fun DefinitelyNotNullTypeMarker.original(): SimpleTypeMarker {
|
||||
require(this is ConeDefinitelyNotNullType)
|
||||
return this.original as SimpleTypeMarker
|
||||
return this.original
|
||||
}
|
||||
|
||||
override fun typeSubstitutorByTypeConstructor(map: Map<TypeConstructorMarker, KotlinTypeMarker>): ConeSubstitutor {
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||
import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator
|
||||
import org.jetbrains.kotlin.types.*
|
||||
import org.jetbrains.kotlin.types.model.*
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||
import org.jetbrains.kotlin.fir.types.lowerBoundIfFlexible as coneLowerBoundIfFlexible
|
||||
import org.jetbrains.kotlin.fir.types.upperBoundIfFlexible as coneUpperBoundIfFlexible
|
||||
|
||||
@@ -68,15 +69,16 @@ private fun ConeTypeContext.makesSenseToBeDefinitelyNotNull(originalType: ConeKo
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: leave only one of `create` and `makeConeTypeDefinitelyNotNullOrNotNull`
|
||||
fun ConeDefinitelyNotNullType.Companion.create(
|
||||
original: ConeKotlinType,
|
||||
typeContext: ConeTypeContext
|
||||
): ConeDefinitelyNotNullType? {
|
||||
return when {
|
||||
original is ConeDefinitelyNotNullType -> original
|
||||
typeContext.makesSenseToBeDefinitelyNotNull(original) -> ConeDefinitelyNotNullType(original.coneLowerBoundIfFlexible())
|
||||
else -> null
|
||||
return when (original) {
|
||||
is ConeDefinitelyNotNullType -> original
|
||||
is ConeFlexibleType -> create(original.lowerBound, typeContext)
|
||||
is ConeSimpleKotlinType -> runIf(typeContext.makesSenseToBeDefinitelyNotNull(original)) {
|
||||
ConeDefinitelyNotNullType(original.coneLowerBoundIfFlexible())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user