[FIR][LightTree] Pass source elements in FOR loop parts
This commit is contained in:
committed by
TeamCityServer
parent
8bbdc20809
commit
0d99b01dcb
+5
-1
@@ -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
|
||||
|
||||
+10
-7
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user