From 1ae4ad159865200eda34fcfb059275c9fc387ada Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Fri, 18 Aug 2017 01:12:43 +0300 Subject: [PATCH] [NI] Do not take type advice for delegation if type is not fixed --- .../jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt index 43975abb165..412ab292fd5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.resolve.calls.context.ContextDependency import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystem import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemCompleter import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind.FROM_COMPLETER +import org.jetbrains.kotlin.resolve.calls.inference.model.TypeVariableTypeConstructor import org.jetbrains.kotlin.resolve.calls.inference.toHandle import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResults @@ -52,6 +53,7 @@ import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils.createFakeExpressionOfType import org.jetbrains.kotlin.types.expressions.FakeCallResolver import org.jetbrains.kotlin.types.expressions.KotlinTypeInfo +import org.jetbrains.kotlin.types.typeUtil.contains import org.jetbrains.kotlin.util.OperatorNameConventions //TODO: check for 'operator' modifier! @@ -555,7 +557,8 @@ class DelegatedPropertyResolver( ) val call = delegateExpression.getCall(traceToResolveConventionMethods.bindingContext) - return call.getResolvedCall(traceToResolveConventionMethods.bindingContext)?.resultingDescriptor?.returnType + val pretendReturnType = call.getResolvedCall(traceToResolveConventionMethods.bindingContext)?.resultingDescriptor?.returnType + return pretendReturnType?.takeUnless { it.contains { it.constructor is TypeVariableTypeConstructor } } } } }