[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.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.fir.builder.generateResolvedAccessExpression
|
import org.jetbrains.kotlin.fir.builder.generateResolvedAccessExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
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.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.*
|
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.lightTree.fir.DestructuringDeclaration
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.lexer.KtSingleValueToken
|
import org.jetbrains.kotlin.lexer.KtSingleValueToken
|
||||||
@@ -123,7 +125,9 @@ fun generateDestructuringBlock(
|
|||||||
returnTypeRef = entry.returnTypeRef
|
returnTypeRef = entry.returnTypeRef
|
||||||
name = entry.name
|
name = entry.name
|
||||||
initializer = buildComponentCall {
|
initializer = buildComponentCall {
|
||||||
explicitReceiver = generateResolvedAccessExpression(null, container)
|
val componentCallSource = entry.source?.fakeElement(FirFakeSourceElementKind.DesugaredComponentFunctionCall)
|
||||||
|
source = componentCallSource
|
||||||
|
explicitReceiver = generateResolvedAccessExpression(componentCallSource, container)
|
||||||
componentIndex = index + 1
|
componentIndex = index + 1
|
||||||
}
|
}
|
||||||
this.isVar = isVar
|
this.isVar = isVar
|
||||||
|
|||||||
+10
-7
@@ -259,7 +259,7 @@ class ExpressionsConverter(
|
|||||||
buildFunctionCall {
|
buildFunctionCall {
|
||||||
source = binaryExpression.toFirSourceElement()
|
source = binaryExpression.toFirSourceElement()
|
||||||
calleeReference = buildSimpleNamedReference {
|
calleeReference = buildSimpleNamedReference {
|
||||||
source = this@buildFunctionCall.source
|
source = operationReferenceSource ?: this@buildFunctionCall.source
|
||||||
name = conventionCallName ?: operationTokenName.nameAsSafeName()
|
name = conventionCallName ?: operationTokenName.nameAsSafeName()
|
||||||
}
|
}
|
||||||
explicitReceiver = leftArgAsFir
|
explicitReceiver = leftArgAsFir
|
||||||
@@ -954,7 +954,9 @@ class ExpressionsConverter(
|
|||||||
return buildBlock {
|
return buildBlock {
|
||||||
source = fakeSource
|
source = fakeSource
|
||||||
val iteratorVal = generateTemporaryVariable(
|
val iteratorVal = generateTemporaryVariable(
|
||||||
this@ExpressionsConverter.baseSession, fakeSource, ITERATOR_NAME,
|
this@ExpressionsConverter.baseSession,
|
||||||
|
rangeExpression.source,
|
||||||
|
ITERATOR_NAME,
|
||||||
buildFunctionCall {
|
buildFunctionCall {
|
||||||
source = fakeSource
|
source = fakeSource
|
||||||
calleeReference = buildSimpleNamedReference {
|
calleeReference = buildSimpleNamedReference {
|
||||||
@@ -983,11 +985,12 @@ class ExpressionsConverter(
|
|||||||
buildBlock block@{
|
buildBlock block@{
|
||||||
source = blockNode?.toFirSourceElement()
|
source = blockNode?.toFirSourceElement()
|
||||||
statements += convertLoopBody(blockNode).statements
|
statements += convertLoopBody(blockNode).statements
|
||||||
if (parameter == null) return@block
|
val valueParameter = parameter ?: return@block
|
||||||
val multiDeclaration = parameter!!.destructuringDeclaration
|
val multiDeclaration = valueParameter.destructuringDeclaration
|
||||||
val firLoopParameter = generateTemporaryVariable(
|
val firLoopParameter = generateTemporaryVariable(
|
||||||
this@ExpressionsConverter.baseSession, null,
|
this@ExpressionsConverter.baseSession,
|
||||||
if (multiDeclaration != null) DESTRUCTURING_NAME else parameter!!.firValueParameter.name,
|
valueParameter.firValueParameter.source,
|
||||||
|
if (multiDeclaration != null) DESTRUCTURING_NAME else valueParameter.firValueParameter.name,
|
||||||
buildFunctionCall {
|
buildFunctionCall {
|
||||||
source = fakeSource
|
source = fakeSource
|
||||||
calleeReference = buildSimpleNamedReference {
|
calleeReference = buildSimpleNamedReference {
|
||||||
@@ -996,7 +999,7 @@ class ExpressionsConverter(
|
|||||||
}
|
}
|
||||||
explicitReceiver = generateResolvedAccessExpression(fakeSource, iteratorVal)
|
explicitReceiver = generateResolvedAccessExpression(fakeSource, iteratorVal)
|
||||||
},
|
},
|
||||||
parameter!!.firValueParameter.returnTypeRef
|
valueParameter.firValueParameter.returnTypeRef
|
||||||
)
|
)
|
||||||
if (multiDeclaration != null) {
|
if (multiDeclaration != null) {
|
||||||
val destructuringBlock = generateDestructuringBlock(
|
val destructuringBlock = generateDestructuringBlock(
|
||||||
|
|||||||
Reference in New Issue
Block a user