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) {
|
return when (this) {
|
||||||
// We also need to collect those on `upperBound` due to nullability.
|
// We also need to collect those on `upperBound` due to nullability.
|
||||||
is ConeFlexibleType -> lowerBound.getDirectSuperTypes(shouldApproximate) + upperBound.getDirectSuperTypes(shouldApproximate)
|
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 ConeIntersectionType -> intersectedTypes.asSequence().flatMap { it.getDirectSuperTypes(shouldApproximate) }
|
||||||
is ConeClassErrorType -> emptySequence()
|
is ConeClassErrorType -> emptySequence()
|
||||||
is ConeLookupTagBasedType -> getSubstitutedSuperTypes(shouldApproximate)
|
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>
|
override val typeArguments: Array<out ConeTypeProjection>
|
||||||
get() = original.typeArguments
|
get() = original.typeArguments
|
||||||
|
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo
|
|||||||
|
|
||||||
override fun DefinitelyNotNullTypeMarker.original(): SimpleTypeMarker {
|
override fun DefinitelyNotNullTypeMarker.original(): SimpleTypeMarker {
|
||||||
require(this is ConeDefinitelyNotNullType)
|
require(this is ConeDefinitelyNotNullType)
|
||||||
return this.original as SimpleTypeMarker
|
return this.original
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun typeSubstitutorByTypeConstructor(map: Map<TypeConstructorMarker, KotlinTypeMarker>): ConeSubstitutor {
|
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.resolve.calls.NewCommonSuperTypeCalculator
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.model.*
|
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.lowerBoundIfFlexible as coneLowerBoundIfFlexible
|
||||||
import org.jetbrains.kotlin.fir.types.upperBoundIfFlexible as coneUpperBoundIfFlexible
|
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(
|
fun ConeDefinitelyNotNullType.Companion.create(
|
||||||
original: ConeKotlinType,
|
original: ConeKotlinType,
|
||||||
typeContext: ConeTypeContext
|
typeContext: ConeTypeContext
|
||||||
): ConeDefinitelyNotNullType? {
|
): ConeDefinitelyNotNullType? {
|
||||||
return when {
|
return when (original) {
|
||||||
original is ConeDefinitelyNotNullType -> original
|
is ConeDefinitelyNotNullType -> original
|
||||||
typeContext.makesSenseToBeDefinitelyNotNull(original) -> ConeDefinitelyNotNullType(original.coneLowerBoundIfFlexible())
|
is ConeFlexibleType -> create(original.lowerBound, typeContext)
|
||||||
else -> null
|
is ConeSimpleKotlinType -> runIf(typeContext.makesSenseToBeDefinitelyNotNull(original)) {
|
||||||
|
ConeDefinitelyNotNullType(original.coneLowerBoundIfFlexible())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user