[FE 1.0] Substituted possible fixed type variables after completion in accordance with @OverloadResolutionByLambdaReturnType

^KT-48031 Fixed
This commit is contained in:
Victor Petukhov
2022-07-02 12:07:46 +02:00
committed by teamcity
parent 5b5da025f4
commit 3ed87c29c7
9 changed files with 69 additions and 5 deletions
@@ -15,9 +15,7 @@ import org.jetbrains.kotlin.resolve.calls.components.candidate.CallableReference
import org.jetbrains.kotlin.resolve.calls.components.candidate.SimpleResolutionCandidate
import org.jetbrains.kotlin.resolve.calls.inference.NewConstraintSystem
import org.jetbrains.kotlin.resolve.calls.inference.addEqualityConstraintIfCompatible
import org.jetbrains.kotlin.resolve.calls.inference.components.KotlinConstraintSystemCompleter
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintSystemCompletionMode
import org.jetbrains.kotlin.resolve.calls.inference.components.TrivialConstraintTypeInferenceOracle
import org.jetbrains.kotlin.resolve.calls.inference.components.*
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage.Empty.hasContradiction
import org.jetbrains.kotlin.resolve.calls.inference.model.ExpectedTypeConstraintPositionImpl
import org.jetbrains.kotlin.resolve.calls.model.*
@@ -304,7 +302,10 @@ class KotlinCallCompleter(
private fun ResolutionCandidate.substitutedReturnType(): UnwrappedType? {
val returnType = resolvedCall.candidateDescriptor.returnType?.unwrap() ?: return null
return resolvedCall.freshVariablesSubstitutor.safeSubstitute(returnType)
val substitutedReturnTypeWithVariables = resolvedCall.freshVariablesSubstitutor.safeSubstitute(returnType)
return (getResultingSubstitutor() as? NewTypeSubstitutorByConstructorMap)
?.safeSubstitute(substitutedReturnTypeWithVariables)
?: substitutedReturnTypeWithVariables
}
private fun ResolutionCandidate.addExpectedTypeConstraint(
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImp
import org.jetbrains.kotlin.resolve.calls.model.*
import org.jetbrains.kotlin.resolve.calls.tower.*
import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.types.model.TypeSubstitutorMarker
import java.util.ArrayList
sealed class ResolutionCandidate : Candidate, KotlinDiagnosticsHolder {
@@ -55,6 +56,8 @@ sealed class ResolutionCandidate : Candidate, KotlinDiagnosticsHolder {
private var newSystem: NewConstraintSystemImpl? = null
private var currentApplicability: CandidateApplicability = CandidateApplicability.RESOLVED
fun getResultingSubstitutor(): TypeSubstitutorMarker? = newSystem?.buildCurrentSubstitutor()
abstract fun getSubResolvedAtoms(): List<ResolvedAtom>
abstract fun addResolvedKtPrimitive(resolvedAtom: ResolvedAtom)