[FIR] Fix destructuring declaration creation via light tree

This commit is contained in:
vldf
2020-08-27 10:42:09 +03:00
committed by Mikhail Glukhikh
parent 3428a5434b
commit 58c5d3a6ca
3 changed files with 7 additions and 3 deletions
@@ -123,6 +123,7 @@ fun generateDestructuringBlock(
}
this.isVar = isVar
symbol = FirPropertySymbol(entry.name) // TODO?
source = entry.source
isLocal = true
status = FirDeclarationStatusImpl(Visibilities.Local, Modality.FINAL)
annotations += entry.annotations
@@ -1020,6 +1020,7 @@ class DeclarationsConverter(
private fun convertDestructingDeclaration(destructingDeclaration: LighterASTNode): DestructuringDeclaration {
var isVar = false
val entries = mutableListOf<FirVariable<*>>()
val source = destructingDeclaration.toFirSourceElement()
var firExpression: FirExpression =
buildErrorExpression(null, ConeSimpleDiagnostic("Destructuring declaration without initializer", DiagnosticKind.Syntax))
destructingDeclaration.forEachChildren {
@@ -1031,7 +1032,7 @@ class DeclarationsConverter(
}
}
return DestructuringDeclaration(isVar, entries, firExpression)
return DestructuringDeclaration(isVar, entries, firExpression, source)
}
/**
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.lightTree.fir
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.generateTemporaryVariable
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -14,10 +15,11 @@ import org.jetbrains.kotlin.fir.lightTree.converter.generateDestructuringBlock
data class DestructuringDeclaration(
val isVar: Boolean,
val entries: List<FirVariable<*>>,
val initializer: FirExpression
val initializer: FirExpression,
val source: FirSourceElement
) {
fun toFirDestructingDeclaration(session: FirSession): FirExpression {
val baseVariable = generateTemporaryVariable(session, initializer.source, "destruct", initializer)
val baseVariable = generateTemporaryVariable(session, source, "destruct", initializer)
return generateDestructuringBlock(session, this, baseVariable, tmpVariable = true)
}
}