From 48cea4b80000f0d11bb5579af59f365ef7b2f428 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 17 Jun 2019 19:14:09 +0300 Subject: [PATCH] FIR: take expected type into account during inference NB: this commit provokes some inference problems, which are fixed by next commit about type inference for assignments --- .../fir/resolve/transformers/FirBodyResolveTransformer.kt | 5 +++++ compiler/fir/resolve/testData/resolve/stdlib/hashSet.txt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index dc533f06c5c..ff1dcc54324 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -39,6 +39,7 @@ import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator import org.jetbrains.kotlin.resolve.calls.components.InferenceSession import org.jetbrains.kotlin.resolve.calls.inference.buildAbstractResultingSubstitutor import org.jetbrains.kotlin.resolve.calls.inference.components.KotlinConstraintSystemCompleter +import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator import org.jetbrains.kotlin.types.model.* import org.jetbrains.kotlin.utils.addIfNotNull @@ -602,6 +603,10 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn val initialType = initialSubstitutor.substituteOrSelf(typeRef.type) + if (expectedTypeRef is FirResolvedTypeRef) { + candidate.system.addSubtypeConstraint(initialType, expectedTypeRef.type, SimpleConstraintSystemConstraintPosition) + } + val completionMode = candidate.computeCompletionMode(inferenceComponents, expectedTypeRef, initialType) val completer = ConstraintSystemCompleter(inferenceComponents) val replacements = mutableMapOf() diff --git a/compiler/fir/resolve/testData/resolve/stdlib/hashSet.txt b/compiler/fir/resolve/testData/resolve/stdlib/hashSet.txt index ca80d3e7ee9..f6a513b7b8e 100644 --- a/compiler/fir/resolve/testData/resolve/stdlib/hashSet.txt +++ b/compiler/fir/resolve/testData/resolve/stdlib/hashSet.txt @@ -1,5 +1,5 @@ FILE: hashSet.kt - public final val a: R|kotlin/collections/MutableSet|? = R|java/util/HashSet.HashSet|() + public final val a: R|kotlin/collections/MutableSet|? = R|java/util/HashSet.HashSet|() public get(): R|kotlin/collections/MutableSet|? public final var b: R|kotlin/collections/MutableSet|? = Null(null) public get(): R|kotlin/collections/MutableSet|?