diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinToResolvedCallTransformer.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinToResolvedCallTransformer.kt index 2b8a15838e9..7a363729cf8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinToResolvedCallTransformer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinToResolvedCallTransformer.kt @@ -132,8 +132,10 @@ class KotlinToResolvedCallTransformer( } } - @Suppress("UNCHECKED_CAST") val resolvedCall = - ktPrimitiveCompleter.completeResolvedCall(candidate, baseResolvedCall.completedDiagnostic) as ResolvedCall + val resolvedCall = ktPrimitiveCompleter.completeResolvedCall( + candidate, baseResolvedCall.completedDiagnostic(resultSubstitutor) + ) as ResolvedCall + forwardCallToInferenceSession(baseResolvedCall, context, resolvedCall, tracingStrategy) resolvedCall diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt index 9176e65e0bd..1a0ccacdf9a 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt @@ -7,9 +7,11 @@ package org.jetbrains.kotlin.resolve.calls.model import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.resolve.calls.components.* -import org.jetbrains.kotlin.resolve.calls.inference.buildResultingSubstitutor +import org.jetbrains.kotlin.resolve.calls.components.CallableReferenceCandidate +import org.jetbrains.kotlin.resolve.calls.components.TypeArgumentsToParametersMapper +import org.jetbrains.kotlin.resolve.calls.components.extractInputOutputTypesFromCallableReferenceExpectedType import org.jetbrains.kotlin.resolve.calls.inference.components.FreshVariableNewTypeSubstitutor +import org.jetbrains.kotlin.resolve.calls.inference.components.NewTypeSubstitutor import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintError import org.jetbrains.kotlin.resolve.calls.inference.model.TypeVariableForLambdaReturnType @@ -184,16 +186,14 @@ sealed class CallResolutionResult( super.setAnalyzedResults(subResolvedAtoms) } - val completedDiagnostic: List - get() { - val substitutor = constraintSystem.buildResultingSubstitutor() - return diagnostics.map { - if (it !is NewConstraintError) return@map it - val lowerType = it.lowerType.safeAs()?.unwrap() ?: return@map it - val newLowerType = substitutor.safeSubstitute(lowerType) - NewConstraintError(newLowerType, it.upperType, it.position) - } + fun completedDiagnostic(substitutor: NewTypeSubstitutor): List { + return diagnostics.map { + if (it !is NewConstraintError) return@map it + val lowerType = it.lowerType.safeAs()?.unwrap() ?: return@map it + val newLowerType = substitutor.safeSubstitute(lowerType) + NewConstraintError(newLowerType, it.upperType, it.position) } + } override val atom: ResolutionAtom? get() = null diff --git a/compiler/resolution/src/org/jetbrains/kotlin/types/TypeApproximator.kt b/compiler/resolution/src/org/jetbrains/kotlin/types/TypeApproximator.kt index 606e7cf7534..dc9a69b5f3d 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/types/TypeApproximator.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/types/TypeApproximator.kt @@ -90,12 +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 } + override val typeVariable: (TypeVariableTypeConstructorMarker) -> Boolean get() = { true } + override fun capturedType(ctx: TypeSystemInferenceExtensionContext, type: CapturedTypeMarker): Boolean = true } }