[NI] Resolve type variable to Nothing for TO_SUBTYPE direction.

This commit is contained in:
Stanislav Erokhin
2017-04-13 13:47:06 +03:00
parent 6e24b0f89d
commit 73cc1fdd9c
4 changed files with 32 additions and 1 deletions
@@ -38,6 +38,8 @@ class ResultTypeResolver(
fun findResultType(c: Context, variableWithConstraints: VariableWithConstraints, direction: ResolveDirection): UnwrappedType? {
findResultIfThereIsEqualsConstraint(c, variableWithConstraints, allowedFixToNotProperType = false)?.let { return it }
val builtIns = variableWithConstraints.typeVariable.freshTypeConstructor.builtIns
if (direction == ResolveDirection.TO_SUBTYPE || direction == ResolveDirection.UNKNOWN) {
val lowerConstraints = variableWithConstraints.constraints.filter { it.kind == ConstraintKind.LOWER && c.isProperType(it.type) }
if (lowerConstraints.isNotEmpty()) {
@@ -64,6 +66,8 @@ class ResultTypeResolver(
}
}
if (direction == ResolveDirection.TO_SUBTYPE) return builtIns.nothingType
// direction == TO_SUPER or there is no LOWER bounds
val upperConstraints = variableWithConstraints.constraints.filter { it.kind == ConstraintKind.UPPER && c.isProperType(it.type) }
if (upperConstraints.isNotEmpty()) {
@@ -72,7 +76,7 @@ class ResultTypeResolver(
return typeApproximator.approximateToSubType(upperType, TypeApproximatorConfiguration.CapturedTypesApproximation) ?: upperType
}
return null
return return builtIns.anyType
}
fun findResultIfThereIsEqualsConstraint(