[FIR] Fix destructuring declaration creation via light tree
This commit is contained in:
+1
@@ -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
|
||||||
|
|||||||
+2
-1
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+4
-2
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user