From e83f3bbf043caa8f1c5bff3b61601d0eabaf1a34 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 7 Sep 2020 19:20:59 +0300 Subject: [PATCH] Introduce substitution to ConeTypeContext.captureFromArguments This commit itself does not influence anything --- .../src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt index 94f7add7ab0..ab18e1f88f3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt @@ -328,6 +328,10 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty ConeCapturedType(status, lowerType, argument, typeConstructor.getParameter(index)) } + val substitutor = substitutorByMap((0 until argumentsCount).map { index -> + (typeConstructor.getParameter(index) as ConeTypeParameterLookupTag).toSymbol() to (newArguments[index] as ConeKotlinType) + }.toMap()) + for (index in 0 until argumentsCount) { val oldArgument = type.typeArguments[index] val newArgument = newArguments[index] @@ -336,7 +340,9 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty val parameter = typeConstructor.getParameter(index) val upperBounds = (0 until parameter.upperBoundCount()).mapTo(mutableListOf()) { paramIndex -> - parameter.getUpperBound(paramIndex) // TODO: substitution + substitutor.safeSubstitute( + this as TypeSystemInferenceExtensionContext, parameter.getUpperBound(paramIndex) + ) } if (!oldArgument.isStarProjection() && oldArgument.getVariance() == TypeVariance.OUT) {