FIR: fix source element of FirQualifiedAccessExpression
This commit is contained in:
@@ -1430,7 +1430,11 @@ class RawFirBuilder(
|
||||
}
|
||||
|
||||
override fun visitSimpleNameExpression(expression: KtSimpleNameExpression, data: Unit): FirElement {
|
||||
return generateAccessExpression(expression.toFirSourceElement(), expression.getReferencedNameAsName())
|
||||
val qualifiedSource = when {
|
||||
expression.getQualifiedExpressionForSelector() != null -> expression.parent
|
||||
else -> expression
|
||||
}.toFirSourceElement()
|
||||
return generateAccessExpression(qualifiedSource, expression.toFirSourceElement(), expression.getReferencedNameAsName())
|
||||
}
|
||||
|
||||
override fun visitConstantExpression(expression: KtConstantExpression, data: Unit): FirElement =
|
||||
|
||||
+1
-1
@@ -508,7 +508,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
||||
statements += generateResolvedAccessExpression(desugaredSource, resultVar)
|
||||
} else {
|
||||
appendAssignment()
|
||||
statements += generateAccessExpression(desugaredSource, unwrappedArgument.getReferencedNameAsName())
|
||||
statements += generateAccessExpression(desugaredSource, desugaredSource, unwrappedArgument.getReferencedNameAsName())
|
||||
}
|
||||
} else {
|
||||
statements += initialValueVar
|
||||
|
||||
+7
-3
@@ -227,11 +227,15 @@ private fun FirExpression.createConventionCall(
|
||||
}
|
||||
}
|
||||
|
||||
fun generateAccessExpression(source: FirSourceElement?, name: Name): FirQualifiedAccessExpression =
|
||||
fun generateAccessExpression(
|
||||
qualifiedSource: FirSourceElement?,
|
||||
calleReferenceSource: FirSourceElement?,
|
||||
name: Name
|
||||
): FirQualifiedAccessExpression =
|
||||
buildQualifiedAccessExpression {
|
||||
this.source = source
|
||||
this.source = qualifiedSource
|
||||
calleeReference = buildSimpleNamedReference {
|
||||
this.source = source
|
||||
this.source = calleReferenceSource
|
||||
this.name = name
|
||||
}
|
||||
}
|
||||
|
||||
+6
-1
@@ -389,7 +389,12 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
|
||||
calleeReference = when {
|
||||
lhsIsVar -> lhsReference!!
|
||||
else -> buildErrorNamedReference {
|
||||
source = assignmentOperatorStatement.leftArgument.source
|
||||
source = when (leftArgument) {
|
||||
is FirFunctionCall -> leftArgument.source
|
||||
is FirQualifiedAccess ->
|
||||
leftArgument.calleeReference.source
|
||||
else -> leftArgument.source
|
||||
}
|
||||
diagnostic = ConeVariableExpectedError()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user