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 {
|
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 =
|
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)
|
statements += generateResolvedAccessExpression(desugaredSource, resultVar)
|
||||||
} else {
|
} else {
|
||||||
appendAssignment()
|
appendAssignment()
|
||||||
statements += generateAccessExpression(desugaredSource, unwrappedArgument.getReferencedNameAsName())
|
statements += generateAccessExpression(desugaredSource, desugaredSource, unwrappedArgument.getReferencedNameAsName())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
statements += initialValueVar
|
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 {
|
buildQualifiedAccessExpression {
|
||||||
this.source = source
|
this.source = qualifiedSource
|
||||||
calleeReference = buildSimpleNamedReference {
|
calleeReference = buildSimpleNamedReference {
|
||||||
this.source = source
|
this.source = calleReferenceSource
|
||||||
this.name = name
|
this.name = name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-1
@@ -389,7 +389,12 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
|
|||||||
calleeReference = when {
|
calleeReference = when {
|
||||||
lhsIsVar -> lhsReference!!
|
lhsIsVar -> lhsReference!!
|
||||||
else -> buildErrorNamedReference {
|
else -> buildErrorNamedReference {
|
||||||
source = assignmentOperatorStatement.leftArgument.source
|
source = when (leftArgument) {
|
||||||
|
is FirFunctionCall -> leftArgument.source
|
||||||
|
is FirQualifiedAccess ->
|
||||||
|
leftArgument.calleeReference.source
|
||||||
|
else -> leftArgument.source
|
||||||
|
}
|
||||||
diagnostic = ConeVariableExpectedError()
|
diagnostic = ConeVariableExpectedError()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user