[FIR][LightTree] Pass source elements in FOR loop parts

This commit is contained in:
Andrey Zinovyev
2021-04-16 14:52:58 +03:00
committed by TeamCityServer
parent 8bbdc20809
commit 0d99b01dcb
2 changed files with 15 additions and 8 deletions
@@ -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
@@ -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(