[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 this.isVar = isVar
symbol = FirPropertySymbol(entry.name) // TODO? symbol = FirPropertySymbol(entry.name) // TODO?
source = entry.source
isLocal = true isLocal = true
status = FirDeclarationStatusImpl(Visibilities.Local, Modality.FINAL) status = FirDeclarationStatusImpl(Visibilities.Local, Modality.FINAL)
annotations += entry.annotations annotations += entry.annotations
@@ -1020,6 +1020,7 @@ class DeclarationsConverter(
private fun convertDestructingDeclaration(destructingDeclaration: LighterASTNode): DestructuringDeclaration { private fun convertDestructingDeclaration(destructingDeclaration: LighterASTNode): DestructuringDeclaration {
var isVar = false var isVar = false
val entries = mutableListOf<FirVariable<*>>() val entries = mutableListOf<FirVariable<*>>()
val source = destructingDeclaration.toFirSourceElement()
var firExpression: FirExpression = var firExpression: FirExpression =
buildErrorExpression(null, ConeSimpleDiagnostic("Destructuring declaration without initializer", DiagnosticKind.Syntax)) buildErrorExpression(null, ConeSimpleDiagnostic("Destructuring declaration without initializer", DiagnosticKind.Syntax))
destructingDeclaration.forEachChildren { 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 package org.jetbrains.kotlin.fir.lightTree.fir
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.generateTemporaryVariable import org.jetbrains.kotlin.fir.builder.generateTemporaryVariable
import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -14,10 +15,11 @@ import org.jetbrains.kotlin.fir.lightTree.converter.generateDestructuringBlock
data class DestructuringDeclaration( data class DestructuringDeclaration(
val isVar: Boolean, val isVar: Boolean,
val entries: List<FirVariable<*>>, val entries: List<FirVariable<*>>,
val initializer: FirExpression val initializer: FirExpression,
val source: FirSourceElement
) { ) {
fun toFirDestructingDeclaration(session: FirSession): FirExpression { 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) return generateDestructuringBlock(session, this, baseVariable, tmpVariable = true)
} }
} }