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:
Mikhail Glukhikh
2019-02-05 19:24:35 +03:00
parent 8ea4500ab4
commit f040eaff27
22 changed files with 188 additions and 176 deletions
@@ -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())
}
}
@@ -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) {