FIR expressions: perform some names refactoring
FirAccess -> FirQualifiedAccess FirAccessExpression -> FirQualifiedExpression FirPropertyAssignment -> FirVariableAssignment Introduce lValue & rValue in FirAssignment Introduce separate indexes in FirArraySetCall
This commit is contained in:
@@ -253,8 +253,8 @@ internal fun generateIncrementOrDecrementBlock(
|
||||
}
|
||||
}
|
||||
|
||||
internal fun generateAccessExpression(session: FirSession, psi: PsiElement?, name: Name): FirAccessExpression =
|
||||
FirAccessExpressionImpl(session, psi).apply {
|
||||
internal fun generateAccessExpression(session: FirSession, psi: PsiElement?, name: Name): FirQualifiedAccessExpression =
|
||||
FirQualifiedAccessExpressionImpl(session, psi).apply {
|
||||
calleeReference = FirSimpleNamedReference(session, psi, name)
|
||||
}
|
||||
|
||||
@@ -292,10 +292,10 @@ internal fun generateTemporaryVariable(
|
||||
session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression
|
||||
): FirVariable = generateTemporaryVariable(session, psi, Name.special("<$specialName>"), initializer)
|
||||
|
||||
private fun FirModifiableAccess.initializeLValue(
|
||||
private fun FirModifiableQualifiedAccess.initializeLValue(
|
||||
session: FirSession,
|
||||
left: KtExpression?,
|
||||
convertQualified: KtQualifiedExpression.() -> FirAccess?
|
||||
convertQualified: KtQualifiedExpression.() -> FirQualifiedAccess?
|
||||
): FirReference {
|
||||
return when (left) {
|
||||
is KtSimpleNameExpression -> {
|
||||
@@ -337,12 +337,12 @@ internal fun KtExpression?.generateAssignment(
|
||||
val arrayExpression = this.arrayExpression
|
||||
val arraySet = FirArraySetCallImpl(session, psi, value, operation).apply {
|
||||
for (indexExpression in indexExpressions) {
|
||||
arguments += indexExpression.convert()
|
||||
indexes += indexExpression.convert()
|
||||
}
|
||||
}
|
||||
if (arrayExpression is KtSimpleNameExpression) {
|
||||
return arraySet.apply {
|
||||
calleeReference = initializeLValue(session, arrayExpression) { convert() as? FirAccess }
|
||||
lValue = initializeLValue(session, arrayExpression) { convert() as? FirQualifiedAccess }
|
||||
}
|
||||
}
|
||||
return FirBlockImpl(session, arrayExpression).apply {
|
||||
@@ -351,7 +351,7 @@ internal fun KtExpression?.generateAssignment(
|
||||
session, this@generateAssignment, name,
|
||||
arrayExpression?.convert() ?: FirErrorExpressionImpl(session, arrayExpression, "No array expression")
|
||||
)
|
||||
statements += arraySet.apply { calleeReference = FirSimpleNamedReference(session, arrayExpression, name) }
|
||||
statements += arraySet.apply { lValue = FirSimpleNamedReference(session, arrayExpression, name) }
|
||||
}
|
||||
}
|
||||
if (operation != FirOperation.ASSIGN &&
|
||||
@@ -364,12 +364,12 @@ internal fun KtExpression?.generateAssignment(
|
||||
session, this@generateAssignment, name,
|
||||
this@generateAssignment?.convert() ?: FirErrorExpressionImpl(session, this@generateAssignment, "No LValue in assignment")
|
||||
)
|
||||
statements += FirPropertyAssignmentImpl(session, psi, value, operation).apply {
|
||||
calleeReference = FirSimpleNamedReference(session, this@generateAssignment, name)
|
||||
statements += FirVariableAssignmentImpl(session, psi, value, operation).apply {
|
||||
lValue = FirSimpleNamedReference(session, this@generateAssignment, name)
|
||||
}
|
||||
}
|
||||
}
|
||||
return FirPropertyAssignmentImpl(session, psi, value, operation).apply {
|
||||
calleeReference = initializeLValue(session, this@generateAssignment) { convert() as? FirAccess }
|
||||
return FirVariableAssignmentImpl(session, psi, value, operation).apply {
|
||||
lValue = initializeLValue(session, this@generateAssignment) { convert() as? FirQualifiedAccess }
|
||||
}
|
||||
}
|
||||
@@ -1247,7 +1247,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
||||
override fun visitQualifiedExpression(expression: KtQualifiedExpression, data: Unit): FirElement {
|
||||
val selector = expression.selectorExpression
|
||||
?: return FirErrorExpressionImpl(session, expression, "Qualified expression without selector")
|
||||
val firSelector = selector.toFirExpression() as FirModifiableAccess
|
||||
val firSelector = selector.toFirExpression() as FirModifiableQualifiedAccess
|
||||
firSelector.safe = expression is KtSafeQualifiedExpression
|
||||
firSelector.explicitReceiver = expression.receiverExpression.toFirExpression()
|
||||
return firSelector
|
||||
@@ -1255,14 +1255,14 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
||||
|
||||
override fun visitThisExpression(expression: KtThisExpression, data: Unit): FirElement {
|
||||
val labelName = expression.getLabelName()
|
||||
return FirAccessExpressionImpl(session, expression).apply {
|
||||
return FirQualifiedAccessExpressionImpl(session, expression).apply {
|
||||
calleeReference = FirExplicitThisReference(session, expression, labelName)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitSuperExpression(expression: KtSuperExpression, data: Unit): FirElement {
|
||||
val superType = expression.superTypeQualifier
|
||||
return FirAccessExpressionImpl(session, expression).apply {
|
||||
return FirQualifiedAccessExpressionImpl(session, expression).apply {
|
||||
calleeReference = FirExplicitSuperReference(session, expression, superType.toFirOrImplicitType())
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.FirErrorDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
@@ -72,15 +72,15 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
|
||||
errorExpression.psi?.let { println(it) }
|
||||
}
|
||||
|
||||
override fun visitAccess(access: FirAccess) {
|
||||
val calleeReference = access.calleeReference
|
||||
override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess) {
|
||||
val calleeReference = qualifiedAccess.calleeReference
|
||||
if (calleeReference is FirErrorNamedReference) {
|
||||
errorReferences++
|
||||
println(calleeReference.errorReason)
|
||||
} else {
|
||||
normalReferences++
|
||||
}
|
||||
super.visitAccess(access)
|
||||
super.visitQualifiedAccess(qualifiedAccess)
|
||||
}
|
||||
|
||||
override fun visitExpression(expression: FirExpression) {
|
||||
|
||||
Reference in New Issue
Block a user