From 472ab09511ef879f850f8d08f95f6803a01f0f9e Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Fri, 21 May 2021 15:13:41 +0300 Subject: [PATCH] Do stub types substitution for property initializer's type --- .../resolve/VariableTypeAndInitializerResolver.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/VariableTypeAndInitializerResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/VariableTypeAndInitializerResolver.kt index 5addb56506f..c5c803c384b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/VariableTypeAndInitializerResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/VariableTypeAndInitializerResolver.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtVariableDeclaration import org.jetbrains.kotlin.resolve.DescriptorResolver.transformAnonymousTypeIfNeeded import org.jetbrains.kotlin.resolve.calls.components.InferenceSession +import org.jetbrains.kotlin.resolve.calls.inference.BuilderInferenceSession import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.scopes.LexicalScope @@ -175,8 +176,13 @@ class VariableTypeAndInitializerResolver( val inferredType = expressionTypingServices.safeGetType( scope, initializer, TypeUtils.NO_EXPECTED_TYPE, dataFlowInfo, inferenceSession, trace ) - val approximatedType = approximateType(inferredType, local) - return declarationReturnTypeSanitizer.sanitizeReturnType(approximatedType, wrappedTypeFactory, trace, languageVersionSettings) + val preparedType = approximateType( + if (inferenceSession is BuilderInferenceSession) { + inferenceSession.getNotFixedToInferredTypesSubstitutor().safeSubstitute(inferredType.unwrap()) + } else inferredType, + local + ) + return declarationReturnTypeSanitizer.sanitizeReturnType(preparedType, wrappedTypeFactory, trace, languageVersionSettings) } private fun approximateType(type: KotlinType, local: Boolean): UnwrappedType =