From c1a8344b45a792cf0e06a46388d71501270ffe91 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 29 Aug 2019 13:14:29 +0300 Subject: [PATCH] [FIR] Add forgotten nullability for receivers of safe calls --- .../FirCallCompletionResultsWriterTransformer.kt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt index 5ae1f70217d..706ccb476bd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt @@ -16,11 +16,9 @@ import org.jetbrains.kotlin.fir.resolve.calls.candidate import org.jetbrains.kotlin.fir.resolve.constructFunctionalTypeRef import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.substituteOrNull +import org.jetbrains.kotlin.fir.resolve.withNullability import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType -import org.jetbrains.kotlin.fir.types.ConeKotlinType -import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef -import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance -import org.jetbrains.kotlin.fir.types.coneTypeSafe +import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl import org.jetbrains.kotlin.fir.types.impl.FirTypeProjectionWithVarianceImpl @@ -105,7 +103,14 @@ class FirCallCompletionResultsWriterTransformer( } } - val typeRef = typeCalculator.tryCalculateReturnType(declaration) + val typeRef = typeCalculator.tryCalculateReturnType(declaration).let { + if (functionCall.safe) { + val nullableType = it.coneTypeUnsafe().withNullability(ConeNullability.NULLABLE) + it.withReplacedConeType(nullableType) + } else { + it + } + } val initialType = subCandidate.substitutor.substituteOrNull(typeRef.type) val finalType = finalSubstitutor.substituteOrNull(initialType)