FIR: Fix value-parameters redeclare in destructuring
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user