diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt index 4ee7c021005..4b95fcb0bf6 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.KtNodeTypes.* import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.builder.generateResolvedAccessExpression import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirVariable @@ -21,6 +22,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.builder.* +import org.jetbrains.kotlin.fir.fakeElement import org.jetbrains.kotlin.fir.lightTree.fir.DestructuringDeclaration import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.lexer.KtSingleValueToken @@ -123,7 +125,9 @@ fun generateDestructuringBlock( returnTypeRef = entry.returnTypeRef name = entry.name initializer = buildComponentCall { - explicitReceiver = generateResolvedAccessExpression(null, container) + val componentCallSource = entry.source?.fakeElement(FirFakeSourceElementKind.DesugaredComponentFunctionCall) + source = componentCallSource + explicitReceiver = generateResolvedAccessExpression(componentCallSource, container) componentIndex = index + 1 } this.isVar = isVar diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index 38617581e42..422f8accb13 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -259,7 +259,7 @@ class ExpressionsConverter( buildFunctionCall { source = binaryExpression.toFirSourceElement() calleeReference = buildSimpleNamedReference { - source = this@buildFunctionCall.source + source = operationReferenceSource ?: this@buildFunctionCall.source name = conventionCallName ?: operationTokenName.nameAsSafeName() } explicitReceiver = leftArgAsFir @@ -954,7 +954,9 @@ class ExpressionsConverter( return buildBlock { source = fakeSource val iteratorVal = generateTemporaryVariable( - this@ExpressionsConverter.baseSession, fakeSource, ITERATOR_NAME, + this@ExpressionsConverter.baseSession, + rangeExpression.source, + ITERATOR_NAME, buildFunctionCall { source = fakeSource calleeReference = buildSimpleNamedReference { @@ -983,11 +985,12 @@ class ExpressionsConverter( buildBlock block@{ source = blockNode?.toFirSourceElement() statements += convertLoopBody(blockNode).statements - if (parameter == null) return@block - val multiDeclaration = parameter!!.destructuringDeclaration + val valueParameter = parameter ?: return@block + val multiDeclaration = valueParameter.destructuringDeclaration val firLoopParameter = generateTemporaryVariable( - this@ExpressionsConverter.baseSession, null, - if (multiDeclaration != null) DESTRUCTURING_NAME else parameter!!.firValueParameter.name, + this@ExpressionsConverter.baseSession, + valueParameter.firValueParameter.source, + if (multiDeclaration != null) DESTRUCTURING_NAME else valueParameter.firValueParameter.name, buildFunctionCall { source = fakeSource calleeReference = buildSimpleNamedReference { @@ -996,7 +999,7 @@ class ExpressionsConverter( } explicitReceiver = generateResolvedAccessExpression(fakeSource, iteratorVal) }, - parameter!!.firValueParameter.returnTypeRef + valueParameter.firValueParameter.returnTypeRef ) if (multiDeclaration != null) { val destructuringBlock = generateDestructuringBlock(