From 55558e2969bad8e5518f72dfac2c88e9ab44c277 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 7 Sep 2015 19:18:53 +0300 Subject: [PATCH] Use ConstraintSystem.getPartialSubstitutor to get more correct substitution --- .../src/org/jetbrains/kotlin/idea/util/FuzzyType.kt | 4 ++-- .../kotlin/idea/completion/smart/TypeInstantiationItems.kt | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/FuzzyType.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/FuzzyType.kt index 8f28fdff9da..c83250c65b1 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/FuzzyType.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/FuzzyType.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.TypeSubstitutor import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.typeUtil.* -import java.util.HashSet +import java.util.* fun CallableDescriptor.fuzzyReturnType(): FuzzyType? { val returnType = getReturnType() ?: return null @@ -133,7 +133,7 @@ class FuzzyType( val substitutedType = substitutor.substitute(type, Variance.INVARIANT) val otherSubstitutedType = substitutor.substitute(otherType.type, Variance.INVARIANT) return if (substitutedType != null && otherSubstitutedType != null && substitutedType.checkInheritance(otherSubstitutedType)) - substitutor + constraintSystem.getPartialSubstitutor() else null } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/TypeInstantiationItems.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/TypeInstantiationItems.kt index 639960dee7c..756a455e1fa 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/TypeInstantiationItems.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/TypeInstantiationItems.kt @@ -310,9 +310,7 @@ class TypeInstantiationItems( val substitutor = inheritorFuzzyType.checkIsSubtypeOf(expectedFuzzyType) ?: continue if (!substitutor.isEmpty) { val inheritorTypeSubstituted = substitutor.substitute(inheritorFuzzyType.type, Variance.INVARIANT)!! - if (!ErrorUtils.containsUninferredParameter(inheritorTypeSubstituted)) { - inheritorFuzzyType = FuzzyType(inheritorTypeSubstituted, freeParameters + inheritorFuzzyType.freeParameters) - } + inheritorFuzzyType = FuzzyType(inheritorTypeSubstituted, freeParameters + inheritorFuzzyType.freeParameters) } }