[NI] Remove captured type approximation in type arguments of resolved call

This commit is contained in:
Dmitriy Novozhilov
2019-04-23 13:46:49 +03:00
committed by Mikhail Zarechenskiy
parent 421fda6e92
commit 65380f4eb4
4 changed files with 11 additions and 3 deletions
@@ -674,7 +674,7 @@ class NewResolvedCallImpl<D : CallableDescriptor>(
typeArguments = resolvedCallAtom.substitutor.freshVariables.map {
val substituted = (substitutor ?: FreshVariableNewTypeSubstitutor.Empty).safeSubstitute(it.defaultType)
TypeApproximator(substituted.constructor.builtIns)
.approximateToSuperType(substituted, TypeApproximatorConfiguration.CapturedAndIntegerLiteralsTypesApproximation)
.approximateToSuperType(substituted, TypeApproximatorConfiguration.IntegerLiteralsTypesApproximation)
?: substituted
}
@@ -90,6 +90,13 @@ open class TypeApproximatorConfiguration {
object CapturedAndIntegerLiteralsTypesApproximation : TypeApproximatorConfiguration.AbstractCapturedTypesApproximation(FROM_EXPRESSION) {
override val integerLiteralType: Boolean get() = true
}
object IntegerLiteralsTypesApproximation : TypeApproximatorConfiguration.AllFlexibleSameValue() {
override val integerLiteralType: Boolean get() = true
override val allFlexible: Boolean get() = true
override val intersection get() = ALLOWED
override val typeVariable: (TypeVariableTypeConstructor) -> Boolean get() = { true }
override val capturedType: (NewCapturedType) -> Boolean get() = { true }
}
}
@@ -5,5 +5,5 @@ class A<F>
inline fun <reified T> foo(x: A<T>) {}
fun test(x: A<out CharSequence>) {
<!OI;REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!>(x)
<!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!>(x)
}