diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 42679a3f8c2..b740533bc81 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1430,7 +1430,11 @@ class RawFirBuilder( } override fun visitSimpleNameExpression(expression: KtSimpleNameExpression, data: Unit): FirElement { - return generateAccessExpression(expression.toFirSourceElement(), expression.getReferencedNameAsName()) + val qualifiedSource = when { + expression.getQualifiedExpressionForSelector() != null -> expression.parent + else -> expression + }.toFirSourceElement() + return generateAccessExpression(qualifiedSource, expression.toFirSourceElement(), expression.getReferencedNameAsName()) } override fun visitConstantExpression(expression: KtConstantExpression, data: Unit): FirElement = diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index 00c770a6b51..7b9b87ca978 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -508,7 +508,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte statements += generateResolvedAccessExpression(desugaredSource, resultVar) } else { appendAssignment() - statements += generateAccessExpression(desugaredSource, unwrappedArgument.getReferencedNameAsName()) + statements += generateAccessExpression(desugaredSource, desugaredSource, unwrappedArgument.getReferencedNameAsName()) } } else { statements += initialValueVar diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index de44f106edd..56836930ac5 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -227,11 +227,15 @@ private fun FirExpression.createConventionCall( } } -fun generateAccessExpression(source: FirSourceElement?, name: Name): FirQualifiedAccessExpression = +fun generateAccessExpression( + qualifiedSource: FirSourceElement?, + calleReferenceSource: FirSourceElement?, + name: Name +): FirQualifiedAccessExpression = buildQualifiedAccessExpression { - this.source = source + this.source = qualifiedSource calleeReference = buildSimpleNamedReference { - this.source = source + this.source = calleReferenceSource this.name = name } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 5cef5623915..de400e5793d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -389,7 +389,12 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform calleeReference = when { lhsIsVar -> lhsReference!! else -> buildErrorNamedReference { - source = assignmentOperatorStatement.leftArgument.source + source = when (leftArgument) { + is FirFunctionCall -> leftArgument.source + is FirQualifiedAccess -> + leftArgument.calleeReference.source + else -> leftArgument.source + } diagnostic = ConeVariableExpectedError() } }