diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index ce7f32f6059..733227130f6 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -10,20 +10,17 @@ import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration import org.jetbrains.kotlin.fir.declarations.impl.FirVariableImpl import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirExplicitThisReference import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference -import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.constants.evaluate.* @@ -268,12 +265,13 @@ internal fun generateAccessExpression(session: FirSession, psi: PsiElement?, nam internal fun generateDestructuringBlock( session: FirSession, multiDeclaration: KtDestructuringDeclaration, - container: FirNamedDeclaration, + container: FirVariable, + tmpVariable: Boolean, extractAnnotationsTo: KtAnnotated.(FirAbstractAnnotatedElement) -> Unit, toFirOrImplicitTypeRef: KtTypeReference?.() -> FirTypeRef ): FirExpression { return FirBlockImpl(session, multiDeclaration).apply { - if (container is FirVariable) { + if (tmpVariable) { statements += container } val isVar = multiDeclaration.isVar diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 71786ee2f12..d6c918f4dff 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -614,7 +614,11 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = false ) destructuringBlock = generateDestructuringBlock( - this@RawFirBuilder.session, multiDeclaration, multiParameter, { extractAnnotationsTo(it) } + this@RawFirBuilder.session, + multiDeclaration, + multiParameter, + tmpVariable = false, + extractAnnotationsTo = { extractAnnotationsTo(it) } ) { toFirOrImplicitType() } multiParameter } else { @@ -1102,7 +1106,11 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { ) if (multiDeclaration != null) { val destructuringBlock = generateDestructuringBlock( - this@RawFirBuilder.session, multiDeclaration, firLoopParameter, { extractAnnotationsTo(it) } + this@RawFirBuilder.session, + multiDeclaration, + firLoopParameter, + tmpVariable = true, + extractAnnotationsTo = { extractAnnotationsTo(it) } ) { toFirOrImplicitType() } if (destructuringBlock is FirBlock) { for ((index, statement) in destructuringBlock.statements.withIndex()) { @@ -1348,7 +1356,13 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { session, multiDeclaration, "destruct", multiDeclaration.initializer.toFirExpression("Destructuring declaration without initializer") ) - return generateDestructuringBlock(session, multiDeclaration, baseVariable, { extractAnnotationsTo(it) }) { + return generateDestructuringBlock( + session, + multiDeclaration, + baseVariable, + tmpVariable = true, + extractAnnotationsTo = { extractAnnotationsTo(it) } + ) { toFirOrImplicitType() } }