FIR: Support captureFromArguments for ConeTypes

This commit is contained in:
Simon Ogorodnik
2019-03-14 17:54:45 +03:00
parent 6efb22cd45
commit fedde668b3
2 changed files with 104 additions and 38 deletions
@@ -114,10 +114,33 @@ abstract class ConeFunctionType : ConeClassLikeType() {
abstract val returnType: ConeKotlinType
}
class ConeFlexibleType(val lowerBound: ConeLookupTagBasedType, val upperBound: ConeLookupTagBasedType) : ConeKotlinType(), FlexibleTypeMarker {
class ConeFlexibleType(val lowerBound: ConeLookupTagBasedType, val upperBound: ConeLookupTagBasedType) : ConeKotlinType(),
FlexibleTypeMarker {
override val typeArguments: Array<out ConeKotlinTypeProjection>
get() = emptyArray()
override val nullability: ConeNullability
get() = lowerBound.nullability.takeIf { it == upperBound.nullability } ?: ConeNullability.UNKNOWN
}
class ConeCapturedTypeConstructor(val projection: ConeKotlinTypeProjection) : TypeConstructorMarker {
var supertypes: List<ConeKotlinType>? = null
}
class ConeCapturedType(
val captureStatus: CaptureStatus,
val lowerType: ConeKotlinType?,
override val nullability: ConeNullability = ConeNullability.NOT_NULL,
val constructor: ConeCapturedTypeConstructor
) : ConeKotlinType(), SimpleTypeMarker, CapturedTypeMarker {
constructor(captureStatus: CaptureStatus, lowerType: ConeKotlinType?, projection: ConeKotlinTypeProjection) : this(
captureStatus,
lowerType,
constructor = ConeCapturedTypeConstructor(
projection
)
)
override val typeArguments: Array<out ConeKotlinTypeProjection>
get() = emptyArray()
}