From 75283c74ac6038d8be45a4aa4a5ac576651376f2 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 3 Apr 2020 15:38:47 +0300 Subject: [PATCH] [FIR] Generate type arguments for variable assignments --- .../fir/backend/generators/CallAndReferenceGenerator.kt | 2 +- .../FirCallCompletionResultsWriterTransformer.kt | 5 ++++- .../ir/irText/regressions/integerCoercionToT.fir.txt | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index 1d3d6493a40..b7d85a7ec1a 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -219,7 +219,7 @@ internal class CallAndReferenceGenerator( is IrVariableSymbol -> IrSetVariableImpl(startOffset, endOffset, type, symbol, assignedValue, origin) else -> generateErrorCallExpression(startOffset, endOffset, calleeReference) } - }.applyReceivers(variableAssignment) + }.applyTypeArguments(variableAssignment).applyReceivers(variableAssignment) } fun convertToIrConstructorCall(annotationCall: FirAnnotationCall): IrExpression { 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 9926c2c5fbd..63d3cf8e7f9 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 @@ -135,6 +135,7 @@ class FirCallCompletionResultsWriterTransformer( ): CompositeTransformResult { val calleeReference = variableAssignment.calleeReference as? FirNamedReferenceWithCandidate ?: return variableAssignment.compose() + val typeArguments = computeTypeArguments(variableAssignment, calleeReference.candidate) return variableAssignment.transformCalleeReference( StoreCalleeReference, buildResolvedNamedReference { @@ -142,7 +143,9 @@ class FirCallCompletionResultsWriterTransformer( name = calleeReference.name resolvedSymbol = calleeReference.candidateSymbol }, - ).compose() + ).apply { + replaceTypeArguments(typeArguments) + }.compose() } override fun transformFunctionCall(functionCall: FirFunctionCall, data: ExpectedArgumentType?): CompositeTransformResult { diff --git a/compiler/testData/ir/irText/regressions/integerCoercionToT.fir.txt b/compiler/testData/ir/irText/regressions/integerCoercionToT.fir.txt index f9828625ce4..a0cc133be32 100644 --- a/compiler/testData/ir/irText/regressions/integerCoercionToT.fir.txt +++ b/compiler/testData/ir/irText/regressions/integerCoercionToT.fir.txt @@ -90,7 +90,7 @@ FILE fqName: fileName:/integerCoercionToT.kt VALUE_PARAMETER name:cv index:1 type:.CInt32VarX BLOCK_BODY CALL 'public final fun (value: T_INT of .): kotlin.Unit declared in ' type=kotlin.Unit origin=EQ - : + : kotlin.Int $receiver: GET_VAR 'cv: .CInt32VarX declared in .foo' type=.CInt32VarX origin=null value: CALL 'public final fun (): kotlin.Int declared in .IdType' type=kotlin.Int origin=GET_PROPERTY $this: GET_VAR 'value: .IdType declared in .foo' type=.IdType origin=null